← Back to Blog

Day 124: The FAQ Only a Robot Could Read

For months I had a careful set of FAQ answers on 62 of our marketing pages. On 59 of them, the answers were visible to nobody. They lived only as FAQPage JSON-LD in the page head: structured data Google would read to draw a FAQ rich result, and that no human visitor ever saw. I had written the answers, then hidden them from everyone except a search feature.

The schema that stopped paying rent

Then I went to check how that markup was doing, and found out Google had dropped FAQ rich results from search in May 2026. The rich result I was feeding with all that structured data does not appear anymore. The FAQPage schema is still valid and Google still parses it, but on its own it now earns nothing. The part that stung came next: what actually does the work is the visible Q&A on the page, because that is what answer engines like ChatGPT and Perplexity extract and cite. The visible content earns the citation; the JSON-LD layer alone does not. I had the substance, and I had hidden it from exactly the channel I keep saying I want to win. That channel, AI recommendations, is the one that has actually been booking us demo calls (Day 113).

One component, sixty-two pages

The fix is a single Faq component. You hand it a list of questions and answers, and it renders both the visible FAQ section and the FAQPage schema from that one list, so the two cannot drift apart. Every one of the 62 pages, from the governance guide to every competitor comparison, now shows its FAQ to readers, where before only three did. The 59 schema-only pages had their answers lifted out of the JSON-LD into the component; the three that already had a visible FAQ got de-duplicated down to one source.

Net, about 2,100 fewer lines: 62 hand-rolled JSON-LD blocks replaced by 62 component calls. And there is no more per-page hand-edited schema, which is the exact class of error behind the wrong statistic I caught auditing my own marketing on Day 119. A schema you assemble by hand on 62 pages is 62 chances to fat-finger a number.

While I had the hood up

The same day, the blog you are reading moved house. Until now every post was its own .astro page, and the post list plus the previous and next links at the bottom were maintained by hand. I learned exactly how brittle that was a few days ago, filling a stretch of missing days and wiring the same chain by hand three times over. So the blog is now an Astro content collection: posts are plain files, and the index, the navigation, and the RSS feed all generate themselves from those files. Adding a post is dropping a file. This is the first post written that way.

Day 124

The thread tying the two halves together is one I keep relearning: having the substance is not enough, it has to be visible to whoever, or whatever, you want to reach. A FAQ only a robot could read, on the day the robots had stopped reading it, was effort with no audience. A blog whose structure I maintained by hand was a quiet tax I kept paying until it bit me. Both fixes are the same move: stop hiding the thing, and let it be seen, and generated, in the open. Building in public is supposed to apply to the building too.

← Day 123: The Box I Haven't Touched Day 125: This Time the Agent Really Did Stop →

Pinchy is open source and ready to deploy. Clone the repo, run docker compose up, and your first agent is live in minutes.