AI Visibility Checklist
31 checks for getting cited by AI assistants, each with the steps to actually do it and a tag for how well the evidence supports it.
Verified against primary documentation, August 2026
Jump to a section
How to read this
Every item is tagged by how well supported it is. Most checklists in this field present platform documentation and vendor marketing as though they carry the same weight. They do not, so they are separated here. Open How to do it under any item for the actual steps.
- Confirmed
- The platform states this itself, in its own documentation or on record at an event.
- Observed
- Consistent with crawler logs and third-party measurement, but no platform has confirmed it. Treat as a reasonable bet, not a fact.
- Contested
- Widely recommended, but the available evidence does not support it. Included so you can stop spending time on it.
Access
Nothing else on this list matters if the systems cannot fetch the page. Most AI visibility problems are ordinary access problems wearing a new name.
These are different bots with different jobs, and the distinction decides whether you appear in answers. Training crawlers (GPTBot, ClaudeBot, Google-Extended) collect material for future model versions and produce no citation today. Search crawlers (OAI-SearchBot, Claude-SearchBot, PerplexityBot) build the retrieval indexes that answers are assembled from right now. Blocking the first costs you nothing this quarter. Blocking the second removes you from answers.
OpenAI bot documentationHow to do it
- 01Open your live robots.txt and write down every AI user-agent it names.
- 02Sort each one into training or search using the provider's own documentation, not a blog post.
- 03Confirm every search crawler is allowed. These are the ones that cost you citations if blocked.
- 04Treat training access as a separate licensing decision for the business to make, not an SEO default.
The search crawlers, at minimum User-agent: OAI-SearchBot Allow: / User-agent: Claude-SearchBot Allow: / User-agent: PerplexityBot Allow: /This is the crawler that surfaces sites in ChatGPT's search features. It is frequently missing from robots.txt files that carefully allow GPTBot, because GPTBot is the famous one. Allowing the training crawler while omitting the search crawler is the single most common configuration error in this area.
OpenAI bot documentationHow to do it
- 01Fetch yoursite.com/robots.txt in a browser and search the text for OAI-SearchBot.
- 02If it is absent and you have a blanket disallow for unnamed agents, add an explicit allow block.
- 03Check the live file rather than your source file. CDNs and platform-generated robots.txt often differ from what is in the repository.
- 04Over the following weeks, grep your access logs for OAI-SearchBot to confirm it is arriving and receiving 200s.
robots.txt User-agent: OAI-SearchBot Allow: /Anthropic runs three bots. ClaudeBot collects training data, Claude-SearchBot improves search result quality, and Claude-User fetches pages when a person asks Claude a question. The second and third are the ones tied to appearing in answers.
Anthropic crawler documentationHow to do it
- 01Add explicit allow blocks for Claude-SearchBot and Claude-User.
- 02Keep the ClaudeBot decision separate. Blocking training while allowing search is a coherent position.
- 03If you use bot management, allowlist Anthropic's published IP ranges so the requests are not challenged before robots.txt is ever consulted.
robots.txt User-agent: Claude-SearchBot Allow: / User-agent: Claude-User Allow: /Both appear in almost every AI crawler listicle. Neither appears in Anthropic's current crawler documentation. Lines addressing user-agents that no longer exist are not harmful, but they are a reliable sign that a robots.txt was assembled from blog posts rather than from primary documentation.
Anthropic crawler documentationHow to do it
- 01Search your robots.txt for anthropic-ai and Claude-Web and delete those blocks.
- 02Check every other AI agent in the file against the provider's current documentation while you are in there.
- 03Put a recurring reminder in the calendar to re-check this list every quarter. Providers add and rename agents without announcement.
ChatGPT-User, Claude-User and Perplexity-User fire when a person asks a question, not on a crawl schedule. OpenAI states plainly that robots.txt rules may not apply to ChatGPT-User. Allowing or disallowing these agents in robots.txt is close to decorative. If you genuinely need to stop them, that is a server-level decision, not a robots.txt one.
OpenAI bot documentationHow to do it
- 01Stop treating a robots.txt line for these agents as a control. Keep it if you like, but record it as a statement of intent.
- 02If a real requirement exists to block them, enforce it at the edge with a rule matching the user-agent and returning 403.
- 03Verify the request genuinely came from the provider before acting on the user-agent string, which anyone can spoof. Each provider publishes an IP list for this.
- 04Confirm any block you add does not also catch the search crawlers, which is easy to do with a loose pattern match.
Google-Extended governs whether your content may be used to train future Gemini models. Google states directly that it does not affect inclusion in Google Search and is not a ranking signal. AI Overviews are assembled from the Search index, which Googlebot builds. The controls that do reach AI Overviews and AI Mode are the snippet preview controls.
Google: AI features and your websiteHow to do it
- 01To stay eligible for AI Overviews with no length cap, set max-snippet:-1.
- 02To exclude a whole page from snippets and from being used as direct input to AI Overviews and AI Mode, use nosnippet.
- 03To exclude only part of a page, wrap that element in data-nosnippet. This is the right tool for pricing, boilerplate or anything you do not want quoted out of context.
- 04Decide Google-Extended separately, as a Gemini training question. It has no bearing on either of the above.
Page-level and element-level preview controls <!-- Eligible, no snippet length cap --> <meta name="robots" content="max-snippet:-1"> <!-- Excluded from snippets and AI Overviews input --> <meta name="robots" content="nosnippet"> <!-- Exclude one block only --> <div data-nosnippet>Not for quoting</div>Assume the fetcher runs no JavaScript. Googlebot renders; most AI fetchers are far simpler, and a page whose content arrives only after hydration can be fetched successfully and still yield nothing. View the raw response, not the rendered DOM, and confirm the substance is in the source.
How to do it
- 01Fetch the page the way a simple client would and read what comes back.
- 02Confirm the headline, the main body text and any facts you want quoted are all present in that raw response.
- 03If the response is mostly an empty shell, move the important content to server rendering or static generation.
- 04Repeat for your highest-value pages, not just the homepage. Product and article templates usually differ.
Check the raw response curl -sL -A "OAI-SearchBot" https://example.com/page | \ sed 's/<[^>]*>//g' | tr -s '[:space:]' ' ' | head -c 2000WAF rules, bot management, rate limiting and geo-blocking all sit above robots.txt and enforce silently. Confirm in server logs that the search crawlers are receiving 200s. A crawler pattern that stops without explanation is usually infrastructure, not algorithm.
How to do it
- 01Filter your access logs by each search crawler user-agent and look at the status codes, not just the hit count.
- 02Treat a wall of 403s or 429s as the finding. That is a block or a rate limit, not disinterest.
- 03Review any managed bot protection. Default rulesets frequently challenge AI crawlers as unknown automation.
- 04Allowlist the providers' published IP ranges rather than trusting the user-agent string alone.
Status codes by AI crawler grep -Ei "OAI-SearchBot|Claude-SearchBot|PerplexityBot|GPTBot" access.log \ | awk '{print $NF, $9}' | sort | uniq -c | sort -rn
Structure
Once a page is fetched, the question is whether a model can isolate a specific claim, attach it to your brand, and reproduce it without ambiguity.
Two platforms have said on the record that structured data helps their systems. Microsoft's Fabrice Canel stated at SMX Munich that schema markup helps Microsoft's LLMs understand content, and Google's Ryan Levering described structured data as material to grounding their generative systems at Search Central Live. This is one of the few technical GEO recommendations with direct confirmation from the platforms rather than from vendors.
Google structured data guidanceHow to do it
- 01Pick the type that genuinely describes the page: Article, Product, FAQPage, HowTo, Organization, Person.
- 02Emit it as JSON-LD in the head. Do not mark up anything a visitor cannot see on the page.
- 03Validate every template with the Rich Results Test and the schema.org validator before shipping.
- 04Connect related entities with @id rather than repeating the same organisation block on every page.
The pattern this site uses, defined once and referenced by @id { "@context": "https://schema.org", "@graph": [ { "@type": "Person", "@id": "https://sharaki.me/#person", "name": "Emad Sharaki", "url": "https://sharaki.me", "jobTitle": "Senior SEO & GEO Strategist", "sameAs": [ "https://www.linkedin.com/in/emadsharaki/", "https://x.com/emadsharaki", "https://github.com/emadsharaki" ] }, { "@type": "HowTo", "name": "AI Visibility Checklist", "author": { "@id": "https://sharaki.me/#person" } } ] }Give the entity one canonical page, a stable @id, and sameAs links to the profiles that corroborate it. Models resolve entities by cross-referencing; a brand that appears under three spellings across four properties is three weak entities rather than one strong one.
How to do it
- 01Choose one canonical URL to be the entity's home and give it a permanent @id.
- 02List every profile you control under sameAs: LinkedIn, GitHub, Crunchbase, Wikidata, the lot.
- 03Audit those profiles for a single consistent name, role and location. Fix the ones that disagree.
- 04Reference the same @id from every other page rather than restating the entity each time.
A retrieved passage arrives without its page around it. If a section only makes sense after reading the two above it, it cannot be quoted. Each heading should pose a real question and the passage beneath it should answer that question completely, in the first sentence or two.
How to do it
- 01Rewrite headings as the question a person would actually type or say.
- 02Answer in the first sentence beneath the heading. Put the context after it, not before.
- 03Read each section on its own, with everything above it covered. If it no longer makes sense, it cannot be cited.
- 04Keep each answer to a length that can be lifted whole, roughly forty to eighty words.
Repeat the brand or product name where a human writer would reach for it or this. Anaphora resolves fine inside a document and badly inside a retrieved fragment, and a fragment that never names its subject is hard to attribute to you.
How to do it
- 01Search the draft for sentences opening with it, this, they or the product and name the subject instead.
- 02Make sure the brand name appears at least once in every section, not only in the intro.
- 03Accept the mild repetition. It reads slightly heavier to a human and far more clearly to a retriever.
Specifications, prices, comparisons and steps extract far more cleanly from a structured block than from a paragraph describing them. This is the least glamorous item here and one of the most reliable.
How to do it
- 01Find every paragraph that describes several parallel things and convert it to a table.
- 02Use real table markup with headers, not a grid of divs styled to look like one.
- 03Give each table a caption or a heading immediately above it that says what it contains.
- 04Turn any sequence of actions into an ordered list.
Systems answering time-sensitive questions favour material they can date. A visible published and updated date, matching the dateModified in your markup, is worth more than an artificially refreshed timestamp, which is a signal readers and systems both learn to discount.
How to do it
- 01Show the published date, and the updated date when there has been a real update.
- 02Make datePublished and dateModified in your markup match what the page displays.
- 03Never bump the date without changing the content. It is trivially detectable and it trains people to distrust the byline.
- 04For anything that goes stale, say what was verified and when, in the text itself.
Substance
Access and structure make a page quotable. Neither makes it worth quoting. This is the section most checklists skip, and it is the one that decides outcomes.
A model assembling an answer selects among many pages saying the same thing. Original data, a documented method, a first-hand account, a real number: these give a reason to choose your page specifically. Content that summarises what is already well covered competes only on authority signals you probably do not have.
How to do it
- 01List what you can see that nobody outside your organisation can: your own data, your own tests, what you learned the hard way.
- 02Pick the one that answers a question people already ask and publish it with the method attached.
- 03Before writing anything else, ask what this page contains that the top five results do not. If the answer is nothing, do not write it.
- 04Repeat the study on a schedule. A dataset that updates becomes a reference; a one-off becomes an archive.
Significantly faster is unquotable. Thirty percent faster, measured across seven markets is quotable, attributable and checkable. Specificity is what converts a page from background reading into a citation.
How to do it
- 01Find every vague quantifier in the draft: significant, dramatic, many, most, faster.
- 02Replace each with the actual figure, or cut the claim if you do not have one.
- 03Attach the scope to the number: over what period, across what sample, measured how.
- 04Put the strongest number in the opening sentence of its section, where a retriever will find it.
Conversational prompts are longer and more specific than keyword queries. Cover the real question, including the awkward parts, rather than the shortest version of it that ranks. Comparisons, limitations and when not to use this are frequently retrieved and rarely written.
How to do it
- 01Collect the questions people actually ask you: sales calls, support tickets, conference hallways.
- 02Write the page around those sentences rather than around a keyword.
- 03Include the sections your competitors avoid: limitations, honest comparisons, when the answer is do not.
- 04Test by asking an assistant the same question and reading which pages it chose and why.
Method, sample size, date, limitations. A claim that shows how it was reached survives scrutiny by both a human editor and a system weighing sources. It is also what makes a page worth linking to, which feeds the next section.
How to do it
- 01State the method in plain language near the finding, not in a footnote.
- 02Give the sample size, the date range and the tools used.
- 03Name the limitations yourself. It costs less than being corrected in public.
- 04Publish the underlying data where you can. A downloadable dataset attracts links no summary will.
Measurement
Unmeasured AI visibility work is indistinguishable from superstition. Set the baseline before you change anything.
Write the questions a real buyer would ask, keep the list stable, and run it on a schedule. Changing the prompts between runs makes the results incomparable, which is the most common flaw in AI visibility reporting.
How to do it
- 01Write twenty to fifty questions covering the buying journey, in the words a person would use.
- 02Freeze the list. Version it if you must change it, and never compare across versions.
- 03Run it on the same schedule against every platform that matters.
- 04Record the full answer text, not a yes or no. You will want to re-read it later.
Presence alone is a thin metric. Being mentioned third, hedged, and alongside two competitors is a different result from being the sole recommendation, and only the fuller picture tells you what to fix.
How to do it
- 01For each answer log whether you appear, in what position, in what tone, and who else is named.
- 02Track the competitor set over time. A new name appearing repeatedly is an early warning.
- 03Report share of mention rather than a raw count so the number survives changes in prompt volume.
Knowing which specific pages get pulled in tells you what to produce more of. It also reveals when a competitor's page, a forum thread or an outdated article is answering on your behalf.
How to do it
- 01Log every cited URL alongside the answer.
- 02Group by domain to see who is answering for your category, and by page to see what format wins.
- 03Watch for your own outdated pages being cited. That is a fast fix with real impact.
Crawl activity from OAI-SearchBot, Claude-SearchBot and PerplexityBot is the earliest signal available, and it moves well before citations do. It is also the only measurement in this section that does not depend on a third-party tool.
How to do it
- 01Report AI crawler hits weekly, split by user-agent and by URL.
- 02Watch which sections they favour. That is the closest thing to a free relevance signal you will get.
- 03Treat a sudden drop as an infrastructure incident and check status codes first.
Weekly AI crawler activity by path grep -Ei "OAI-SearchBot|Claude-SearchBot|PerplexityBot" access.log \ | awk '{print $7}' | sort | uniq -c | sort -rn | head -25The same prompt returns different answers across runs, sessions and regions. A single check is an anecdote. Repeat each prompt several times and report the distribution, not the one result that suits the slide.
How to do it
- 01Run every prompt at least three times per cycle, in fresh sessions.
- 02Report the share of runs you appeared in, not whether you appeared.
- 03Test from the markets you sell into. Answers differ by region.
- 04Set a threshold for what counts as a real change before you start reporting movements to anyone.
Skip these
Recommendations that circulate widely and do not survive contact with primary sources. Each is here with the evidence against it, and with what to do instead.
Google updated its documentation in June 2026 to state that you do not need machine-readable files, AI text files or Markdown to appear in Google Search including its generative features, because Search does not use them. Independent log analyses also find the major AI crawlers overwhelmingly skip the file and fetch HTML directly. It is harmless to publish and reasonable as a convention bet, but it is not a Google lever and should not sit near the top of a plan.
Google says llms.txt will not help or hurt rankingsWhat to do instead
- 01Publish it if you want to, in ten minutes, and then forget about it.
- 02Spend the time you saved on the HTML the crawlers do fetch.
- 03Check your own logs for requests to /llms.txt before you believe anyone's claim about it, including this one.
Google-Extended controls Gemini model training only. Google states it does not affect Search inclusion and is not a ranking signal. AI Overviews draw on the Search index built by Googlebot, so this block does not achieve what it is usually deployed to achieve.
Google: AI features and your websiteWhat to do instead
- 01Use nosnippet or data-nosnippet instead. Those are the controls that reach AI Overviews and AI Mode.
- 02Keep the Google-Extended decision as what it is: whether Gemini may train on your content.
- 03Understand the trade before you act. Excluding yourself from snippets excludes you from the answer entirely.
OpenAI states that robots.txt rules may not apply to ChatGPT-User, and the equivalent user agents from other providers behave the same way by design. A robots.txt line addressed to them is a statement of intent, not a control.
OpenAI bot documentationWhat to do instead
- 01Enforce at the edge if you have a real requirement, and verify the source IP before acting.
- 02Otherwise leave it alone and stop reporting it as a control that is in place.
Figures of the form schema produces 2.5x more citations circulate constantly and originate almost entirely with companies selling AI visibility products. The underlying direction is often right and confirmed elsewhere; the decimal places are marketing. Cite the platform statements, run your own measurement, and leave the multipliers alone.
What to do instead
- 01Before repeating a statistic, find who funded it and what they sell.
- 02Cite the platform's own words when a platform has spoken. That is what survives being challenged in a meeting.
- 03Produce your own number from your own prompt set. It is the only one that describes your site.
31 items, last verified against primary documentation in August 2026. Crawler names and platform behaviour change often; where an item cites a source, check the source rather than trusting this page. Found something out of date or wrong? Tell me and I will correct it.