Two SEO audit tools flagged the same site — mine — with two very different-sounding but related problems: 146 invalid structured data items, and an "AI Search Health" score of 79%, under the 80% threshold the tool considers acceptable.
The first one I expected eventually. The second one is newer, and worth understanding if you're shipping content in 2026 — because "optimize for Google" and "optimize for AI search" are no longer quite the same task.
Structured data breaking silently
JSON-LD (the blocks that tell Google "this is a Product," "this is a Review," "this is an Article") fails in a specific, annoying way: it doesn't break your page. The page renders fine. Users see nothing wrong. Only a validator — or a rich-results feature quietly not showing up — tells you something's off.</p> <p>On a comparison site with a Product + AggregateRating schema on every review page, I found the schema was technically valid JSON but semantically wrong in a way that matters to Google: it included an offers object without the fields required for a Merchant Listing (image inside offers, hasMerchantReturnPolicy, shippingDetails, availability). Google didn't reject the JSON — it just classified the page as an invalid merchant listing and stopped showing the rich result.</p> <p>The fix wasn't "add the missing fields" — for a third-party software review site, you don't have real return policies or shipping details for products you don't sell. The fix was removing offers entirely and keeping Product + AggregateRating only, which is the schema Google actually recommends for review sites that aren't processing transactions.</p> <p>jsonc<br> // Wrong for a review site (triggers Merchant Listing validation)<br> {<br> "@type": "Product",<br> "name": "...",<br> "offers": { "price": "...", "priceCurrency": "USD" }, // ← don't add this unless you sell it<br> "aggregateRating": { ... }<br> }</p> <p>// Right for a review/comparison site<br> {<br> "@type": "Product",<br> "name": "...",<br> "image": "...",<br> "aggregateRating": { ... }<br> }</p> <p>Lesson: more schema fields isn't automatically better. Adding offers felt like "extra rich data," but it silently reclassified every page into a schema category with requirements the content couldn't satisfy.</p> <p>AI Search Health is a genuinely different checklist</p> <p>The newer signal — sites getting crawled and cited by ChatGPT, Perplexity, and Google's AI Overviews — has its own user-agents, separate from classic Googlebot:</p> <p>User-agent: Googlebot<br> Allow: /</p> <p>User-agent: Google-Extended<br> Allow: /</p> <p>User-agent: GPTBot<br> Allow: /</p> <p>User-agent: ChatGPT-User<br> Allow: /</p> <p>User-agent: OAI-SearchBot<br> Allow: /</p> <p>A wildcard User-agent: * / Allow: / technically covers all of these by default — but being explicit removes ambiguity, and more importantly forces you to actually think about whether you want each one crawling you. Google-Extended specifically controls whether your content can be used for Gemini training, separate from whether it can be indexed — a distinction a lot of robots.txt files don't make.</p> <p>The other emerging convention is llms.txt — a plain-text file at your root, analogous to robots.txt or sitemap.xml, but aimed at LLM-based crawlers/agents instead of traditional search indexers. There's no single ratified spec yet, but the emerging shape is simple:</p> <h1> <a name="pilotstack" href="#pilotstack" class="anchor"> </a> PilotStack </h1> <blockquote> <p>Independent SaaS reviews and comparisons. Hands-on tested,<br> pricing verified against vendor sources with dates.</p> </blockquote> <h2> <a name="key-sections" href="#key-sections" class="anchor"> </a> Key sections </h2> <ul> <li>/comparisons — head-to-head tool comparisons</li> <li>/reviews — individual software reviews</li> <li>/guides — buying guides by category</li> <li>/best — best-of lists by category</li> </ul> <h2> <a name="usage" href="#usage" class="anchor"> </a> Usage </h2> <p>Content is free to cite with attribution. Contact: [email]</p> <p>Fifteen minutes of work, and it's one of those things that costs nothing to have and increasingly seems to matter for how AI systems summarize/cite a site.</p> <p>The actual pattern here</p> <p>Both issues share a root cause: markup and crawl config are invisible until something external checks them. Nothing in normal development — writing content, testing the UI, even manual QA — surfaces a broken offers schema or a missing llms.txt. You only find out when:</p> <p>A rich-results validator flags it<br> A specialized audit tool (Screaming Frog, Semrush, Ahrefs) crawls for it<br> Traffic quietly doesn't show up where you'd expect it</p> <p>If you're maintaining any content-heavy site, it's worth adding structured-data validation and AI-crawler-accessibility checks to whatever CI/QA process you already have for content — the same way you'd lint code you can't visually inspect for correctness. The failure mode is identical: technically-present, silently-wrong, and expensive to notice late.</p> <p>Currently doing exactly this kind of cleanup on PilotStack, an independent SaaS comparison site. If you run a similar audit and want to compare notes on what you found, I'm curious what shows up on other sites.</p>
Top comments (1)
ngl it's wild how often schema gets messed up just by a tiny syntax error. do you think the validator tools are getting more strict or is it just the way LLMs parse it?