TOTIB

Case Study — Finger Lakes Daily News

AI-Driven Technical SEO: 100 Days From Acquisition to Storm-Proof

How a local news site rebuilt its entire technical SEO foundation with AI-powered engineering—then a major storm proved the system could scale.

54→99
Mobile PageSpeed
+45 points
7.4%
Organic CTR
Up from 4.6%
1.6M
Storm Day Requests
87.5% cache hit rate
12+
Schema Types
Full structured data

The Challenge

A Legacy News Site With Untapped Potential

When FLX Local Media acquired Finger Lakes Daily News in January 2026, the site had loyal readership but virtually no technical SEO infrastructure. No structured data. No performance optimization. No monitoring. No strategy for which content should—or shouldn't—be indexed.

The site was running on WordPress with default settings, serving a mix of original local reporting and syndicated national content through unoptimized templates. Lighthouse scores hovered around 54 on mobile and 69 on desktop. There was no JSON-LD structured data, no canonical URL strategy, and no mechanism to prevent thin or duplicate content from diluting the site's authority in search.

The goal: build a technical SEO foundation that lets the journalism shine in search—without months of manual optimization cycles. We needed a system that could audit, implement, and monitor at the pace of a 24/7 newsroom.

All Google Traffic — Search + Discover + News (Jan 1–Apr 8, 2026 — GSC)

The Approach

AI as the Engineering Engine

We used Claude, Anthropic's AI assistant, as a core engineering tool across the entire technical SEO stack—from structured data implementation to edge caching configuration to automated health monitoring.

This is not "AI-generated content." Every optimization was a technical infrastructure change: schema markup, server configuration, edge caching, image delivery, script loading, and monitoring pipelines. AI was the engineering engine—used to design and implement structured data architecture, indexing strategy, page speed optimizations, edge caching, and automated monitoring at a pace that would have taken a traditional agency months.
January 2026
Acquisition & Baseline
Data pipelines established: GA4, Google Search Console, BigQuery warehouse. Documented every metric, confounder, and data source before touching code.
February 2026
Structured Data & Indexing
12+ JSON-LD schema types implemented. Noindex strategy deployed for syndicated content. Custom sitemaps built including Google News and obituary providers. 410 Gone for expired content.
March 2026
Performance Sprint & Edge Infrastructure
DNS migrated to Cloudflare. APO enabled. LCP images optimized across every template. GTM replaced with Zaraz, cutting 730ms of blocking time. Weather Worker built for automated storm coverage.
Late March 2026
Domain Cutover & Stress Test
Migrated from .dev to .com. Days later, a major storm system hit—driving 1.6M requests in a single day. Infrastructure held. Cache hit rates reached 87.5%.

Structured Data

12 Schema Types. Every Page Covered.

We designed a comprehensive structured data architecture from scratch—which schema types to implement, what signals to prioritize, and how to structure them for maximum search visibility. The result: a dynamic layer covering every content type on the site, generated from live WordPress data.

Content TypeSchemaKey Signals
News ArticlesNewsArticleheadline, author, dates, contentLocation with geo, isAccessibleForFree
HomepageItemListLatest 9 articles for Top Stories carousel eligibility
EventsEventDate range, venue Place with geo, Offer pricing, attendance mode
ObituariesNewsArticleCustom table data — funeral home as author, residence, dates
Radio StationsRadioStationCall sign, broadcast timezone, area served, app links
Local BusinessesLocalBusinessAddress, phone, email, sameAs links
Town HubsCollectionPage + CityGeo coordinates, population, parent county, article list
WeatherFAQPage5 Q&A pairs on conditions, radar, update frequency
Storm AlertsLiveBlogPostingCoverage start/end time, continuous updates format
All PagesBreadcrumbListFull hierarchy: Home → Category → Article
Site-WideNewsMediaOrganizationIdentity, SearchAction for sitelinks search box
Every schema is generated from live data—no static templates, no stale markup. When a reporter publishes a breaking story at 2 AM, the structured data is correct before Google's next crawl. AI-generated meta descriptions provide search-optimized summaries without editorial overhead.
Live JSON-LD — Storm Article
{ "@type": "NewsArticle", "headline": "Heavy Rain Leads to Flooded Roads, Ongoing Cleanup in Finger Lakes", "datePublished": "2026-03-31T18:21:45-04:00", "author": { "@type": "Person", "name": "Lucas Day" }, "publisher": { "@type": "Organization", "name": "Finger Lakes Daily News" }, "isAccessibleForFree": true, "contentLocation": { "@type": "Place", "name": "Benton, NY", "geo": { "latitude": 42.714, "longitude": -77.041 }, "containedInPlace": { "name": "Yates County, NY" } } }

Page Speed

Below Average to Near-Perfect

A focused optimization sprint addressed every Core Web Vital across all page templates. Systematic, not incremental—root causes, not symptoms.

Before — Mobile
54
Lighthouse Performance
After — Mobile
99
Lighthouse Performance
Before — Desktop
69
Lighthouse Performance
After — Desktop
100
Lighthouse Performance
Daily Lighthouse Scores — Automated Monitoring (BQ)

What We Changed

GTM → Zaraz Migration
Google Tag Manager's client-side container consumed 730ms+ of Total Blocking Time. Cloudflare Zaraz runs at the edge—TBT dropped to under 10ms.
TBT: 730ms → 0ms
📷
LCP Image Strategy
Every template audited for above-fold images. First visible images get loading="eager" with fetchpriority="high". Preload hints include imagesrcset to prevent double-downloads.
Obit archive LCP: 5.6s → 1.2s
🌐
Third-Party Deferral
Leaflet (maps) and Chart.js were render-blocking on weather pages. Deferred loading with async CSS and polling guards cut weather page LCP from 6.5s to under 2s.
Weather LCP: 6.5s → 1.4s
🔧
DOM Mutation Guards
Station now-playing widgets were resetting LCP timestamps with every track update. Content-comparison guards only touch the DOM when values change.
Prevents LCP regression on 7 pages
📚
Font & Connection Hints
Preload Open Sans Latin subset. Preconnect to Tukios CDN (obituary photos) and Google APIs. DNS-prefetch as fallback for older browsers.
Eliminates render-blocking font loads
CF Bot JS Disabled
Cloudflare's JS Challenge script added 2,900–3,800ms of main-thread scripting. Disabled it, relied on other bot management layers. Immediate 20+ point mobile improvement.
Main-thread scripting: 3.8s → 0s

Indexing Strategy

Pruning the Index to Sharpen the Signal

Not everything should be in Google's index. We made data-driven decisions about what to show and what to hide.

The Syndicated Content Problem

Entertainment and national news sections were syndicated RSS feeds—identical content on hundreds of sites. They generated 683,000 impressions/month at 0.3% CTR from position 28. Actively hurting the site: diluting topical authority, wasting crawl budget, dragging down domain quality signals.

Solution: Noindex all syndicated sections. Results were immediate.

Before
4.6%
Organic CTR
After
7.4%
Organic CTR

Complete Indexing Rules

✓ Indexed

  • Local news articles (core content)
  • Obituaries (high local demand)
  • Police blotter & crime (82% share of voice)
  • Events, weather, storm coverage
  • County/town archives, station pages

✗ Noindexed

  • Entertainment & national news (syndicated)
  • Sponsored content
  • Tag archives (16,000+ thin pages)
  • Author archives, old thin posts

☠ 410 Gone

  • Expired crime posts (auto-removed)
  • Legacy redirect URLs (~15,000)
Organic CTR by Week (Google Search Console)

Infrastructure

Edge Delivery. Real-Time Monitoring. Automated Publishing.

Technical SEO is more than markup and meta tags. It's the infrastructure that determines whether your site can serve the right content, fast, under load, with full observability.

Cloudflare APO + Edge Cache
Full HTML caching at the edge. Polish (lossy WebP compression). Smart cache purging on publish. Most visitors never hit the origin server.
87.5% cache hit rate under peak load
📡
Nowplaying Edge API
Cloudflare Worker intercepts radio now-playing API requests with 5-second edge cache. Origin requests dropped 99.8%—from 83,000/day to ~120.
Response: 660ms → 2-5ms
🌪
Weather Worker
Dedicated Cloudflare Worker polls NWS and Open-Meteo, pushes forecasts to WordPress, auto-generates severe weather articles with radar map screenshots via Puppeteer.
Storm articles in <60 seconds
📊
Request-Level Analytics
Every request logged to BigQuery: cache status, origin time, geo, bot classification, TLS version. Full visibility into how the site is consumed.
387K+ requests/day to BQ
🛡
AI Labyrinth (Bot Protection)
Traps unauthorized AI crawlers in an endless maze of generated content, protecting original journalism without blocking legitimate search bots.
Enabled via undocumented CF API
🔇
Automated Health Checks
Health checks every 6 hours: endpoint availability, data pipeline integrity, external dependencies. Post-deploy QA runs automatically. Failures go to Slack.
Every deploy verified automatically

The Proof Point

When the Storm Hit, the Infrastructure Held

On March 30–31, 2026, a severe storm brought heavy rain, hail, and flooding to the Finger Lakes. The Weather Worker auto-published coverage. Social sharing drove a massive surge. In 48 hours, we served more requests than the previous month combined.

1.6M
Requests on March 31
17,104
Active users (Apr 1)
37,691
Pageviews (Apr 1)
Cloudflare Requests During Storm

What Happened

The Weather Worker detected NWS alerts and auto-published storm coverage with embedded radar maps—within 60 seconds of alert issuance. Google picked them up via the News Sitemap. The query "flood watch" generated 19,000+ impressions that week alone.

Edge caching absorbed the load. On March 31, Cloudflare served 58.5% from cache. By April 1, cache hit rate climbed to 87.5% as hot pages warmed. Average origin response time dropped from 300ms to 35ms.

Why It Matters

For a local news site, weather events are the moments that matter most. When roads flood and power goes out, people need local information fast. This storm was the first real test of the entire technical stack built over the previous three months.

Zero downtime. Zero performance degradation. Automated publishing. Full observability. The system didn't just survive—it was designed for exactly this moment.

A Prattsburgh fire truck drives through floodwaters in a residential area of Prattsburgh, NY.
Prattsburgh, NY — A fire truck navigates floodwaters on North Main Street after the March 31 storm. Photo published within minutes of submission via the automated weather pipeline.
A road in a wooded area scattered with debris and hail after a storm in the Finger Lakes.
Near Cook School — Hail and debris on a Finger Lakes road during the March 31 severe weather event. The Weather Worker auto-published coverage before the first reader photos arrived.

Results

Steady Gains, Strong Foundation

Technical SEO doesn't produce overnight hockey sticks. It produces a steadily improving baseline—better indexing, better CTR, better position—that compounds over time and makes every piece of content work harder.

🕑
Early indicators, not final results. We're 100 days into a long-term project. Google typically takes 3–6 months to fully reflect structural changes in rankings. The data below shows strong directional improvement, but we'll revisit with mature results in Q3 2026 when the full impact of structured data, indexing changes, and domain authority consolidation has had time to compound.

Share of Voice

Share of voice measures what percentage of Google search results for a topic feature FLDN content. In a competitive local news market, SOV is the clearest indicator of topical authority—and it moved fast after the structured data and indexing changes took effect.

82%
Crime & Police
Dominant in local crime search
9,602
Peak Storm Day Clicks
3,296 Search + 6,130 Discover + 176 News
#1
News Tab — Apr 1
Highest News click day ever
Why SOV matters: Before the technical SEO overhaul, FLDN was competing against its own syndicated content in search results. After noindexing syndicated sections and deploying structured data, Google's understanding of FLDN's topical authority sharpened dramatically. For crime and police blotter queries—FLDN's strongest original content vertical—the site now captures 82% of visible search results. When the April 1 storm hit, FLDN's News tab performance hit its all-time high: 176 clicks from 12,961 impressions, driven by auto-published weather coverage that Google surfaced within minutes.
100% Share of Voice — Flood Warning

Three days after the storm, FLDN owned the entire first page of Google for “Flood Warning for Finger Lakes Region”—position 1, all four Top Stories slots, and position 2. Every visible result was FLDN content. This is what structured data + fast automated publishing + topical authority looks like in practice.

Google search results for 'Flood Warning for Finger Lakes Region' showing FLDN owning position 1, all Top Stories, and position 2 — 100% share of voice.
Daily Clicks — All Google Traffic (Search + Discover + News)
Weekly Sessions: 2025 vs 2026 (GA4)
Cache Hit Rate Evolution
Average Position
GSC average position improved as syndicated content was deindexed and structured data signaled topical relevance.
13.2 → 8.9 (33% better)
Police Blotter CTR
Crime reporting CTR surged as structured data and focused indexing reinforced topical authority. 82% share of voice for crime queries.
8.3% → 10.6%
Mobile Traffic Share
With mobile PageSpeed at 99, the mobile experience matches desktop. Important for a news site where 73% of traffic is from phones.
73% of all organic clicks

AI Search Is Already Here

One of the less obvious benefits of comprehensive structured data: it makes your content legible to AI systems, not just traditional search crawlers. Since the structured data rollout, referral traffic from ChatGPT has grown from ~3 sessions/week to over 60—a 20x increase. AI engines like ChatGPT, Perplexity, and Copilot are citing FLDN articles directly in their responses.

This is the emerging discipline of Generative Engine Optimization (GEO)—ensuring your content surfaces in AI-generated answers, not just traditional SERPs. The structured data architecture is already paying dividends in this new channel, and we expect it to accelerate as AI search adoption grows.

Weekly Sessions from ChatGPT (GA4)

Observability

If You Can't Measure It, You Can't Improve It

Every metric in this case study is tracked in real-time through a custom analytics dashboard backed by BigQuery. Not a monthly PDF—a live operational tool.

BigQuery Data Warehouse
GA4, Google Search Console, Cloudflare request logs, advertising data, and health checks all flow into a single dataset. Every query is reproducible.
Custom SEO Dashboard
Share of voice by vertical, CTR trends, position tracking, indexing status—refreshed 4x daily. Built for daily editorial decisions, not quarterly board decks.
Automated QA Pipeline
Every deploy triggers: HTTP status checks, PHP error detection, cache verification, REST API health, plugin-specific validation. Failures go to Slack instantly.