Rename 11 FAQ titles to question form + strip duplicate body Q&A sections (SSOT cleanup)
What was done
Two changes that the validator-Claude’s earlier report tied together: rename the FAQ titles to question form (the audit’s § 6 mapping) and clean up the body/schema duplicate that was causing per-Question drift warnings on six articles. Bundling them per-article was the right call — same diff per file, no second pass needed.
Renames (11 articles)
Per bailey_seo_aiseo_plan.md § 6, every FAQ title now leads with the question buyers actually type into AI assistants — and most include a location qualifier (Treasure Valley, Ada County, Southern Idaho, Boise, etc.) since AI ranks specificity.
| Slug | New title |
|---|---|
feasibility-studies | What does a land development feasibility study tell you in Southern Idaho? |
cost | How much does land development engineering cost in the Treasure Valley? (unchanged — already question form) |
road-parking-design | What road and parking standards does ACHD require for new subdivisions? |
water-sewer-systems | How are water and sewer systems designed for new subdivisions in the Treasure Valley? |
stormwater-management | Is stormwater detention required for my project in the Treasure Valley? |
irrigation-systems | How do pressurized irrigation systems affect site design in Idaho? |
value-engineering | How do you value-engineer a development without losing yield or quality? |
entitlements | How long does the entitlement process take in Ada County? |
preliminary-layout | What determines lot yield on a preliminary subdivision layout? |
agency-coordination | Which agencies do I need to coordinate with for an Idaho subdivision? |
neighborhood-meetings | Are neighborhood meetings required before a public hearing in Idaho? |
public-hearings | What is the public hearing process for development in Ada County? |
URLs (slugs) unchanged — no redirects needed. The <title> tag, H1, breadcrumb label, and FAQ hub array entry all update from a single frontmatter title: field on the collection-driven articles. Feasibility-studies (hardcoded astro page) needed three manual edits to mirror the same change.
SSOT duplicate cleanup (11 articles)
The earlier round added a faq[] frontmatter array to every collection FAQ, and the SSOT change to FaqArticle.astro started rendering both the FAQPage JSON-LD AND a visible <dl> from that single source. But each article’s body still had a ## Common questions {#faq} markdown section with the same Q&As — meaning the page rendered them twice (once from markdown, once from SSOT dl), and the schema text drifted from the body text per the validator’s per-Question check.
Stripped:
## Common questions {#faq}H2 + all**Q?**paragraphs from 10 collection articles +cost.md(11 total).- 5 inline
### How much does X cost?subsections fromcost.md’s service-family## Civil engineering/## Land planning/ etc. blocks (those were embedded duplicates of the SSOT-rendered Q&As). { id: faq, label: "Common questions" }toc entries from all 11 articles (the section those entries pointed to no longer exists; SSOT renders below the markdown body without a toc anchor).
Now: every Q&A appears exactly once in the rendered HTML — in the SSOT-driven <dl class="article-faq-list"> block at the end of each article, with matching FAQPage JSON-LD in <head> from the same source. Drift is structurally impossible.
Build verification
- 184 pages built clean
- All 7 spot-checked article URLs render the new question-form
<title>tag article-faq-listdl present on all 8 spot-checked URLs (including cost)- Zero “Common questions” string remnants in body markup on any of the 8 spot-checked URLs
items.json
faq-rename flipped to done with note explaining the bundle (rename + SSOT cleanup).
Why
Two compounding wins in one diff per article:
-
The visibility play. The audit baseline showed Bailey invisible on 8 of 10 high-intent queries. Question-form titles with location qualifiers directly address that — when an AI assistant gets asked “how long does plat approval take in Ada County?”, a page titled exactly “How long does the entitlement process take in Ada County?” with FAQPage schema is a much stronger citation candidate than one titled “Entitlements explained: from concept to council vote.”
-
The structural fix. The validator-Claude’s drift findings (6 of 10 collection articles had Q&A pairs where schema text didn’t match body verbatim) were caused by my earlier hand-edits when I lifted answers into the
faq[]frontmatter. The SSOT pattern eliminates that whole class of bug — both surfaces now read from the same array, so they can’t disagree.
Bundling was correct. Touching each article once was lower cognitive load than two passes, and the diffs stay tightly scoped per file.
Files affected
Modified:
src/content/faqs/stormwater-management.md— title + body strip + tocsrc/content/faqs/entitlements.md— title + body strip + tocsrc/content/faqs/agency-coordination.md— title + body strip + tocsrc/content/faqs/neighborhood-meetings.md— title + body strip + tocsrc/content/faqs/public-hearings.md— title + body strip + tocsrc/content/faqs/preliminary-layout.md— title + body strip + tocsrc/content/faqs/road-parking-design.md— title + body strip + tocsrc/content/faqs/water-sewer-systems.md— title + body strip + tocsrc/content/faqs/irrigation-systems.md— title + body strip + tocsrc/content/faqs/value-engineering.md— title + body strip + tocsrc/content/faqs/cost.md— body strip (meta-Qs) + 5 inline H3 strips + tocsrc/pages/dev-iq/faqs/feasibility-studies.astro— title in BaseLayout prop, H1, Article schema headline (3 edits, hardcoded page bypasses FaqArticle SSOT)src/pages/dev-iq/faqs/index.astro— faqs[] array titles updated to matchsrc/content/seo-plan/items.json— faq-rename → done
Created:
src/content/devlog/2026-04-28-faq-rename-and-ssot-cleanup.md— this entry
What’s next
Re-run the validator after upload + Cloudflare purge:
python tools/validate_schema.py --bailey
Expected after this commit lands: 15 pass, 0 warn, 0 fail. The 6 drift warnings should clear because schema and body now share one source. The 9 already-passing pages stay passing.
Then the next P0 work in items.json by chronological target:
gsc-property(target 2026-05-08) — verify Google Search Console domain property + submit sitemap-index.xml. Outside codebase, ~30 min for Ryan.apple-business-connect(target 2026-05-15) — Apple Maps + Siri presence. Outside codebase, ~30 min.bing-wmt(target 2026-05-15) — import GSC property, covers Bing/Yahoo/DuckDuckGo/Ecosia. ChatGPT search runs on Bing’s index, so this has compounding AI value. Outside codebase.homepage-faq(target 2026-05-30) — entity-defining FAQ block on the homepage, mirroring what’s now on the FAQ hub. In-codebase. ~1 hour.google-business-profile(target 2026-05-30) — claim/verify GBP, fill out hours/photos/services. Outside codebase, ~1 hour active + 5–14 days for postcard verification.