ShipworkSite inspection
Checks

Crawlability

PaginationAre paginated pages set up right?Internal searchIs site search eating crawl budget?URL parametersAre parameters creating duplicates?Log analyserWhat does Googlebot actually crawl?Robots builderNeed a robots.txt file?Soft 404sAre pages “not found” but returning 200?JavaScriptCan crawlers see it without running JS?FreshnessIs my site quietly going stale?Robots.txtDoes robots.txt say what I think?

Indexing

Sitemap lastmodAre my sitemap dates valid?SitemapIs my sitemap actually fetchable?IndexingIs Google allowed to index my pages?CanonicalsIs Google indexing the wrong URL?Index signalsDo sitemap and index signals agree?Sitemap generatorNeed a sitemap.xml for my site?Bulk URL statusWhere does each of these URLs really land?Redirect builderNeed the redirect rules?RedirectsAre my URLs answering directly, over HTTPS?

On-page

Keyword ideasWhat are people searching for?SERP previewHow does my page look in Google?Content qualityAre your pages too thin or too alike?Image weightAre images slowing the page?CannibalizationAre pages competing with each other?On-page checkDoes the page use its target phrase?ImagesAre my images accessible and loading?Meta tag builderWhat should my title and share tags say?DuplicatesDo my pages compete for one query?

Links

Orphan pagesWhich pages can no link reach?Link graphHow deep do your pages sit?Anchor textDo links say what they point at?Outbound linksAre external links still alive?Broken linksAre internal links sending visitors nowhere?

Structured data

Rich resultsIs my markup eligible for a rich result?Structured dataIs my product schema valid?Schema coverageDo my key pages carry structured data?Social previewHow does my page look when shared?Schema vs pageDoes markup match the page price?Schema builderNeed valid JSON-LD?

International

Hreflang sitemapDo page and sitemap hreflang agree?HreflangDo my language versions link back?Hreflang builderNeed the hreflang tags?Page DoctorWhy is this page not doing well?Redirect planMy site has dead links — what redirects do I write?Sitemap diffIs anything missing from my sitemap?Robots simulatorWhat does my robots.txt actually block?Can Googlebot?Can Googlebot fetch this URL?
Every error, explainedGuides
Pricing Learn Error guides Run free audit

+1 free check

Welcome to Shipwork

Sign in free and your next check this month is on us.

Continue with GoogleContinue with email

We email you a 6-digit code. No password.

No card needed. Reports and watches follow you to any device.

Can AI crawlers and answer engines actually read your site?

Being cited by ChatGPT, Claude, Perplexity and Gemini depends on two things that fail quietly: the crawlers have to be allowed in, and the content has to exist before JavaScript runs. This check reads both, plus the llms.txt that tells an assistant which pages matter.

Runs the AI readiness check against a set of key pages, from outside your network. Nothing is stored.

What this check inspects

Shipwork reads robots.txt through the same parser the other checks use and resolves it for each of the major AI agents: GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot and Bingbot, plus the wildcard rule that catches agents with no group of their own. It then checks llms.txt through the existing llms check, so a placeholder file is told apart from a useful one. Finally it reads the page itself: an H1, a meta description, a main, article or nav landmark, and at least a couple of hundred characters of text without running JavaScript. It also probes one made-up URL to see whether unknown paths return a real 404 or an app shell with status 200.

What a failure means

A blocked AI crawler is a warning: that agent cannot read the site, and if you want to appear in its answers you have to allow it. A wildcard rule that blocks every unnamed crawler is a warning, so an accidental site-wide block is not mistaken for a deliberate policy. A page with no H1, no meta description, no landmark or almost no raw text is a warning, because answer engines have little to quote. A made-up URL that returns 200 is a warning about a soft 404 or an app shell served for every route. Only a page that could not load at all is an error.

How to fix it

  1. Allow the AI agents you want to appear in, and leave the others blocked if that is deliberate. Target each agent by name rather than blocking the wildcard.
  2. Publish an llms.txt at the site root with a level-one heading, a summary line and links to the pages that matter.
  3. Server-render the heading and the main copy so the page has an H1, a meta description and a landmark before scripts run.
  4. Return a real 404 for unknown paths rather than a styled fallback page with status 200.

A typical failure, worked through

The setupA store pasted an aggressive robots.txt block while hiding from scraper bots, and it disallows the wildcard for everything except a short allow list. The product copy is also injected after load by a JavaScript framework.

What the check reportsThe check reports that several named AI agents are blocked by the wildcard rule, that llms.txt is missing, and that a plain fetch sees very little text. A made-up URL returns the app shell with 200.

The pointEvery one of these is invisible in a browser. The page loads, the assistant does not. The check reads the site the way an answer engine does.

Questions

Is blocking AI crawlers a mistake?
Not necessarily. Some publishers block them on purpose. The check reports the block as a warning so you can confirm it is deliberate, not by accident.
Does an llms.txt make AI tools read my site?
It is optional and not universally honoured yet, but it is cheap, it does no harm, and some assistants already read it. It tells an assistant which pages matter.
Why does raw text matter if Google renders JavaScript?
Google renders on a second pass, and many other AI crawlers does not render at all. Keeping the heading and main copy in the initial HTML protects against the agents that skip JavaScript.

Related checks and guides