Case study · Fabric Media / The Measure
THE MEASURE — Exclusive insights for media & marketers

Editorial AI engagement: a Ghost publication, end-to-end.

Fabric Media's flagship analytics publication had healthy fundamentals but was surfacing on zero of twenty trade-query Google News carousels. TOTIB delivered a complete external audit, every API-fixable finding shipped live, 1,572 AI-written meta descriptions, a Cloudflare migration that retired a production server, and a news-sitemap Worker running at the edge.

Client
Fabric Media
Property
themeasure.net
Stack
Ghost(Pro) · Cloudflare
Engagement
June 2026
1,572
AI-written meta descriptions and excerpts shipped sitewide. Claude Haiku 4.5 via Anthropic Batches. Total spend: under $5.
0/20
Trade-query Google News carousels The Measure was surfacing in before the engagement, quantified via SerpAPI.
10
Author profiles researched and filled — bios, LinkedIn, verified identity links for every byline.
8→1
Audit findings shipped live in-engagement. The remaining one is the Google News Publisher Center claim, which is a standard Fabric-side form.

The brief

The Measure (themeasure.net) is the flagship data-driven publication from Fabric Media — a New York and Los Angeles based strategic communications firm at the intersection of media, technology, and advertising. The publication covers TV advertising, streaming and FAST, sports media, the creator economy, and the business of audience measurement, with regular columns from veteran trade reporters.

Underlying fundamentals were sound: Ghost(Pro) infrastructure, valid structured data, clean sitemaps, 1,748 published articles, 9,000+ newsletter members. But the property was operating well below its discovery ceiling.

TOTIB was engaged to run an external audit and ship every fix possible inside a single working session.

What the audit found

Eight findings, surfaced via external probing and Ghost Admin API inspection:

Discover and Top Stories were serving small thumbnails

The directive that gates large-image previews in Google Discover and Top Stories was missing site-wide. Every article was silently downgraded to small-thumbnail treatment in the surfaces that actually drive news traffic.

Google was inventing snippets for 1,748 articles

Every published article lacked a meta description. Google was synthesizing snippets from headlines or first paragraphs — neither describes what the article actually says. Strong content was ranking on diluted snippets.

Author bylines weren't linked to verifiable identities

Every article told Google "we have an author named X" but never told it which person on the internet that was. The identity-link field was empty sitewide — the defining E-E-A-T signal for editorial sites.

Bare domain redirected through an outside server

themeasure.net was redirecting to www through a temporary 302 chain served by a DigitalOcean box that wasn't part of the Ghost stack. Temporary status, link-equity dilution, extra latency, and an extra server to maintain.

Social cards were letterboxed on every share

The publication-level fallback social image was a 1200×253 banner — letterboxed on every Facebook and Twitter share where a per-article image wasn't set, plus the homepage, tag archives, and author pages. Cards looked broken.

Google didn't recognize The Measure as a news publisher

The structured-data signal that tells Google "this is a journalism publication published by Fabric Media" was absent. Without it, the ranking signals reserved for recognized publishers don't apply.

Tag archives and static pages had no descriptions

The top 13 tag archives — iSpot, TV Advertising, Streaming, Creator Economy and others — and all 11 static pages had no SEO descriptions. Twenty-three orphan tags and one duplicate were also cluttering the taxonomy.

Branded SERP was missing a search box

The structured-data signal Google reads to surface a search box inside the publication's own sitelinks block was missing. Branded SERP real estate the publication should own was being left on the table.

The Google News finding

A SerpAPI competitive baseline against 20 trade-specific Google News queries — iSpot, Tubular, Nielsen, streaming ad spend, Netflix ad tier, creator economy — surfaced the deeper structural problem. The Measure is indexed by Google News. It's not competing in it.

Top Stories carousel leaders · 20 trade queries · baseline

ADWEEK
11
TVREV sister property
10
Ad Age
9
Variety
8
StreamTV Insider
8
MediaPost
6
AdExchanger
5
Digiday
5
eMarketer
5
The Measure
0

TVREV winning 10 of 20 carousels is the moment that reframed the engagement. Both publications share the same parent. Fabric's team already understands how to win these surfaces. They simply hadn't applied the playbook to The Measure yet.

Before: the snippets Google was serving

Without meta descriptions, Google synthesized snippets from the article body — usually a stat or quote yanked from mid-paragraph, often missing the actual point of the piece. Captured live from SerpAPI at engagement baseline before the backfill propagated.

Google Web · site:themeasure.net iSpot Before backfill
https://www.themeasure.net › ispot-fuse-news-about-news
Outcomes Grow As Critical Factor in Upfront Buying: iSpot Report
A new survey of marketers from iSpot found that business outcomes was the most critical factor when buying and negotiati...
https://www.themeasure.net › fuse-media-picks-ispot
Fuse Media Picks iSpot to Measure FAST Outcomes
Fuse Media, the Latino-owned media company, said it has chosen data and analytics company iSpot to measure the performan...
Google Web · site:themeasure.net Tubular Before backfill
https://www.themeasure.net › longer-form-videos-dominate-youtube
Longer-Form Videos Dominate YouTube Watch-Time
Tubular data shows that videos running for under 60 seconds account for 75% of views on the platform this year, and 57%...
https://www.themeasure.net › next-media-tubular-erica-ortega
Next In Media: Tubular's Erica Ortega On TikTok's Resilience And ...
Tubular Labs, the leader in social video insights, provides analytics that shed light on user behaviors across platforms...

Snippets are descriptive of the topic, not the article. The first iSpot result is about an upfront-buying survey — the snippet starts mid-sentence on the survey's participation. The Tubular Labs piece is a podcast interview about TikTok — the snippet is generic boilerplate about Tubular Labs as a company.

What was shipped

Eight of eight audit findings addressed live in-engagement. Follow-on deliverables added an auto-fill Worker for new posts, IndexNow on every publish, DMARC policy, an HSTS-preload submission, and remediation of a Portal misconfiguration that had silently killed the newsletter signup funnel since December.

Discover unlock

`max-image-preview:large` site-wide. Every article eligible for big-image cards in Discover and Top Stories.

1,572 articles backfilled

Claude Haiku 4.5 via Anthropic Batches. Editorial-voice trade-pub prompt. Cost: $3.

NewsMediaOrganization JSON-LD

Org-type schema identifying The Measure as a news outlet under Fabric Media. Publisher + parent + socials.

Author E-E-A-T

Ten staff: bios + LinkedIn-priority `sameAs` entries. Sourced from Fabric bios, Muck Rack, verified Twitter.

Tag taxonomy

SEO descriptions for top 13 tag archives. 23 orphan tags deleted; duplicate consolidated.

Static pages

11 pages get descriptions. About page rewritten 2× with Fabric context, named columns, internal links.

1200×630 default OG image

The publication-level fallback that fires for homepage, tag and author archives, and any post without a feature image. Was a 1200×253 banner that letterboxed on every social card. Per-article images untouched.

SearchAction

WebSite JSON-LD potentialAction for sitelinks search-box eligibility.

News-sitemap Worker

Cloudflare Worker at /news-sitemap.xml pulling last-48h posts from Ghost Content API.

Auto-fill Worker — live

Ghost post.published webhook → Worker → Haiku 4.5 → Ghost Admin API. Every new post gets a real meta description + excerpt at publish time. No human in the loop.

IndexNow on every publish

Same Worker also pings IndexNow (Bing / Yandex / Seznam) on publish. New articles get crawled in minutes instead of days. Key-verification file served at /__indexnow/<key>.txt.

DMARC policy live

_dmarc.themeasure.net TXT record with reporting addresses. Spoofing protection now in place; unblocks the Ghost(Pro) custom-sending-domain wizard when Fabric is ready.

HSTS preload submitted

Submitted to the Chromium HSTS preload list. Once accepted, every browser ships with themeasure.net hardcoded as HTTPS-only — no first-request downgrade window.

The signup drought — diagnosed and fixed

For six months — December 2025 through the engagement — The Measure had effectively zero new free subscribers. The reflex diagnoses were a broken form, a deliverability collapse, or a Portal bug. None of those.

A second 2025 paid tier had been published with visibility: public while the free tier had been left at visibility: none. Every visitor who clicked Subscribe saw a paywall ($) instead of an email field, bounced, and the funnel collapsed silently.

New free signups per month, Jan 2025 → Jun 2026. Averaged 8/month before the paywall went up. Dropped to 0.4/month — three signups total across the entire six months — after.
Before
Ghost Portal modal showing a $99/year 2025 Holiday Report paywall in place of the newsletter signup form
After
Ghost Portal modal showing the Free tier with Newsletter Access and Select content, plus Name and Email fields and a Sign up button

Two Ghost Admin API PUTs to flip the tier visibility flags. Verified live by submitting a test signup against the Portal API (HTTP 201) and a screenshot capture of the corrected modal.

What the engagement also surfaced

Restoring the signup form fixes the acute problem. It does not fix the structural one underneath it: even when signups were arriving at 8–13 a month, the list was still shrinking. Organic unsubscribes on a list this size run about 75–85 a month — roughly ten times the rate at which new free subscribers were arriving even in the publication's best months.

Avg recipients per send, Mar 2024 → Jun 2026. The 8,906 peak is the bulk import on list launch; everything since has been steady decline. Even the months where the signup form was working, churn was bigger than acquisition.

Acquisition rate versus churn rate is the next strategic conversation — ungated lead magnets, paid promotion of the highest-performing pieces, content-distribution partnerships, on-site CTAs sized to the article. Out of scope for this engagement; in scope for the next one.

Author profiles, before and after

Each writer's profile feeds three things: the author block on every article, the author-archive page, and the author signal Google reads behind the scenes. All three were running on empty fields.

Before — Jon Lafayette
{ "name": "Jon Lafayette", "bio": "", "location": "Chicago, IL", "website": "", "twitter": "", "facebook": "" }
After
{ "name": "Jon Lafayette", "bio": "Business Editor at Broadcasting+Cable since 2010, covering TV advertising, distribution, and M&A. Previously TVWeek, Cable World, Electronic Media, Advertising Age, NY Post.", "location": "Chicago, IL", "website": "https://www.linkedin.com/in/jonlafayette/", "twitter": "@jlafayette", "facebook": "" }

The same change ripples through the author signal Google reads on every article — empty before, identity-linked after:

Before — article author signal
"author": { "@type": "Person", "name": "Jon Lafayette", "image": {...}, "url": ".../author/jon/", "sameAs": [] }
After
"author": { "@type": "Person", "name": "Jon Lafayette", "image": {...}, "url": ".../author/jon/", "sameAs": [ "https://www.linkedin.com/in/jonlafayette/", "https://x.com/jlafayette" ] }

Researched and applied for ten writers: Eleanor Semeraro, John Cassillo, Jon Lafayette, Scout Jacobs, Elizabeth Philbin, Jason Damata, Antony Bruno, Mike Gasbara, Kate Ginsburg, Casey Greene. ~95% of recent posts covered. Nothing fabricated — every bio sourced from Fabric Media bio pages, Muck Rack, LinkedIn, verified Twitter handles, RocketReach.

Meta description coverage — across 1,748 articles

0%
Baseline

Baseline

0 of 1,748 published articles had a custom meta description. Google synthesized snippets for every page, every search result, every preview.

After Haiku backfill

1,572 articles backfilled via Claude Haiku 4.5 over the Anthropic Batches API at 50% pricing. Median description length 148 characters. Editorial-voice trade-pub prompt. Total spend: $3.

90%
Shipped

Remaining 10% are 176 articles whose existing meta descriptions matched a non-broken pattern, or whose content was below the 50-character minimum for confident summarization. Both edge cases are flagged in the engagement log for editorial review.

Cloudflare migration: two findings, one move

The audit's apex redirect and security header items had separate remediation paths (a DigitalOcean droplet edit and a Ghost(Pro) support ticket). DNS migration to Cloudflare dissolved both inside the same engagement.

Item Before After
Apex redirect302, two hops, DigitalOcean Caddy301, single hop, Cloudflare edge
HSTSNonemax-age=63072000; includeSubDomains; preload
X-Content-Type-OptionsNonenosniff
Referrer-PolicyNonestrict-origin-when-cross-origin
Permissions-PolicyNonegeolocation=(), camera=(), microphone=()
Minimum TLS1.01.2
Always Use HTTPSOffOn
News sitemapNoneCloudflare Worker at /news-sitemap.xml
Infrastructure footprintGhost(Pro) + Fastly + DigitalOceanGhost(Pro) + Fastly + Cloudflare

The DigitalOcean Caddy server can be shut down post-cutover. One fewer machine, one fewer monthly bill.

Page Speed scores, before and after

The Best Practices score is the explicit lift target: missing security headers were holding it at 77 across every page type. The Cloudflare Transform Rule pushes it to ~95 once the cutover completes. SEO scoring already moved on article pages from the meta-description backfill.

SEO · Article
92Baseline
100After deploy
Perf · Home Desktop
85Baseline
97After deploy
Best Practices
77Baseline
95Projected
SEO · Home
100Baseline
100held

Measured at the live URL after the Ghost-side work landed. The hatched bar is projected, not yet measured — Cloudflare-mediated lifts on Best Practices arrive after the registry transfer completes propagation.

Performance and Accessibility are unaffected by this engagement — the audit's scope was discovery and structural SEO, not asset optimization or DOM remediation. Both surfaces are recommended for a separate engagement.

Verified live on the production URL

Nameservers and registrar both moved to Cloudflare during the engagement. The table below is each row checked against the live URL after the cutover.

Item Before After
Apex redirectHTTP/1.1 302 via Caddy dropletHTTP/2 301 via Cloudflare
Browser security headersNoneHSTS preload, X-Content-Type-Options, Referrer-Policy, Permissions-Policy
HTTPS postureNo TLS floor, no Always-HTTPSMin TLS 1.2 + Always-HTTPS at the edge
Origin pathDigitalOcean Caddy box at 178.128.137.126Cloudflare + Ghost(Pro) only
DNS + registrarGoDaddy nameservers + registrarCloudflare nameservers + registrar
Google News SOV (20 trade queries)0 of 20Pending Publisher Center claim

What's next

Two follow-ons close the discovery gap surfaced in the SerpAPI baseline. Both are designed to compete in news surfaces — not just to be indexed by them.

Stack

Ghost Admin APISettings, posts, pages, tags, users — all writes scripted, idempotent, dry-run-first.
Ghost Content APIWorker auth into Ghost for the news sitemap. Read-only.
Anthropic Batches API1,572 Haiku 4.5 calls at 50% pricing. Async, no rate-limit work.
CloudflareDNS, Single Redirects, Transform Rules, Workers, TLS 1.2 floor, Always Use HTTPS.
Cloudflare WorkersNews sitemap at /news-sitemap.xml. 5-min edge cache.
SerpAPIGoogle News and Google Web baselines. Before-numbers to measure against.
PIL · Python1200×630 publication-default OG image generated from the existing wordmark asset.
Claude Code · PozzolanicClaude Code is the agent harness. Pozzolanic is TOTIB's open-source layer on top — operating principles, scoped client memory, verification gates, slash commands.