AEO & GEOUpdated Sep 11, 202611 min read

The AEO Checklist for a B2B Website, With a Pass or Fail Test for Every Item

An AEO checklist for B2B websites: crawler access, entities, schema, llms.txt, answer blocks and third-party proof, each with a test and a pass condition.

Short answerA B2B website is AEO-ready when AI crawlers can fetch it, your company is described identically everywhere, structured data matches the page, key pages open with direct answers, and trusted third parties confirm your claims. Test in that order: crawler access, entity, schema, answer blocks, corroboration, then llms.txt and measurement.

A B2B website is ready for answer engines when AI crawlers can fetch it, your company is described the same way everywhere, structured data matches the visible page, key pages open with direct answers, and trusted third parties confirm what you claim. This checklist breaks that into seven layers. Every item has a test you can run in minutes and a clear pass condition.

Work top to bottom. Each layer depends on the one above it: perfect answer blocks are useless if a firewall blocks the crawler, and schema cannot fix a company description that contradicts your Clutch profile.

If you are new to the topic, read AEO and GEO for beginners first. Larger organizations with multiple business units should also look at the 30-point enterprise readiness checklist and the 40-point GEO audit. This version is scoped to a typical B2B company site of a few dozen to a few hundred pages.

How to use this checklist

Copy each table into a sheet with three extra columns: Status (pass, fail, partial), Owner, and Fix by date. Score one point per pass. The score matters less than the order in which you fix things, which is covered at the end.

You will need access to: robots.txt and your CDN or WAF settings, server or CDN logs, Google Search Console, your CMS, and logins for your LinkedIn company page, Clutch or G2 profile, and any partner directory listings.

Layer 1: Crawler access

AI engines retrieve pages before they cite them. Each vendor documents its own user agents. OpenAI states that sites opted out of OAI-SearchBot will not be shown in ChatGPT search answers. Anthropic notes that blocking Claude-SearchBot may reduce your visibility in user search results. Perplexity says PerplexityBot is used to surface and link websites in its results, and it publishes IP ranges for firewall allowlists.

#CheckHow to testPass looks like
1.1robots.txt does not block search-facing AI botsOpen /robots.txt. Look for Disallow rules under OAI-SearchBot, Claude-SearchBot, PerplexityBot, or a blanket rule under User-agent: *Public marketing pages are allowed for all three
1.2CDN and WAF do not challenge AI botsReview bot management settings in your CDN. Run the curl test belowHTTP 200 with the real page, not a challenge or captcha page
1.3Key copy is in the raw HTMLFetch the page without JavaScript and search for your opening answer sentenceThe sentence appears in the raw response
1.4Money pages are indexed in GoogleURL Inspection in Search ConsoleIndexed, no noindex, canonical points to itself
1.5Snippets are not restrictedView source for nosnippet, data-nosnippet or max-snippet on money pagesNone present on pages you want cited
1.6XML sitemap is completeOpen /sitemap.xml and compare against your list of money pagesEvery money page listed, lastmod dates accurate
1.7AI bots are actually fetchingFilter the last 30 days of logs by user agent, then verify IPs against published rangesVerified hits from at least OAI-SearchBot, Claude-SearchBot and PerplexityBot

Check 1.4 and 1.5 matter for Google specifically. Its AI features documentation says a page must be indexed and eligible to show with a snippet to appear as a supporting link, and lists nosnippet and max-snippet among the controls that limit how content appears.

# 1.2 and 1.3: does a bot get the real page, and is the answer in raw HTML?
curl -s -o /dev/null -w "%{http_code}\n" \
  -A "Mozilla/5.0 (compatible; OAI-SearchBot/1.0)" \
  https://www.example.com/services/snowflake-migration/

curl -s https://www.example.com/services/snowflake-migration/ \
  | grep -i "migrates mid-market healthcare"

# 1.7: AI bot hits in an nginx access log
grep -Ei "OAI-SearchBot|Claude-SearchBot|PerplexityBot|GPTBot|ClaudeBot" \
  /var/log/nginx/access.log | awk '{print $1, $7}' | sort | uniq -c | sort -rn | head -30

A user agent string can be spoofed, so a 200 on the curl test is a first check, not proof. Logs plus IP verification are the real evidence. Deeper guides: AI crawler log file analysis, JavaScript rendering for AI crawlers and Cloudflare AI crawler settings.

Layer 2: Entity clarity

An AI engine has to be confident that the "Acme" on your site, on LinkedIn, on Clutch and in a listicle is the same company doing the same thing. Inconsistent descriptions make that harder.

#CheckHow to testPass looks like
2.1One canonical company descriptionPaste the description from your homepage, About page, LinkedIn, Clutch or G2, Crunchbase and partner listing into one sheetSame category noun, same audience, same headquarters, same core offering
2.2A real About pageRead it as a strangerStates what you do, for whom, founding year, headquarters, leadership and locations in plain text
2.3Named experts with bio pagesCheck founder and practice lead pagesEach has a bio page, a photo, a title, credentials and a LinkedIn link
2.4No name collisionAsk ChatGPT, Claude, Perplexity and Gemini "What is [brand]?"All four describe your company, not a namesake
2.5Offerings named consistentlyCompare service or product names across site, directories and partner listingsIdentical names everywhere
2.6Proof numbers consistentSearch your site and profiles for client counts, years and outcomesOne number per claim, with a date
CANONICAL ENTITY STATEMENT (use verbatim everywhere)

[Brand] is a [category noun] that helps [audience: industry, size,
region] [achieve outcome] through [offering 1], [offering 2] and
[offering 3]. Founded in [year], headquartered in [city], with
teams in [locations]. [One verifiable proof point with a date.]

Short version (under 160 characters, for directory taglines):
[Brand]: [category noun] for [audience], specializing in [offering].

If check 2.4 fails, read brand name disambiguation in AI search. For expert pages, see author entity SEO.

Layer 3: Structured data

Be clear about what schema does. Google says there is no special schema.org markup needed to appear in AI Overviews or AI Mode. Schema is a clarity layer: it states facts in machine-readable form, and it must match the visible page.

For Organization markup, Google's documentation says there are no required properties, recommends placing it on your home page or a single page that describes the organization, and lists properties such as name, url, logo, sameAs, address, contactPoint, description, foundingDate, legalName and identifiers like duns or leiCode.

#CheckHow to testPass looks like
3.1Organization markup on home or About pageView source and search for "@type": "Organization"Present, with name, url, logo, description, address and sameAs
3.2sameAs is completeCompare sameAs URLs against your real profilesLinkedIn, Crunchbase, Clutch or G2, YouTube, partner listing all included and live
3.3Offering pages marked upCheck service or product pagesService (for services) or SoftwareApplication (for software) with a description matching the page
3.4Articles have real authorsCheck blog postsArticle markup with a Person author who has a bio page
3.5BreadcrumbsCheck deep pagesBreadcrumbList matches the visible breadcrumb
3.6FAQPage only where FAQs are visibleCompare markup to page contentEvery marked-up question is visible on the page
3.7Markup validatesRun pages through Google's Rich Results Test and the Schema.org validatorNo errors; warnings reviewed
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Acme Data",
  "legalName": "Acme Data Consulting LLC",
  "url": "https://www.acmedata.example/",
  "logo": "https://www.acmedata.example/logo.png",
  "description": "Snowflake services partner that migrates mid-market healthcare and insurance companies off legacy data warehouses.",
  "foundingDate": "2019",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Austin",
    "addressRegion": "TX",
    "addressCountry": "US"
  },
  "sameAs": [
    "https://www.linkedin.com/company/acme-data-example",
    "https://www.crunchbase.com/organization/acme-data-example",
    "https://clutch.co/profile/acme-data-example"
  ]
}
</script>

More detail: Organization schema for entities, product schema for AI search and FAQ schema in AI search.

Layer 4: llms.txt (optional, do it last)

llms.txt is a proposal from Jeremy Howard for a markdown file at your site root that summarizes the site and lists key pages. The only required element is an H1 title. The format adds a blockquote summary and H2 sections containing link lists, with an "Optional" section for secondary pages.

Google says you do not need AI text files to appear in its AI features, and the evidence that other crawlers rely on llms.txt is thin. Our review of that evidence is in does llms.txt work. Do it only after layers 1 to 3 pass, and only if your team will keep it current.

#CheckHow to testPass looks like
4.1File exists and follows the formatOpen /llms.txtH1, blockquote summary, H2 link sections
4.2Links are currentClick every linkNo 404s, no redirected or retired pages
# Acme Data

> Snowflake services partner that migrates mid-market healthcare and
> insurance companies off legacy data warehouses. Founded 2019, Austin TX.

## Services
- [Teradata to Snowflake migration](https://www.acmedata.example/teradata-migration/): scope, timeline, pricing model
- [Healthcare claims analytics on Snowflake](https://www.acmedata.example/healthcare-claims/)

## Proof
- [Case study: regional payer migration](https://www.acmedata.example/case-studies/regional-payer/)

## Optional
- [About and leadership](https://www.acmedata.example/about/)

Layer 5: Answer-ready pages

AI engines lift passages, not whole pages. A page is answer-ready when a single passage can answer a buyer's sub-question on its own, with specifics.

#CheckHow to testPass looks like
5.1A page per buyer question clusterMap your prompt set to URLsEvery priority prompt has a clear best page: offering, industry, comparison, alternatives, pricing model, integration
5.2Answer in the first 40 to 60 wordsRead only the first paragraphIt answers the page's main question with who, what, for whom and proof
5.3Question-style subheadsScan the H2sMost read like questions a buyer would ask
5.4Specifics over adjectivesHighlight every number, named integration, named customer and dateSeveral per section; no paragraph of pure claims
5.5Tables for comparisons and specsCheck comparison and product pagesHTML tables, not images of tables
5.6Visible last-updated dateCheck money pagesDate shown and accurate; reviewed within the quarter
5.7Case studies with named outcomesOpen three case studiesClient or clear descriptor, problem, approach, measured result, timeframe
5.8Pricing model statedLook for how you chargeAt least the pricing model and main drivers are public
5.9Gated assets have open summariesCheck whitepaper and webinar pagesAn ungated summary with the key findings
ANSWER BLOCK TEMPLATE (place under the H1 or under each H2)

[Direct answer in one sentence that repeats the question's key terms.]
[Who it applies to and under what conditions.]
[One specific proof: number, named integration, certification or customer.]
[What to do next or how it is priced, in one sentence.]

Example H2: How long does a Teradata to Snowflake migration take?
Most mid-market migrations we run take 12 to 20 weeks from discovery
to cutover. Timelines depend on the number of ETL jobs and downstream
BI reports. ...

Supporting guides: content structure for LLMs, case study pages for AI citations, gated content and AI search and content freshness.

Layer 6: Third-party corroboration

Your own site is one voice. Engines check it against others. In Orbit Media's study of 13,184 AI citations, Clutch was Claude's single most-cited third-party domain and LinkedIn was Perplexity's most-cited domain. The engines also rarely agreed: all four cited the same domain in only 1.7% of cases.

#CheckHow to testPass looks like
6.1Review profile completeOpen your Clutch (services) or G2 (software) profileCanonical description, correct categories, reviews from the last 12 months
6.2Listed in cited listiclesFrom your benchmark, list the listicles engines cite for your promptsYou appear, accurately, in at least three of them
6.3Partner and marketplace listings currentOpen each listingCurrent tier, certifications, industries and description
6.4Executive LinkedIn activeCheck the founder's last 30 daysRegular posts on the topics you want to be cited for
6.5Video and audio have transcriptsCheck YouTube and podcast appearancesAccurate transcripts or show notes naming your company and topic
6.6Press and association mentions consistentSearch your brand name in news and association sitesDescriptions match your canonical statement

How to find and win these placements is covered in the off-site assets that get B2B brands cited.

Layer 7: Measurement

#CheckHow to testPass looks like
7.1Prompt set writtenOpen the file30 to 100 real buyer prompts across category, problem, comparison, alternatives and validation
7.2Baseline recordedCheck the benchmark sheetMention rate, citation rate and share of voice by engine, with a date
7.3AI referral channel in GA4Open GA4 channel groupsA custom channel for ChatGPT, Perplexity, Claude, Gemini and Copilot referrers
7.4Self-reported attributionOpen your demo or contact form"How did you hear about us" includes an AI assistant option, synced to CRM
7.5Monthly re-run scheduledCheck the calendarSame prompts, same protocol, same week each month

Method: how to benchmark your AI visibility and AI referral traffic in GA4.

Scoring and fix order

There are 42 checks. Do not fix them by counting points. Fix them by what each failure blocks.

If this failsIt blocksFix priority
1.1, 1.2, 1.3, 1.4Everything. Engines cannot read the pageThis week
2.1, 2.4Engines naming you confidently, even when they read your pagesWithin two weeks
5.1, 5.2Citations for category and problem promptsWithin 30 days, starting with five money pages
6.1, 6.2Mentions in engines that favor third partiesStart within 30 days; this takes months to build
7.1, 7.2Proving any of it workedBefore you change anything else
3.x, 4.xClarity and consistency, not accessAfter the above

A worked example

Illustrative example. A 45-person legal tech vendor runs the checklist on a 120-page site.

  • Layer 1: robots.txt is fine, but the CDN bot setting challenges unverified bots, and the pricing and integrations pages render their main copy with client-side JavaScript. Two fails, both fixed in the first sprint.
  • Layer 2: the homepage says "contract intelligence platform," G2 says "CLM software," and LinkedIn says "legal AI company." One canonical statement goes everywhere.
  • Layer 3: Organization markup exists but sameAs lists a retired Twitter handle and misses G2. Fixed in an hour.
  • Layer 5: no page answers "CLM for ServiceNow" even though sales hears it weekly. A new integration page ships with an answer block and a comparison table.
  • Layer 6: the vendor is missing from two of the three listicles that engines cite for "best CLM for mid-market." The team sends factual inclusion requests with a short product summary.
  • Layer 7: there was no baseline. They run one before shipping any change so the next month's re-run means something.

What to do this week

  1. Run checks 1.1 to 1.7. Fix any block the same day.
  2. Write your canonical entity statement and paste it into LinkedIn, Clutch or G2, and your About page.
  3. Write 30 prompts and record a baseline before changing any page.
  4. Rewrite the first paragraph of your five most important pages using the answer block template.
  5. Book the monthly re-run in the calendar.

For a step-by-step schedule that sequences this whole checklist, use AEO in 90 days. If you want a second pair of eyes, our AEO, GEO and SEO team runs this checklist as part of a free audit, and the AEO and GEO playbook has the full field guide.

FAQ. Quick answers.

Still unsure? Ask us directly.

What is the most important item on an AEO checklist?

Crawler access. If robots.txt, a CDN bot rule or a firewall blocks search-facing AI crawlers such as OAI-SearchBot, Claude-SearchBot or PerplexityBot, nothing else on the checklist matters. Test it first with your server logs and a raw HTML fetch, then move on to entity consistency, structured data and answer-first page design.

Do I need schema markup to appear in AI answers?

Not strictly. Google states there is no special schema required for AI Overviews or AI Mode. Schema still helps machines confirm who you are and what a page covers, so add accurate Organization, Service or SoftwareApplication, Article and Person markup. The rule is simple: the markup must match what the visible page says.

Should a B2B website publish an llms.txt file?

Treat it as optional and do it last. llms.txt is a proposed format that lists your key pages in markdown. Evidence that AI crawlers rely on it is thin, and Google says AI text files are not needed for its AI features. If it takes an hour to create and your CMS can keep it current, it does no harm.

How many pages does a B2B site need for AEO?

There is no fixed number. You need one strong page for each buyer question cluster you want to win: each core offering, each priority industry, key comparisons and alternatives, pricing model, integrations and named case studies. A focused 40-page site that maps to real prompts usually beats a 400-page site of thin variations.

How often should I rerun this checklist?

Run the full checklist once a quarter and after any site migration, CDN change, CMS change or redesign, since those events often break crawler access or structured data. Check crawler logs and your benchmark prompt set monthly. Update answer blocks on money pages whenever pricing, integrations, certifications or proof numbers change.

Turn this into pipeline. We can run it with you.

Tell us the revenue number and the market. We will come back with the stages that matter most for you, and the ones you can skip.

  • 20 minutes with a senior operator, not an SDR
  • Bring your revenue target and markets; we bring the pipeline math
  • Slots across US, Canada, India, Singapore and GCC time zones

Prefer email? growth@lemniscategrowth.com

Pick a 20-minute slotStraight to a senior operator. No SDR screen.