Most sites we audit were built to look right in a browser, not to be read correctly by a crawler — human or AI. That's not a criticism; it's just not what most teams are optimizing for when they ship. But it means the same handful of issues show up again and again, and every one of them is a fix, not a redesign. Here's what actually turns up.
Missing or broken structured data
Schema markup (JSON-LD, usually) is how a page tells Google — and increasingly, an AI answer engine — what it actually is: a product, an article, a business, a set of frequently asked questions. Sites without it aren't broken, they just leave the crawler to guess. We see three variants of this constantly: no schema at all, schema copy-pasted from a template that still references the wrong business name or URL, and schema that's syntactically valid JSON but semantically wrong (an Organization block with no FAQPage even though the page has an actual FAQ section a few hundred pixels below it).
No llms.txt
llms.txt is the newer of the two — a plain-text file at the site root that gives AI crawlers and agents a direct, structured summary of what the site is, what it costs, and where the key pages are, instead of making them infer it from rendered HTML. Almost nobody has one yet, which is exactly why it's worth having: it's a cheap, high-signal way to make sure an AI answer engine describes your product accurately instead of guessing from a scraped homepage.
Robots.txt accidentally blocking the crawlers you want
This is the one that surprises people most. A robots.txt file written a few years ago, before AI crawlers existed as a named category, will often use a broad Disallow rule that was meant to keep out scrapers or bad bots — and ends up blocking GPTBot, ClaudeBot, and PerplexityBot along with them. The site owner never opted into this; it's just what happens when a rule written for one era of the web gets left alone as the web changes around it. The fix is almost always a few lines, not a rewrite.
Thin or duplicated meta tags
Titles and meta descriptions that are missing, truncated, identical across pages, or — a specific one we've seen more than once — contain literal unrendered template markup because a client-side templating tag didn't get replaced before the page shipped to a crawler that doesn't run JavaScript. Small thing, visible everywhere it matters: search results, social previews, browser tabs.
Why this is a code fix, not a report
Most SEO audits end as a PDF with a priority list and leave the implementation to you. We do the opposite: the audit is the first half of the engagement, the fix is shipped directly into your codebase in the second half, and a third pass verifies it actually took — re-indexation, crawler access, the works. If you want to know specifically what's broken on your own site before committing to anything, see how the engagement works, or send us the URL and we'll tell you what we find.