The FAQ Schema Bug That Only Broke on One Word

A schema generator that decides whether to emit FAQPage markup by matching a heading's exact text is only as reliable as the phrases it was told to recognize. One site's generator matched "frequently asked questions" but not the abbreviated heading "FAQ:" that a portion of its own posts used, so a real, valid FAQ section rendered with no FAQPage schema at all. The fix was a one-line regex widen. Trusting the fix required checking all 836 posts, not a sample.

Yasser Soliman

Yasser Soliman

Fractional Head of WebOps

Published

Updated

10 min read

A rich-results test on one post returned something unexpected: no FAQPage schema, despite a clearly formatted question-and-answer section sitting right there in the rendered page. The FAQ content was real. The schema describing it to search engines and AI systems simply did not exist. Finding out why led to a one-word bug, a one-line fix, and a decision to verify that fix against all 836 posts on the site rather than trust a sample.

The Missing Schema Nobody Noticed

A page can render a perfectly normal-looking FAQ section and still emit zero FAQPage structured data, because most automated schema generators do not read the content the way a person does. They pattern-match against the heading text, and a heading that does not match the expected pattern produces no schema at all, silently, with no error and no visual difference on the page itself.

That is exactly what happened here. The post in question used the heading “FAQ:” above a set of clearly formatted questions and answers, in the same visual style as dozens of other posts on the same site that did generate FAQPage schema correctly. Nothing about the rendered page signaled a problem. The only way the gap surfaced at all was running that specific post through a schema validator during an unrelated audit and noticing the FAQPage type simply was not present in the output.

Why the Bug Existed in the First Place

The schema generator on this site decided whether to emit FAQPage markup by checking whether a heading’s text matched the literal phrase “frequently asked questions.” That is a narrow, deliberate design choice, not sloppiness: matching on exact heading text avoids the much worse failure mode of a generator that fires on any question-shaped content and wraps unrelated sections in FAQ schema they were never meant to have.

The narrowness that protects against false positives is the same narrowness that produces false negatives. A meaningful share of a large, multi-year blog’s posts used shorter or differently worded headings above their FAQ sections, “FAQ:”, “Common Questions,” “Quick Answers,” each one a legitimate way to introduce the same kind of content a human reader would immediately recognize as an FAQ. The generator recognized none of them.

What the generator recognized versus what it missed Left card, recognized, green: the exact heading text frequently asked questions triggers FAQPage schema correctly. Right card, missed, red: FAQ colon, Common Questions, and Quick Answers are all valid FAQ headings the generator never matched, so those posts emitted no FAQPage schema despite real question-and-answer content underneath. What the generator recognized vs. what it missed Same content, same visual style. Different heading text, different result. RECOGNIZED “Frequently Asked Questions” Only this exact phrase triggered FAQPage schema. MISSED “FAQ:”, “Common Questions,” “Quick Answers” Real FAQ content. Zero schema emitted, no error. Illustrative · yassersoliman.com · the detection gap

The One-Line Fix, and Why “One Line” Is the Dangerous Part

The actual fix was a one-line regex widen: broadening the heading-text match from the single literal phrase to a small set of accepted variants, including the abbreviated “FAQ” form, while keeping the match anchored tightly enough that it still would not fire on an unrelated heading that happened to share a word.

A one-line fix is exactly the kind of change that invites shipping it on the strength of “it fixed the post I was looking at.” That instinct is the actual risk here, not the fix itself. A text-matching pattern widened without care can start matching headings it was never meant to touch, silently generating FAQPage schema on a section that is not actually a question-and-answer list, which describes the page incorrectly to every system reading that markup. Getting the widen right meant testing it against both directions of failure: confirming it now caught the previously missed headings, and confirming it did not newly catch anything it shouldn’t.

Verifying Against the Full Corpus, Not a Sample

Confirming a text-matching fix on the ten or twenty posts that prompted the investigation would have answered whether those specific posts were fixed. It would not have answered whether the same fix quietly broke something elsewhere, on a post nobody was looking at during this pass. The only way to know that is checking every post the pattern could possibly touch, which meant running the updated detection logic against all 836 posts on the site rather than a sample.

Sample check vs. full corpus check Two cards. Left, sample check, 20 of 836 posts: confirms those posts are fixed, says nothing about the other 816. Right, full corpus check, all 836 posts: confirms the fix everywhere and rules out false positives on every post, not just the ones already suspected of a problem. Sample check vs. full corpus check Only one of these can rule out a false positive hiding on a post nobody suspected. SAMPLE CHECK 20 / 836 Confirms those 20. Says nothing about 816. FULL CORPUS CHECK 836 / 836 Zero false positives found, verified everywhere. Illustrative · yassersoliman.com · the verification scope

The full-corpus pass found zero false positives: no post picked up FAQPage schema it should not have as a result of the widened pattern. It also confirmed the actual scope of the original bug, a small number of posts across the site’s history that had been silently shipping without FAQ schema despite carrying genuinely valid FAQ content. A sample of twenty posts would have fixed the posts already suspected of a problem and left the actual size of the gap, and the confidence that nothing new had broken, both unknown.

What This Says About Automated Schema Generation Generally

The value of a periodic full-corpus check is not specific to FAQ schema. Any schema generator that decides what to emit by pattern-matching on heading text, class names, or content shape is fragile in exactly this way: quietly correct on the patterns it was built to recognize, quietly wrong on everything just outside that boundary, with nothing in the page’s rendered output to signal the difference.

This is also a useful moment to be precise about what fixing this bug is actually worth, because it is easy to overstate. Google restricted FAQ rich results, the visible expandable dropdown in search results, to a narrow set of government and health sites starting in August 2023, and reporting from May 2026 says the dropdown stopped appearing even for those remaining eligible sites as of May 7 that year[1]. Fixing this bug does not restore a search-result feature that no longer exists for a B2B SaaS marketing site regardless. What it restores is the underlying structured data itself: a machine-readable signal that a given section of a page is a set of questions and their answers, which feeds general entity clarity and gives any system parsing the page, search engine or AI assistant, a more accurate read of the content’s shape.

That is a real but modest benefit, and it should be described as one. A 2026 Ahrefs study tracking 1,885 pages that added JSON-LD schema against roughly 4,000 that did not found citation changes in ChatGPT and Google AI Mode inside statistical noise, with Google AI Overviews citations actually down 4.6%[2]. The site’s own evidence says the same thing even more directly: a competitor page with zero JSON-LD schema was cited twice in one answer while this site’s fully populated schema graph was cited zero times in the same test. Fixing a schema bug is worth doing because broken structured data is a correctness problem on its own terms, not because it is a lever for getting cited more. Framing it as the latter would be the exact mistake the technical SEO pillar this fix belongs to was built to avoid.

The Checklist to Audit Your Own FAQ Schema

Run any post carrying a visible FAQ section, however it is headed, through a structured-data testing tool and confirm FAQPage actually appears in the output, not just that the page renders without errors. If a post fails that check, look specifically at the heading text above the FAQ section and compare it against whatever exact phrase or pattern the generator is documented to require. A mismatch there, not a broken template or a plugin conflict, is the most common cause.

The three-step audit Three sequential steps. Step one, run the page through a structured-data validator. Step two, confirm FAQPage explicitly appears in the parsed output, not just that the page loads without errors. Step three, on failure, compare the heading text against the generator’s documented match pattern to find the mismatch. The three-step audit A clean page render is not evidence the schema exists. 1. RUN THE VALIDATOR Test the rendered page directly 2. CONFIRM FAQPAGE APPEARS Not just a clean render 3. CHECK THE HEADING TEXT On failure, compare against the match pattern Illustrative · yassersoliman.com · the audit checklist

And when a detection pattern gets widened to catch a missed variant, verify the change against every post the pattern could touch, not the handful that prompted the fix, because the false positive a narrow check misses is exactly as real as the false negative a narrow pattern originally produced.

Two ways a text match fails, both silently Two cards facing each other. Left, too narrow: misses valid FAQ headings, emits no schema, a false negative. Right, too broad: matches unrelated headings, emits incorrect schema describing content that is not actually an FAQ, a false positive. A footer line states neither failure produces a visible error on the page. Two ways a text match fails, both silently Neither failure produces a visible error anywhere on the page. TOO NARROW Misses valid FAQ headings. No schema emitted at all. A false negative. TOO BROAD Matches unrelated headings. Wrong schema describes the page. A false positive. Illustrative · yassersoliman.com · both failure directions

This sits alongside the plugin-default schema gaps already documented on this site and the entity-consistency question a related entity-clarity fix raises: structured data only does its job when someone periodically checks that it is actually being emitted, not just that it was configured to be at some point in the past. Not every schema type is worth this level of attention; which ones actually earn their place narrows that list considerably.

Sources

  1. Search Engine Journal, Google Drops FAQ Rich Results From Search – Published May 10, 2026; Google restricted FAQ rich results to government/health sites in August 2023, then FAQ rich results stopped appearing entirely, even for those sites, as of May 7, 2026 ↩
  2. Ahrefs, We Tracked 1,885 Pages Adding Schema. AI Citations Barely Moved. – 2026; 1,885 pages adding JSON-LD schema vs. ~4,000 controls; ChatGPT/AI Mode changes within statistical noise, Google AI Overviews citations down 4.6% (significant) ↩

Seeing these patterns at your company?

Book a free WebOps Diagnostic. I'll review your site before the call and share specific observations.

Book a Free Call →

Frequently Asked Questions

Yasser Soliman

Written by Yasser Soliman

Fractional Head of WebOps

I've spent 5+ years embedded in marketing teams at B2B SaaS companies. I own the marketing website — performance, analytics, SEO, integrations — so your team ships without bottlenecks.

Let's talk about your site.

Book a free WebOps Diagnostic. Send me your URL and what you'd like me to look at — I'll come prepared with specific observations.

Book a Free Call