Six commits, chronologically. Not proposals — merged pull requests, checked-in diffs, resolving URLs. The record is the proof.
1. Hreflang + FAQPage Schema on /builds/ (PR #47)
hreflang="en" and hreflang="x-default" added across all eight main section pages. A six-question FAQPage schema landed on /builds/ for rich-result eligibility, alongside CollectionPage dateModified and inLanguage. Homepage and /about/ schema freshness dates refreshed to match. Lighthouse on the deploy preview: SEO 100, Accessibility 98, Best Practices 100, PWA 100.
◈ SITE-WIDE · HREFLANG
8 Section Pages — Alternate Tags Added
hreflang="en" + hreflang="x-default" now declared consistently across every main section page, closing an international-targeting ambiguity gap.
Merged · PR #47
◈ BUILDS · SCHEMA
FAQPage + CollectionPage Freshness
Six-question FAQPage schema for rich-result eligibility. CollectionPage dateModified + inLanguage added. Lighthouse SEO 100 on preview.
Merged · PR #47
2. Six Missing Daily Briefs — Continuity Restored
The daily-content automation had gone quiet for six days, June 24 through 29. Six new daily briefs went in following the established seven-topic rotation, daily/index.html got newest-first cards, sitemap.xml gained six new URLs with dated lastmod entries, and the homepage's WebPage.dateModified was corrected to match. Lighthouse on the signal01 preview: Performance 90, Accessibility 98, Best Practices 100, SEO 100, PWA 100 — no regressions.
3. ProfessionalService Schema for Local/GEO Discoverability (PR #49)
The homepage carried only a generic Organization type — no LocalBusiness-family markup, despite being a Canby, Oregon consulting practice serving Oregon and PNW clients. A ProfessionalService block landed with geo-coordinates and areaServed, sitting alongside the existing Organization and WebSite schema rather than replacing it.
4. GEO Tags + BreadcrumbList Backfilled on 44 Daily Briefs (PR #50)
The daily-content-agent template started emitting geo.region/geo.placename/geo.position/ICBM meta tags and BreadcrumbList structured data on June 20 — but the 44 briefs generated before that date, May 6 through June 19, never got backfilled. This PR brought the full daily archive to parity for local/GEO discoverability and breadcrumb rich results. Forty-four files, one pattern, zero exceptions.
◈ LOCAL · GEO
ProfessionalService Schema — Live
Geo-coordinates + areaServed added to the homepage's structured data stack for local search and map discoverability.
Merged · PR #49
◈ DAILY ARCHIVE · PARITY
44 Briefs Backfilled — GEO + Breadcrumbs
May 6 – June 19 briefs brought up to the same GEO-tag + BreadcrumbList standard the template has emitted since June 20.
Merged · PR #50
5. The One Page That Was Missing Parity (PR #51)
Every other section page — news, videos, builds, profile, about, archive — carried hreflang alternates and a keywords meta tag. /reel-engine/ was the one page site-wide missing both, plus dateModified and inLanguage on its TechArticle schema. Brought to parity, sitemap lastmod refreshed. A one-page gap is still a gap.
6. The Duplicate-Meta-Description Root Cause (PR #52)
The biggest find of the week: 54 of 55 daily briefs were sharing only seven unique descriptions, rotated verbatim across six-to-eight dated pages apiece — a textbook duplicate-meta-description problem that actively suppresses unique search-result snippets. The root cause traced back to scripts/daily-content-agent.mjs: its deterministic per-topic fallback template (the path that runs whenever no OPENAI_API_KEY is configured) had no date-based differentiator baked in.
The fix went two levels deep. First, the symptom: every daily brief's description — meta, og:description, twitter:description, and JSON-LD — got rewritten to end with a per-date clause instead of the fixed boilerplate tail, making all 54 descriptions unique while trimming them closer to Google's ~155–160 character display budget. dateModified and sitemap lastmod bumped for every touched page, and daily/index.html's card excerpts were regenerated to match. Second, the cause: fallbackBrief() now runs through a new humanDate() helper so every future auto-generated brief stays unique even when the AI path is unavailable. Patching the output without patching the generator would have meant doing this again in six weeks.
◈ REEL-ENGINE · PARITY
Hreflang + Keywords + Schema Dates
The last section page site-wide without hreflang alternates and a keywords tag. Brought in line with every sibling page.
Merged · PR #51
◈ ROOT CAUSE · FIXED
54 Duplicate Descriptions → 54 Unique
humanDate() helper added to the fallback generator so this class of bug can't quietly recur on the next auto-generated brief.
Merged · PR #52