Whether an AI answer can be lifted from your page
If ChatGPT or Perplexity reads one of your pages, can it actually get an
answer out of it? That is a fair question and it has a mechanical half, which is the half
Docket can help with. The check is ai.extractability, "Answer extractability",
and the honest place to start is with the part of the question no tool on your machine can
reach.
Nobody can watch an engine read your page
Docket cannot observe ChatGPT or Perplexity reading your site. It cannot tell you whether you were cited, in which answer, or to whom. Neither can any other crawler, ours or anyone else's: the answer is assembled inside a product we do not run, from an index we cannot query, for a reader we never meet. A crawler sees your HTML. It does not see the engine.
So what this check measures is the shape of your content against what lifting an answer out of it requires. That is a proxy, and the page should say so before it says anything else. The reasoning behind the proxy is plain enough — a passage that states a question and then answers it is a passage something can take whole, and eight paragraphs of throat-clearing is not — but reasoning is not evidence, and a page can satisfy this check and never be quoted by anything.
The vendors are clearer about this gap than most of the advice written about them.
Google's own guidance, AI features and your website, read on
2026-09-15, says: "There are no additional requirements to appear in AI Overviews or AI Mode,
nor other special optimizations necessary", and "There's also no special schema.org
structured data that you need to add." That is Google writing about Google's features, and it
does not describe ChatGPT or Perplexity. OpenAI's
crawler documentation, read the same day, says
"OAI-SearchBot is used to surface websites in search results in ChatGPT's search
features" — and then documents access, user-agents and IP ranges, and nothing whatever about
how one page gets chosen over another.
Nothing on this site will tell you what to do to be cited, because outside those companies nobody knows. What follows is what one check computes, exactly, and what that is worth.
What the check computes
It runs site-wide, not per page, and it stands down rather than guessing in three situations.
- English only. The matching is English phrase matching, so the check is gated on the crawl's language detection and never runs against text it cannot read.
- Substantial pages only. It takes the indexable pages whose main text runs to three hundred words or more. Main text, which means nav, header, footer, aside and form are stripped before the counting.
- At least three of them. Below that it returns silently. A four-page business site gets no finding here, and no pass either.
For each surviving page it asks one question: does any h2 or h3
end in a question mark? If none does, it joins that page's second- and third-level headings
into a single lowercased string and looks for a question word — how, what, why, when, where,
which, can, do, does, is, are — followed within about sixty characters by a question mark.
Either hit counts the page as asking a question.
Then it divides. If fewer than a quarter of the substantial pages ask a question, the check raises one finding. Above that line it says nothing at all.
What the finding says
One finding id, ai.no_question_headings, at medium severity,
titled "Content is not structured as answers to questions". Note that the finding id is not
the check id — searching your report for ai.extractability will not find it.
Its detail names how many of your substantial pages use question-form headings, and then
argues the case:
AI answer engines assemble responses by lifting self-contained passages; a page organised around questions gives them an obvious passage to lift, and a page of undifferentiated prose does not.
Its fix text asks for two things:
Add H2s phrased exactly as customers ask them, and answer each in the first two sentences underneath before elaborating. Keep the answer complete on its own — the model will quote the paragraph, not the page.
It prints a worked example of the shape it wants — a question heading, then the specific
figure or day in the first sentence — and it attaches the URLs of the pages that failed,
capped for readability, with the true total carried alongside. Only the failing pages: it
used to attach every page considered, which sent people to rewrite pages that were already
fine, and the test that pins the current behaviour is
tests/test_finding_urls.py.
It is also marked as requiring a full crawl: on a partial crawl it is withheld and reported as withheld, rather than quietly downgraded into a pass.
What it does not compute
The check's own docstring says the signal is question-form headings "followed by a concise answer, lists, and tables". The code reads headings. Nothing reads a list, nothing reads a table, and — this is the one that matters — nothing reads the text underneath the heading.
Which means the fix text asks for two things and the check can only see one of them. Phrase your H2 as a question and the check goes quiet, whether or not you answered it in the first two sentences, whether or not the answer stands on its own, whether or not there is an answer at all. The half of the advice that does the actual work is the half nothing verifies.
We would rather write that down than let a green result be read as a guarantee. It is the same family of gap as two others recorded in the engine, where a check's description named something its implementation never looked at — milder here, because the mismatch is between the code and a docstring rather than between the code and the remedy the report prints, but the same shape.
Two ways it says you passed when you did not
Both of these acquit, which is the direction that should worry you. A false accusation wastes an afternoon; a false pass ends the enquiry.
Your footer can acquit your entire site
The word count that decides which pages are substantial is measured over main content, with nav, header, footer and aside stripped out. The headings are collected from the whole document, chrome included. The denominator excludes your furniture and the signal does not.
So a single heading in a site-wide footer — "Questions?", "Need a hand?", "Ready to get started?" — appears on every page of the site and satisfies the test on every page of the site. Nothing in the check can tell that heading from one over an answer. If your template has one, this check is currently telling you nothing about your content.
A closing button is not a question your customers ask
Any second- or third-level heading ending in a question mark counts, and plenty of them are sales furniture rather than enquiry. "Ready to book?" above a form is not a passage anything can lift. What the check tests is the punctuation of your headings; what its name promises is that an answer can be taken out of your page. Read it as the first, and answer the second yourself by reading the page.
Where this check ends and the others begin
Three checks in two lanes sit near this one and none of them is doing its job:
| Check | Asks | Reads |
|---|---|---|
ai.extractability | Is there an obvious passage to lift? | Your h2 and h3 text |
ai.citable_facts | Is there anything worth repeating in it? | Your body prose, for a number attached to something a reader could check |
content.ai_slop | Does it read like everyone else's page? | Your body prose, for stock phrasing |
The sibling is the interesting one. ai.citable_facts wants a figure joined to
an attribution — a measurement someone could dispute, a date, a licence, a price — and it
counts a bare number as nothing, because "ten tips for this year" is a number with nothing
behind it. A page can pass extractability and fail that one: perfectly quotable structure
wrapped around nothing worth quoting. It can also fail extractability and pass that one,
which is the more common and more fixable position. Worth knowing if you are reading both in
the same report: the two checks do not agree on where "substantial" starts, and the lower
floor belongs to the citable-facts side. That is a divergence in the source rather than a
decision anybody wrote down.
content.ai_slop is in a different lane and answers a different complaint —
what it detects, and what it cannot is its own page.
Nothing here is about how your writing sounds.
The uncomfortable relationship with substitution
There is a tension between this check and the one question on this site with a worse answer. Making a page maximally liftable also makes it maximally replaceable: a self-contained answer under a question-shaped heading is precisely what an assistant can take and hand to somebody instead of your page. Which of your pages an AI answer replaces is that question, and it comes to the opposite conclusion for purely explanatory pages — which are the ones that score best here.
The resolution is not to write worse headings. Extractability is the right goal for pages carrying something only you have, where being quoted names you, and the wrong goal for pages whose whole value is the explanation. Both run on every audit. Read them together.
Before any of this, the page has to be fetchable
This check reads HTML that Docket already has. If a crawler is disallowed in your robots.txt or refused at your CDN, it never reaches the question this page is about — and that is a separate thing Docket measures separately, by reading your robots.txt against each crawler by name. Fixing AI crawler access is the one to do first, and the three gates sets out the order: access, then rendering, then everything on this page.
Why there is no number on this page
This site publishes surveys of who blocks which AI crawler, including a reading of robots.txt across the Tranco top ten thousand. Those measure access. This page is about extraction, and we have no measurement of extraction — nobody does, for the reason in the first section. So no figure appears above, and none is borrowed from the access work to stand in for one. A percentage about who can fetch your page tells you nothing about what an engine did after it arrived, and a page that let a reader carry one across to the other would be doing the thing this whole site exists to object to.
What to actually do
- Take the fix text at its word, both halves. Phrase the heading as the question a customer asks, and put the answer in the first two sentences under it. The check sees the first half. The second half is the one that does anything.
- Make the answer survive being cut out. "It depends on the size of the room" is not an answer once it has been separated from the heading above it. Name the thing, the figure and the condition in the same sentence.
- Check your footer before you trust a pass. If there is a question mark in a site-wide heading, this check has been passing your pages for a reason that has nothing to do with them.
- Use the customer's words, not the trade's. That is the usual reason a page full of questions still reads as a brochure.
- Do not add the question if you do not have the answer. A heading that asks something and then wanders is worse than a plain one, and it now passes a check while being worse.
Common questions
Can Docket tell whether ChatGPT has cited my site?
No, and nor can any other crawler. An AI answer is assembled inside a product nobody outside that company can query, for a user the crawler never meets. Docket measures the shape of your content against what lifting an answer requires, which is a proxy for the thing you want to know and is not the thing itself.
What does the answer-extractability check actually look at?
The second- and third-level headings of every indexable page carrying three hundred words or more of main text. It counts a page as asking a question if any of those headings ends in a question mark, or if a question word appears shortly before one. If fewer than a quarter of those pages qualify, it raises one medium-severity finding listing the pages that do not.
Does it check that I answered the question?
No. Nothing in the check reads the text under the heading, and nothing reads your lists or tables either, although the check's own description mentions them. Its fix text asks you to phrase the heading as a question and answer it in the first two sentences; only the first of those is measured. Doing half the work clears the check.
Why did my site pass when none of my pages answer anything?
Check your footer. Headings are collected from the whole document, including nav and footer, while the word count that decides which pages count is taken from main content with those regions stripped. One site-wide footer heading ending in a question mark satisfies the test on every page of the site.
Is adding question headings the same as AI optimisation?
Not according to the vendors. Google states there are no additional requirements or special optimisations needed to appear in its AI features, and no special structured data. OpenAI documents which crawler surfaces pages in ChatGPT search and documents nothing about how a page is selected. Question headings help a reader find the answer, which is a good enough reason on its own.