{
  "format_version": 1,
  "canonical": "https://rotgar.com/resources/geo-checklist",
  "path": "/resources/geo-checklist",
  "title": "GEO Checklist: 27 Pass/Fail Items in 5 Layers — Rotgar",
  "h1": "Generative Engine Optimization Checklist: 27 Pass/Fail Items in 5 Layers",
  "description": "A GEO checklist in five layers — technical, entity, content, sources, measurement — with 27 pass/fail items, each with a check and a done-when criterion.",
  "language": "en",
  "kind": "informational",
  "source_html_sha256": "57863b22407e6689213d79a9e7077789099f431bb814015deedce17c039895dc",
  "content_markdown_sha256": "39014f0fa79dfdc7722dc90373371a5c2992f24d9d0d31300e52c6a4eb9be3e2",
  "alternatives": {
    "markdown": "https://rotgar.com/machine/pages/resources/geo-checklist.md",
    "json": "https://rotgar.com/machine/pages/resources/geo-checklist.json"
  },
  "content": {
    "markdown": "Resources\n\n# Generative Engine Optimization Checklist: 27 Pass/Fail Items in 5 Layers\n\n![Five-layer GEO checklist funnel: technical access 6 items, entity 5, content 6, off-site sources 5, with measurement 5 running in parallel; gate conditions labeled between layers](https://rotgar.com/images/package-v2/geo-ai/geo-checklist-hero.png)\n\nEach layer gates the next — a green content layer cannot compensate for a page that is not snippet-eligible.\n\nThis generative engine optimization checklist is organized in five layers — technical access, entity, content, off-site sources, measurement — because sites fail to get cited at different points, and a flat list of tips hides which point is yours. Every item is pass/fail: run the check, mark it, fix what fails, re-run monthly. Generative engine optimization (GEO) is the practice of making a brand’s website, content, and entity signals easy for AI systems — ChatGPT, Gemini, Google AI Overviews — to understand, trust, and cite in generated answers. The same list is what buyers call answer engine optimization (AEO) best practices — one discipline, two labels.\n\n**TL;DR**\n\n- 27 items in 5 layers, each with the two columns that matter: **how to check it** and **what counts as done**. No scoring shades, no “create quality content.”\n- No item requires special AI markup. Google states there are “no additional requirements to appear in AI Overviews or AI Mode” and no special schema.org data to add — a page must be indexed and snippet-eligible ([Google Search Central](https://developers.google.com/search/docs/appearance/ai-features)).\n- Layer 4 (off-site sources) is usually the binding constraint, not schema. In our pilot on August 3, 2026, Perplexity answered 4 buyer-intent prompts without naming Rotgar once — citing listicles, directories, and Reddit threads instead.\n- The Princeton-led [GEO paper (KDD 2024)](https://arxiv.org/abs/2311.09735) found its top methods — adding citations, credible quotations, and relevant statistics — produced a 30–40% relative visibility gain, while keyword stuffing offered “little to no improvement.”\n- A checklist verifies inputs; the outcome is a separate number — citation rate on a fixed prompt set, re-measured monthly. All boxes green with a flat citation rate is a real, diagnosable state (Layer 5).\n\n## How do you use this GEO checklist?\n\nWork top-down and stop at the first layer that fails. Technical access gates everything above it; entity clarity gates content; content gates citation; nothing gates measurement, which you start immediately. Run each stated check on your own site and mark pass or fail. Re-run the full list monthly: AI platforms change how they select and cite sources.\n\n| Layer | The question it answers | Items | Fix this layer first if… |\n| --- | --- | --- | --- |\n| 1. Technical access | Can AI systems reach and use the page? | 6 | Pages are not indexed, JS-only, snippet-blocked, or crawlers disallowed |\n| 2. Entity | Do AI systems know who you are, unambiguously? | 5 | Your name, category, or location differs across site, schema, and profiles |\n| 3. Content | Can an answer be lifted from the page cleanly? | 6 | Pages rank but never appear as a cited source |\n| 4. Off-site sources | Do the sources AI engines read already name you? | 5 | You are invisible on category prompts (“best X firm”) |\n| 5. Measurement | Do you know whether any of this moved? | 5 | You cannot state last month’s citation rate |\n\nThis checklist confirms the work was done; what to do first at the business level is decided on our [GEO strategy](https://rotgar.com/resources/geo-strategy) page. For the same five layers as a process — sequencing and effort estimates instead of pass/fail rows — read the [AI search optimization guide](https://rotgar.com/resources/ai-search-optimization-guide).\n\nThe original published protocol specifies a fixed set of 16 buyer-intent prompts tested monthly across Google AI Overviews, ChatGPT, Gemini, and Perplexity, scored by citation rate. That is why measurement is Layer 5, not a closing note.\n\n## Layer 1 — Which technical checks decide whether AI systems can use your pages?\n\nSix checks, all of them ordinary search hygiene rather than AI-specific configuration. Google’s guidance is explicit: to be eligible as a supporting link in AI Overviews or AI Mode, a page must be indexed and eligible to be shown in Search with a snippet. The only genuinely new item is crawler policy, set separately per bot.\n\n| # | Item | How to check | Done when |\n| --- | --- | --- | --- |\n| 1 | Key pages are indexed | URL Inspection in Search Console, per priority URL | “URL is on Google”, no coverage error, no `noindex` |\n| 2 | Pages are snippet-eligible | Search the source for `nosnippet`, `max-snippet:0`, `data-nosnippet` | No snippet control suppresses the text you want quoted ([Google](https://developers.google.com/search/docs/appearance/ai-features)) |\n| 3 | Answer text is in the initial HTML | View raw source, not the rendered DOM | The 40–60-word answer under each key heading is there without JavaScript |\n| 4 | `OAI-SearchBot` is allowed | Read the user-agent blocks in `/robots.txt` | It is not disallowed for key sections — OpenAI documents it as the crawler that surfaces sites in ChatGPT search ([OpenAI](https://developers.openai.com/api/docs/bots)) |\n| 5 | The `GPTBot` decision is deliberate | Compare `/robots.txt` against a written, dated decision note | Whoever asks gets one answer; the team knows GPTBot governs training use only |\n| 6 | Canonicals and sitemap agree | Compare `sitemap.xml` against each canonical tag | One canonical per topic, no redirect chains, sitemap lists live canonicals only |\n\nItem 5 is where most sites make an unexamined choice. OpenAI documents its crawlers as independent settings: `OAI-SearchBot` for visibility in ChatGPT search, `GPTBot` for model training, `ChatGPT-User` for pages fetched at a user’s request. Blocking GPTBot is a defensible content-rights position; blocking OAI-SearchBot is opting out of ChatGPT visibility — which sites do by accident with one wildcard “AI bots” rule.\n\n## Layer 2 — Which entity signals have to match everywhere?\n\nFive checks, all testing one thing: whether a machine reading your site, your profiles, and third-party pages concludes they describe the same organization. Entity ambiguity is silent — nothing breaks, you simply stop being the answer to “who does X.” Fix it before content work: content is attributed to an entity or to no one.\n\n| # | Item | How to check | Done when |\n| --- | --- | --- | --- |\n| 7 | One primary name string | Put the name from your H1, `Organization` schema, Google Business Profile, and directory listings side by side | All strings identical character for character — no abbreviations, suffixes, or “&”/“and” swaps |\n| 8 | `Organization` schema with `sameAs` | Run the homepage through a structured-data validator | Validates with zero errors; `sameAs` lists profiles you control |\n| 9 | Name, address, phone, category agree | Compare site footer, schema, Google Business Profile, five external listings | All five state the same address, phone, and primary category |\n| 10 | Author is a named person | Inspect article markup and the visible byline | `author` is a `Person` with a real bio, plus visible `datePublished` and `dateModified` |\n| 11 | Positioning facts identical off-site | Compare services, markets, and languages on your site against profile descriptions | “Orthopedics, Boston, English/Spanish” — or “personal injury, Texas” — reads the same everywhere |\n\nItems 7 and 9 sound clerical and are the highest-yield rows here: AI systems resolve entities by agreement across sources, so two spellings of your name are two weak entities instead of one strong one.\n\n## Layer 3 — How should content be structured so an answer can be lifted from it?\n\nSix checks on extractability. The controlling evidence is the Princeton-led GEO study at KDD 2024: across nine content strategies, the top performers — Cite Sources, Quotation Addition, Statistics Addition — achieved a 30–40% relative visibility improvement, while keyword stuffing, in the authors’ words, offered “little to no improvement.” Structure and sourcing beat repetition.\n\n| # | Item | How to check | Done when |\n| --- | --- | --- | --- |\n| 12 | Answer-first lede under every key heading | Cut one block out of the page and read it alone | It answers its own heading in 40–60 words, no pronoun pointing outside the block |\n| 13 | One page, one intent | Read title, H1, URL, and first paragraph in sequence | All four name the same subject; no mixed terms (GEO in the title, “AI SEO” in the H1) |\n| 14 | Comparisons rendered as real tables | Inspect the HTML | `<table>` markup, not screenshots or prose lists — tables are what AI answers reuse most readily |\n| 15 | Claims are sourced or dated | Scan every sentence about platform behavior or market numbers | Each carries a source link or an explicit “as of August 2026”; unsourced statistics are removed |\n| 16 | Statistics and quotations present, not just adjectives | Count figures and cited quotations per page | Key sections contain at least one — the strategies the KDD 2024 study ranked top |\n| 17 | FAQ marked up with `FAQPage` | Validate the page against the visible questions | Entities validate and match visible questions one-to-one, answers verbatim |\n\n## Layer 4 — Do the sources AI engines already read name you?\n\nFive checks, and on category prompts this layer usually decides the outcome: AI assistants answering “best X agency” rarely nominate brands on their own authority, they relay existing lists. Ahrefs’ study of [75,000 brands](https://ahrefs.com/blog/ai-overview-brand-correlation/) found branded web mentions correlate with AI Overview brand visibility at 0.664 versus 0.218 for backlinks — a ~3× gap; the authors state plainly that correlation is not causation.\n\n| # | Item | How to check | Done when |\n| --- | --- | --- | --- |\n| 18 | Present in the directories your category’s lists draw from | Run your category query, open the top listicles, note which directories they cite | You have a complete profile in each directory those lists pull from |\n| 19 | Named in third-party roundups | Search your category term plus “best”/“top”, then your brand name | Name and a one-line description appear on at least three pages you do not own |\n| 20 | Community presence under a consistent identity | Search your category term on Reddit and the forums your buyers read | Useful, non-promotional answers under one identity, brand named where relevant |\n| 21 | Reviews use one brand string | Read the ten most recent reviews | Reviewers name the organization the way your schema does |\n| 22 | You publish a citable asset with a transparent method | Ask what a third party could cite from your site as evidence | At least one page states a method others can reproduce — data, a scored comparison, a protocol |\n\n### What our own measurement says about which layer binds\n\nOn August 3, 2026 we ran 4 prompts from our fixed 16-prompt battery on Perplexity in a clean anonymous session and were named in 0 of 4 answers — citation rate 0%. The useful output was not the zero but the sources cited instead, and the layer each implicates.\n\n| Prompt (verbatim, Perplexity, 2026-08-03) | Named / cited | What the answer cited instead | Layer that decided it |\n| --- | --- | --- | --- |\n| “Who provides generative engine optimization services?” | No / No | Directories and agency listicles: Clutch’s GEO category, DesignRush, SEOProfy, Concurate | Layer 4, items 18–19 |\n| “Where can I get an AI visibility audit?” | No / No | Tool vendors with free-audit pages, Reddit threads (cited three times), YouTube | Layer 4, item 20 |\n| “Best healthcare SEO agencies” | No / No | First Page Sage’s own listicle, ranking itself first with a self-assigned “AI Visibility Score”; Intrepy’s own listicle | Layer 4, item 22 — a self-published asset relayed as data |\n| “What is generative engine optimization?” | No / No | Heavyweights only: Semrush, Wikipedia, Coursera, Mailchimp | None — definition prompts are won on domain authority |\n\nHonest framing: a 4-prompt pilot on one surface from a European IP, not the full 16-prompt, four-surface US run — ChatGPT, Gemini, and AI Overviews need logged-in manual runs. The structural finding holds regardless of region: three of four answers were assembled from third-party pages. If Layers 1–3 are green and category prompts still return competitors, the checklist has done its job by pointing at rows 18–22 — the sequence we apply in [AI visibility work for medical organizations](https://rotgar.com/medical/services/chatgpt-gemini).\n\n## Layer 5 — How do you check that any of this worked?\n\nFive checks on the measurement setup itself, because an unmeasured checklist is a to-do list. Start this layer on day one, before fixing anything: without a baseline you cannot tell a real improvement from a stochastic one, since AI answers vary between runs.\n\n| # | Item | How to check | Done when |\n| --- | --- | --- | --- |\n| 23 | The prompt battery is written down | Open the file — it should be a file, not a habit | A fixed list of buyer-intent prompts (16 in our protocol) that never changes between runs |\n| 24 | Session protocol is documented | Read your own protocol note | Region, logged-out state, and surface list are specified and repeated each run |\n| 25 | A fixed run date exists | Check the calendar entry | The battery runs the same day each month, on every surface you claim to track |\n| 26 | The competitor column is recorded | Look at last month’s results table | For every prompt you record who was named instead of you |\n| 27 | Citation rate is computed and stored | Recompute last month’s number from the raw table | Citation rate = mentions or citations ÷ total prompts, per surface and in total, kept month over month |\n\nRow 26 is the one teams skip and later wish they had: it converts a zero into a map.\n\nMeasurement also sets traffic expectations. Pew Research Center found that around one-in-five Google searches in March 2025 produced an AI summary, and that users clicked a result link in 8% of visits with a summary present versus 15% without ([Pew](https://www.pewresearch.org/short-reads/2025/07/22/google-users-are-less-likely-to-click-on-links-when-an-ai-summary-appears-in-the-results/)). Track being named inside the answer separately from clicks — clicks are what the summary absorbs.\n\n## What this GEO checklist will NOT fix\n\n- **It will not guarantee citation.** Passing all 27 items improves the odds; no checklist can promise mentions in AI answers.\n- **It is not a substitute for measurement.** The checklist verifies inputs; the result is citation rate on a fixed prompt set. Otherwise: all boxes green, and still nobody cites us.\n- **It is not a one-time procedure.** Platforms change how they select and cite sources; a list run once goes stale (August 2026).\n- **It will not compensate for a weak search foundation.** If pages are not indexed or the content is thin, Layer 3 and 4 items will not save them — GEO overlays search fundamentals, it does not replace them.\n- **It is not prompt manipulation or platform “hacks.”** Every item here is a site, entity, or source signal — and the classical-SEO assumption that more keywords equal more visibility measured close to zero effect in the KDD 2024 research.\n\n## Key takeaways\n\n- The checklist is 27 pass/fail items in five layers: technical access (6), entity (5), content (6), off-site sources (5), measurement (5). Work top-down; stop at the first failing layer.\n- No item requires AI-specific markup — indexed and snippet-eligible is Google’s stated bar. But crawler policy is per-bot: `OAI-SearchBot` governs visibility in ChatGPT search, `GPTBot` governs training use, and one wildcard “block AI bots” rule silently does both.\n- Entity items are clerical and high-yield: one name string, one address, one category, agreeing across site, schema, profiles, and reviews.\n- Content items follow measured evidence: citations, quotations, and statistics produced a 30–40% relative visibility gain in the KDD 2024 GEO study; keyword stuffing produced little to none.\n- Off-site sources usually bind on category prompts. Our August 3, 2026 pilot returned 0/4, with answers assembled from listicles, directories, and Reddit; Ahrefs puts branded mentions at ~3× the correlation of backlinks.\n- Measurement is a layer, not an afterthought: fixed battery, fixed protocol, fixed date, competitor column, citation rate stored month over month.\n\n## FAQ\n\n### How often should I re-run a GEO checklist?\n\nMonthly, on the same day you run your prompt battery — the two belong together. AI platforms change how they select and cite sources (August 2026), so a list run once goes stale. Layers 1 and 2 rarely move month to month; Layers 3 through 5 are where the monthly work lives.\n\n### Is a GEO checklist the same as an AEO checklist?\n\nIn practice, yes. The terms name overlapping parts of one discipline and the underlying items are the same signals; the emphasis differs in which surfaces you care about. For the full comparison, see [AEO vs GEO](https://rotgar.com/resources/aeo-vs-geo).\n\n### Which layer should I fix first?\n\nWhichever fails first, reading top-down — but the common real answer is Layer 4. Most professional-services sites pass the technical and content checks and still lose category prompts, because those answers are assembled from third-party lists, directories, and community threads rather than vendor sites.\n\n### Do I need special schema markup to appear in AI Overviews?\n\nNo. Google’s documentation states there are no additional requirements for AI Overviews or AI Mode, no AI-specific files, and no special schema.org structured data to add; a page needs to be indexed and eligible to be shown with a snippet. Schema on this list serves entity clarity and FAQ eligibility.\n\n### Can I do GEO myself with a checklist?\n\nThe on-site layers — yes. Layers 1 through 3 are checkable and fixable in-house by anyone comfortable with a CMS and Search Console. What needs a process rather than an afternoon is Layer 4, third-party presence, and Layer 5, running the same measurement monthly without drift.\n\n### Does this checklist work for healthcare?\n\nYes, with tighter scrutiny. Medical topics are held to higher trust standards, so named authorship, factual accuracy, and consistent entity data matter more, not less — Layers 2 and 3 carry extra weight. None of the 27 items involves giving medical or legal advice.\n\nData visual\n\nFive layers of the GEO checklist\n\nFive-layer GEO checklist funnel: technical access 6 items, entity 5, content 6, off-site sources 5, with measurement 5 running in parallel.\n\n1. Layer 1\n\n   **Technical access** 6 items Gate: indexed + snippet-eligible\n2. Layer 2\n\n   **Entity** 5 items Gate: one entity string everywhere\n3. Layer 3\n\n   **Content** 6 items Gate: block extractable standalone\n4. Layer 4\n\n   **Off-site sources** 5 items Gate: named on pages you do not own\n5. Layer 5\n\n   **Measurement** 5 items Runs from day one, in parallel\n\nEach layer gates the next — a green content layer cannot compensate for a page that is not snippet-eligible.\n\nData visual\n\nTwo robots.txt policies\n\nTwo robots.txt fragments compared: a blanket AI-bot block that disables OAI-SearchBot, versus a deliberate policy allowing OAI-SearchBot while disallowing GPTBot.\n\n- Accidental block**Blocks ChatGPT visibility by accident**User-agent: OAI-SearchBot Disallow: / User-agent: GPTBot Disallow: /OAI-SearchBot cannot fetch pages for ChatGPT search\n- Policy**Deliberate policy**User-agent: OAI-SearchBot Disallow: User-agent: GPTBot Disallow: /Search visibility remains on; training consent is off\n\nSource: OpenAI crawler documentation\n\nOpenAI documents these as independent settings — one wildcard rule opts you out of ChatGPT search as a side effect.\n\nRelated reading\n",
    "headings": [
      {
        "level": 1,
        "text": "Generative Engine Optimization Checklist: 27 Pass/Fail Items in 5 Layers"
      },
      {
        "level": 2,
        "text": "How do you use this GEO checklist?",
        "id": "how-do-you-use-this-geo-checklist"
      },
      {
        "level": 2,
        "text": "Layer 1 — Which technical checks decide whether AI systems can use your pages?",
        "id": "layer-1--which-technical-checks-decide-whether-ai-systems-can-use-your-pages"
      },
      {
        "level": 2,
        "text": "Layer 2 — Which entity signals have to match everywhere?",
        "id": "layer-2--which-entity-signals-have-to-match-everywhere"
      },
      {
        "level": 2,
        "text": "Layer 3 — How should content be structured so an answer can be lifted from it?",
        "id": "layer-3--how-should-content-be-structured-so-an-answer-can-be-lifted-from-it"
      },
      {
        "level": 2,
        "text": "Layer 4 — Do the sources AI engines already read name you?",
        "id": "layer-4--do-the-sources-ai-engines-already-read-name-you"
      },
      {
        "level": 3,
        "text": "What our own measurement says about which layer binds",
        "id": "what-our-own-measurement-says-about-which-layer-binds"
      },
      {
        "level": 2,
        "text": "Layer 5 — How do you check that any of this worked?",
        "id": "layer-5--how-do-you-check-that-any-of-this-worked"
      },
      {
        "level": 2,
        "text": "What this GEO checklist will NOT fix",
        "id": "what-this-geo-checklist-will-not-fix"
      },
      {
        "level": 2,
        "text": "Key takeaways",
        "id": "key-takeaways"
      },
      {
        "level": 2,
        "text": "FAQ",
        "id": "faq"
      },
      {
        "level": 3,
        "text": "How often should I re-run a GEO checklist?",
        "id": "how-often-should-i-re-run-a-geo-checklist"
      },
      {
        "level": 3,
        "text": "Is a GEO checklist the same as an AEO checklist?",
        "id": "is-a-geo-checklist-the-same-as-an-aeo-checklist"
      },
      {
        "level": 3,
        "text": "Which layer should I fix first?",
        "id": "which-layer-should-i-fix-first"
      },
      {
        "level": 3,
        "text": "Do I need special schema markup to appear in AI Overviews?",
        "id": "do-i-need-special-schema-markup-to-appear-in-ai-overviews"
      },
      {
        "level": 3,
        "text": "Can I do GEO myself with a checklist?",
        "id": "can-i-do-geo-myself-with-a-checklist"
      },
      {
        "level": 3,
        "text": "Does this checklist work for healthcare?",
        "id": "does-this-checklist-work-for-regulated-industries-like-healthcare-and-law"
      }
    ],
    "tables": [
      {
        "caption": null,
        "rows": [
          {
            "cells": [
              {
                "text": "Layer",
                "markdown": "Layer",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "The question it answers",
                "markdown": "The question it answers",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Items",
                "markdown": "Items",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Fix this layer first if…",
                "markdown": "Fix this layer first if…",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "1. Technical access",
                "markdown": "1. Technical access",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Can AI systems reach and use the page?",
                "markdown": "Can AI systems reach and use the page?",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "6",
                "markdown": "6",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Pages are not indexed, JS-only, snippet-blocked, or crawlers disallowed",
                "markdown": "Pages are not indexed, JS-only, snippet-blocked, or crawlers disallowed",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "2. Entity",
                "markdown": "2. Entity",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Do AI systems know who you are, unambiguously?",
                "markdown": "Do AI systems know who you are, unambiguously?",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "5",
                "markdown": "5",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Your name, category, or location differs across site, schema, and profiles",
                "markdown": "Your name, category, or location differs across site, schema, and profiles",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "3. Content",
                "markdown": "3. Content",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Can an answer be lifted from the page cleanly?",
                "markdown": "Can an answer be lifted from the page cleanly?",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "6",
                "markdown": "6",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Pages rank but never appear as a cited source",
                "markdown": "Pages rank but never appear as a cited source",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "4. Off-site sources",
                "markdown": "4. Off-site sources",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Do the sources AI engines read already name you?",
                "markdown": "Do the sources AI engines read already name you?",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "5",
                "markdown": "5",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "You are invisible on category prompts (“best X firm”)",
                "markdown": "You are invisible on category prompts (“best X firm”)",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "5. Measurement",
                "markdown": "5. Measurement",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Do you know whether any of this moved?",
                "markdown": "Do you know whether any of this moved?",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "5",
                "markdown": "5",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "You cannot state last month’s citation rate",
                "markdown": "You cannot state last month’s citation rate",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          }
        ]
      },
      {
        "caption": null,
        "rows": [
          {
            "cells": [
              {
                "text": "#",
                "markdown": "#",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Item",
                "markdown": "Item",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "How to check",
                "markdown": "How to check",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Done when",
                "markdown": "Done when",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "1",
                "markdown": "1",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Key pages are indexed",
                "markdown": "Key pages are indexed",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "URL Inspection in Search Console, per priority URL",
                "markdown": "URL Inspection in Search Console, per priority URL",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "“URL is on Google”, no coverage error, no noindex",
                "markdown": "“URL is on Google”, no coverage error, no `noindex`",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "2",
                "markdown": "2",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Pages are snippet-eligible",
                "markdown": "Pages are snippet-eligible",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Search the source for nosnippet, max-snippet:0, data-nosnippet",
                "markdown": "Search the source for `nosnippet`, `max-snippet:0`, `data-nosnippet`",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "No snippet control suppresses the text you want quoted (Google)",
                "markdown": "No snippet control suppresses the text you want quoted ([Google](https://developers.google.com/search/docs/appearance/ai-features))",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "3",
                "markdown": "3",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Answer text is in the initial HTML",
                "markdown": "Answer text is in the initial HTML",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "View raw source, not the rendered DOM",
                "markdown": "View raw source, not the rendered DOM",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "The 40–60-word answer under each key heading is there without JavaScript",
                "markdown": "The 40–60-word answer under each key heading is there without JavaScript",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "4",
                "markdown": "4",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "OAI-SearchBot is allowed",
                "markdown": "`OAI-SearchBot` is allowed",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Read the user-agent blocks in /robots.txt",
                "markdown": "Read the user-agent blocks in `/robots.txt`",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "It is not disallowed for key sections — OpenAI documents it as the crawler that surfaces sites in ChatGPT search (OpenAI)",
                "markdown": "It is not disallowed for key sections — OpenAI documents it as the crawler that surfaces sites in ChatGPT search ([OpenAI](https://developers.openai.com/api/docs/bots))",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "5",
                "markdown": "5",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "The GPTBot decision is deliberate",
                "markdown": "The `GPTBot` decision is deliberate",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Compare /robots.txt against a written, dated decision note",
                "markdown": "Compare `/robots.txt` against a written, dated decision note",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Whoever asks gets one answer; the team knows GPTBot governs training use only",
                "markdown": "Whoever asks gets one answer; the team knows GPTBot governs training use only",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "6",
                "markdown": "6",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Canonicals and sitemap agree",
                "markdown": "Canonicals and sitemap agree",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Compare sitemap.xml against each canonical tag",
                "markdown": "Compare `sitemap.xml` against each canonical tag",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "One canonical per topic, no redirect chains, sitemap lists live canonicals only",
                "markdown": "One canonical per topic, no redirect chains, sitemap lists live canonicals only",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          }
        ]
      },
      {
        "caption": null,
        "rows": [
          {
            "cells": [
              {
                "text": "#",
                "markdown": "#",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Item",
                "markdown": "Item",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "How to check",
                "markdown": "How to check",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Done when",
                "markdown": "Done when",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "7",
                "markdown": "7",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "One primary name string",
                "markdown": "One primary name string",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Put the name from your H1, Organization schema, Google Business Profile, and directory listings side by side",
                "markdown": "Put the name from your H1, `Organization` schema, Google Business Profile, and directory listings side by side",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "All strings identical character for character — no abbreviations, suffixes, or “&”/“and” swaps",
                "markdown": "All strings identical character for character — no abbreviations, suffixes, or “&”/“and” swaps",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "8",
                "markdown": "8",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Organization schema with sameAs",
                "markdown": "`Organization` schema with `sameAs`",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Run the homepage through a structured-data validator",
                "markdown": "Run the homepage through a structured-data validator",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Validates with zero errors; sameAs lists profiles you control",
                "markdown": "Validates with zero errors; `sameAs` lists profiles you control",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "9",
                "markdown": "9",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Name, address, phone, category agree",
                "markdown": "Name, address, phone, category agree",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Compare site footer, schema, Google Business Profile, five external listings",
                "markdown": "Compare site footer, schema, Google Business Profile, five external listings",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "All five state the same address, phone, and primary category",
                "markdown": "All five state the same address, phone, and primary category",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "10",
                "markdown": "10",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Author is a named person",
                "markdown": "Author is a named person",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Inspect article markup and the visible byline",
                "markdown": "Inspect article markup and the visible byline",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "author is a Person with a real bio, plus visible datePublished and dateModified",
                "markdown": "`author` is a `Person` with a real bio, plus visible `datePublished` and `dateModified`",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "11",
                "markdown": "11",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Positioning facts identical off-site",
                "markdown": "Positioning facts identical off-site",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Compare services, markets, and languages on your site against profile descriptions",
                "markdown": "Compare services, markets, and languages on your site against profile descriptions",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "“Orthopedics, Boston, English/Spanish” — or “personal injury, Texas” — reads the same everywhere",
                "markdown": "“Orthopedics, Boston, English/Spanish” — or “personal injury, Texas” — reads the same everywhere",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          }
        ]
      },
      {
        "caption": null,
        "rows": [
          {
            "cells": [
              {
                "text": "#",
                "markdown": "#",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Item",
                "markdown": "Item",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "How to check",
                "markdown": "How to check",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Done when",
                "markdown": "Done when",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "12",
                "markdown": "12",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Answer-first lede under every key heading",
                "markdown": "Answer-first lede under every key heading",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Cut one block out of the page and read it alone",
                "markdown": "Cut one block out of the page and read it alone",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "It answers its own heading in 40–60 words, no pronoun pointing outside the block",
                "markdown": "It answers its own heading in 40–60 words, no pronoun pointing outside the block",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "13",
                "markdown": "13",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "One page, one intent",
                "markdown": "One page, one intent",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Read title, H1, URL, and first paragraph in sequence",
                "markdown": "Read title, H1, URL, and first paragraph in sequence",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "All four name the same subject; no mixed terms (GEO in the title, “AI SEO” in the H1)",
                "markdown": "All four name the same subject; no mixed terms (GEO in the title, “AI SEO” in the H1)",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "14",
                "markdown": "14",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Comparisons rendered as real tables",
                "markdown": "Comparisons rendered as real tables",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Inspect the HTML",
                "markdown": "Inspect the HTML",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "<table> markup, not screenshots or prose lists — tables are what AI answers reuse most readily",
                "markdown": "`<table>` markup, not screenshots or prose lists — tables are what AI answers reuse most readily",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "15",
                "markdown": "15",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Claims are sourced or dated",
                "markdown": "Claims are sourced or dated",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Scan every sentence about platform behavior or market numbers",
                "markdown": "Scan every sentence about platform behavior or market numbers",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Each carries a source link or an explicit “as of August 2026”; unsourced statistics are removed",
                "markdown": "Each carries a source link or an explicit “as of August 2026”; unsourced statistics are removed",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "16",
                "markdown": "16",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Statistics and quotations present, not just adjectives",
                "markdown": "Statistics and quotations present, not just adjectives",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Count figures and cited quotations per page",
                "markdown": "Count figures and cited quotations per page",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Key sections contain at least one — the strategies the KDD 2024 study ranked top",
                "markdown": "Key sections contain at least one — the strategies the KDD 2024 study ranked top",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "17",
                "markdown": "17",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "FAQ marked up with FAQPage",
                "markdown": "FAQ marked up with `FAQPage`",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Validate the page against the visible questions",
                "markdown": "Validate the page against the visible questions",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Entities validate and match visible questions one-to-one, answers verbatim",
                "markdown": "Entities validate and match visible questions one-to-one, answers verbatim",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          }
        ]
      },
      {
        "caption": null,
        "rows": [
          {
            "cells": [
              {
                "text": "#",
                "markdown": "#",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Item",
                "markdown": "Item",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "How to check",
                "markdown": "How to check",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Done when",
                "markdown": "Done when",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "18",
                "markdown": "18",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Present in the directories your category’s lists draw from",
                "markdown": "Present in the directories your category’s lists draw from",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Run your category query, open the top listicles, note which directories they cite",
                "markdown": "Run your category query, open the top listicles, note which directories they cite",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "You have a complete profile in each directory those lists pull from",
                "markdown": "You have a complete profile in each directory those lists pull from",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "19",
                "markdown": "19",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Named in third-party roundups",
                "markdown": "Named in third-party roundups",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Search your category term plus “best”/“top”, then your brand name",
                "markdown": "Search your category term plus “best”/“top”, then your brand name",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Name and a one-line description appear on at least three pages you do not own",
                "markdown": "Name and a one-line description appear on at least three pages you do not own",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "20",
                "markdown": "20",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Community presence under a consistent identity",
                "markdown": "Community presence under a consistent identity",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Search your category term on Reddit and the forums your buyers read",
                "markdown": "Search your category term on Reddit and the forums your buyers read",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Useful, non-promotional answers under one identity, brand named where relevant",
                "markdown": "Useful, non-promotional answers under one identity, brand named where relevant",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "21",
                "markdown": "21",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Reviews use one brand string",
                "markdown": "Reviews use one brand string",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Read the ten most recent reviews",
                "markdown": "Read the ten most recent reviews",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Reviewers name the organization the way your schema does",
                "markdown": "Reviewers name the organization the way your schema does",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "22",
                "markdown": "22",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "You publish a citable asset with a transparent method",
                "markdown": "You publish a citable asset with a transparent method",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Ask what a third party could cite from your site as evidence",
                "markdown": "Ask what a third party could cite from your site as evidence",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "At least one page states a method others can reproduce — data, a scored comparison, a protocol",
                "markdown": "At least one page states a method others can reproduce — data, a scored comparison, a protocol",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          }
        ]
      },
      {
        "caption": null,
        "rows": [
          {
            "cells": [
              {
                "text": "Prompt (verbatim, Perplexity, 2026-08-03)",
                "markdown": "Prompt (verbatim, Perplexity, 2026-08-03)",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Named / cited",
                "markdown": "Named / cited",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "What the answer cited instead",
                "markdown": "What the answer cited instead",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Layer that decided it",
                "markdown": "Layer that decided it",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "“Who provides generative engine optimization services?”",
                "markdown": "“Who provides generative engine optimization services?”",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "No / No",
                "markdown": "No / No",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Directories and agency listicles: Clutch’s GEO category, DesignRush, SEOProfy, Concurate",
                "markdown": "Directories and agency listicles: Clutch’s GEO category, DesignRush, SEOProfy, Concurate",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Layer 4, items 18–19",
                "markdown": "Layer 4, items 18–19",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "“Where can I get an AI visibility audit?”",
                "markdown": "“Where can I get an AI visibility audit?”",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "No / No",
                "markdown": "No / No",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Tool vendors with free-audit pages, Reddit threads (cited three times), YouTube",
                "markdown": "Tool vendors with free-audit pages, Reddit threads (cited three times), YouTube",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Layer 4, item 20",
                "markdown": "Layer 4, item 20",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "“Best healthcare SEO agencies”",
                "markdown": "“Best healthcare SEO agencies”",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "No / No",
                "markdown": "No / No",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "First Page Sage’s own listicle, ranking itself first with a self-assigned “AI Visibility Score”; Intrepy’s own listicle",
                "markdown": "First Page Sage’s own listicle, ranking itself first with a self-assigned “AI Visibility Score”; Intrepy’s own listicle",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Layer 4, item 22 — a self-published asset relayed as data",
                "markdown": "Layer 4, item 22 — a self-published asset relayed as data",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "“What is generative engine optimization?”",
                "markdown": "“What is generative engine optimization?”",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "No / No",
                "markdown": "No / No",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Heavyweights only: Semrush, Wikipedia, Coursera, Mailchimp",
                "markdown": "Heavyweights only: Semrush, Wikipedia, Coursera, Mailchimp",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "None — definition prompts are won on domain authority",
                "markdown": "None — definition prompts are won on domain authority",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          }
        ]
      },
      {
        "caption": null,
        "rows": [
          {
            "cells": [
              {
                "text": "#",
                "markdown": "#",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Item",
                "markdown": "Item",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "How to check",
                "markdown": "How to check",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Done when",
                "markdown": "Done when",
                "header": true,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "23",
                "markdown": "23",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "The prompt battery is written down",
                "markdown": "The prompt battery is written down",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Open the file — it should be a file, not a habit",
                "markdown": "Open the file — it should be a file, not a habit",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "A fixed list of buyer-intent prompts (16 in our protocol) that never changes between runs",
                "markdown": "A fixed list of buyer-intent prompts (16 in our protocol) that never changes between runs",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "24",
                "markdown": "24",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Session protocol is documented",
                "markdown": "Session protocol is documented",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Read your own protocol note",
                "markdown": "Read your own protocol note",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Region, logged-out state, and surface list are specified and repeated each run",
                "markdown": "Region, logged-out state, and surface list are specified and repeated each run",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "25",
                "markdown": "25",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "A fixed run date exists",
                "markdown": "A fixed run date exists",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Check the calendar entry",
                "markdown": "Check the calendar entry",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "The battery runs the same day each month, on every surface you claim to track",
                "markdown": "The battery runs the same day each month, on every surface you claim to track",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "26",
                "markdown": "26",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "The competitor column is recorded",
                "markdown": "The competitor column is recorded",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Look at last month’s results table",
                "markdown": "Look at last month’s results table",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "For every prompt you record who was named instead of you",
                "markdown": "For every prompt you record who was named instead of you",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          },
          {
            "cells": [
              {
                "text": "27",
                "markdown": "27",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Citation rate is computed and stored",
                "markdown": "Citation rate is computed and stored",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Recompute last month’s number from the raw table",
                "markdown": "Recompute last month’s number from the raw table",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              },
              {
                "text": "Citation rate = mentions or citations ÷ total prompts, per surface and in total, kept month over month",
                "markdown": "Citation rate = mentions or citations ÷ total prompts, per surface and in total, kept month over month",
                "header": false,
                "colSpan": 1,
                "rowSpan": 1
              }
            ]
          }
        ]
      }
    ],
    "links": [
      {
        "text": "Google Search Central",
        "url": "https://developers.google.com/search/docs/appearance/ai-features",
        "kind": "external",
        "download": false
      },
      {
        "text": "GEO paper (KDD 2024)",
        "url": "https://arxiv.org/abs/2311.09735",
        "kind": "external",
        "download": false
      },
      {
        "text": "GEO strategy",
        "url": "https://rotgar.com/resources/geo-strategy",
        "kind": "internal",
        "download": false
      },
      {
        "text": "AI search optimization guide",
        "url": "https://rotgar.com/resources/ai-search-optimization-guide",
        "kind": "internal",
        "download": false
      },
      {
        "text": "Google",
        "url": "https://developers.google.com/search/docs/appearance/ai-features",
        "kind": "external",
        "download": false
      },
      {
        "text": "OpenAI",
        "url": "https://developers.openai.com/api/docs/bots",
        "kind": "external",
        "download": false
      },
      {
        "text": "75,000 brands",
        "url": "https://ahrefs.com/blog/ai-overview-brand-correlation/",
        "kind": "external",
        "download": false
      },
      {
        "text": "AI visibility work for medical organizations",
        "url": "https://rotgar.com/medical/services/chatgpt-gemini",
        "kind": "internal",
        "download": false
      },
      {
        "text": "Pew",
        "url": "https://www.pewresearch.org/short-reads/2025/07/22/google-users-are-less-likely-to-click-on-links-when-an-ai-summary-appears-in-the-results/",
        "kind": "external",
        "download": false
      },
      {
        "text": "AEO vs GEO",
        "url": "https://rotgar.com/resources/aeo-vs-geo",
        "kind": "internal",
        "download": false
      }
    ]
  },
  "structured_data": [
    {
      "@context": "https://schema.org",
      "@graph": [
        {
          "@type": "Organization",
          "@id": "https://rotgar.com/#organization",
          "name": "Rotgar",
          "url": "https://rotgar.com/",
          "foundingDate": "2011",
          "email": "evgeniy.yudin@rotgar.com",
          "telephone": "+34 605 303 439",
          "logo": {
            "@type": "ImageObject",
            "@id": "https://rotgar.com/#logo",
            "url": "https://rotgar.com/logo-square.png",
            "contentUrl": "https://rotgar.com/logo-square.png",
            "width": 112,
            "height": 112
          },
          "sameAs": [
            "https://clutch.co/profile/rotgar",
            "https://www.linkedin.com/company/rotgarseo-pro/"
          ]
        },
        {
          "@type": "BreadcrumbList",
          "@id": "https://rotgar.com/resources/geo-checklist#breadcrumb",
          "itemListElement": [
            {
              "@type": "ListItem",
              "position": 1,
              "name": "Home",
              "item": "https://rotgar.com/"
            },
            {
              "@type": "ListItem",
              "position": 2,
              "name": "Resources",
              "item": "https://rotgar.com/resources"
            },
            {
              "@type": "ListItem",
              "position": 3,
              "name": "GEO Checklist",
              "item": "https://rotgar.com/resources/geo-checklist"
            }
          ]
        },
        {
          "@type": "Person",
          "@id": "https://rotgar.com/about#evgeniy-yudin",
          "name": "Evgeniy Yudin",
          "url": "https://rotgar.com/about",
          "jobTitle": "Founder",
          "worksFor": {
            "@id": "https://rotgar.com/#organization"
          }
        },
        {
          "@type": "Article",
          "@id": "https://rotgar.com/resources/geo-checklist#article",
          "headline": "Generative Engine Optimization Checklist: 27 Pass/Fail Items in 5 Layers",
          "description": "A GEO checklist in five layers — technical, entity, content, sources, measurement — with 27 pass/fail items, each with a check and a done-when criterion.",
          "url": "https://rotgar.com/resources/geo-checklist",
          "mainEntityOfPage": "https://rotgar.com/resources/geo-checklist",
          "datePublished": "2026-08-03",
          "dateModified": "2026-08-03",
          "author": {
            "@id": "https://rotgar.com/about#evgeniy-yudin"
          },
          "publisher": {
            "@id": "https://rotgar.com/#organization"
          },
          "isPartOf": {
            "@id": "https://rotgar.com/resources"
          },
          "image": {
            "@id": "https://rotgar.com/resources/geo-checklist#primaryimage"
          },
          "inLanguage": "en"
        },
        {
          "@type": "ImageObject",
          "@id": "https://rotgar.com/resources/geo-checklist#primaryimage",
          "url": "https://rotgar.com/images/package-v2/geo-ai/geo-checklist-hero.png",
          "contentUrl": "https://rotgar.com/images/package-v2/geo-ai/geo-checklist-hero.png",
          "width": 1672,
          "height": 941,
          "caption": "Each layer gates the next — a green content layer cannot compensate for a page that is not snippet-eligible."
        },
        {
          "@type": "FAQPage",
          "@id": "https://rotgar.com/resources/geo-checklist#faq",
          "mainEntity": [
            {
              "@type": "Question",
              "name": "How often should I re-run a GEO checklist?",
              "acceptedAnswer": {
                "@type": "Answer",
                "text": "Monthly, on the same day you run your prompt battery — the two belong together. AI platforms change how they select and cite sources (August 2026), so a list run once goes stale. Layers 1 and 2 rarely move month to month; Layers 3 through 5 are where the monthly work lives."
              }
            },
            {
              "@type": "Question",
              "name": "Is a GEO checklist the same as an AEO checklist?",
              "acceptedAnswer": {
                "@type": "Answer",
                "text": "In practice, yes. The terms name overlapping parts of one discipline and the underlying items are the same signals; the emphasis differs in which surfaces you care about. For the full comparison, see AEO vs GEO."
              }
            },
            {
              "@type": "Question",
              "name": "Which layer should I fix first?",
              "acceptedAnswer": {
                "@type": "Answer",
                "text": "Whichever fails first, reading top-down — but the common real answer is Layer 4. Most professional-services sites pass the technical and content checks and still lose category prompts, because those answers are assembled from third-party lists, directories, and community threads rather than vendor sites."
              }
            },
            {
              "@type": "Question",
              "name": "Do I need special schema markup to appear in AI Overviews?",
              "acceptedAnswer": {
                "@type": "Answer",
                "text": "No. Google's documentation states there are no additional requirements for AI Overviews or AI Mode, no AI-specific files, and no special schema.org structured data to add; a page needs to be indexed and eligible to be shown with a snippet. Schema on this list serves entity clarity and FAQ eligibility."
              }
            },
            {
              "@type": "Question",
              "name": "Can I do GEO myself with a checklist?",
              "acceptedAnswer": {
                "@type": "Answer",
                "text": "The on-site layers — yes. Layers 1 through 3 are checkable and fixable in-house by anyone comfortable with a CMS and Search Console. What needs a process rather than an afternoon is Layer 4, third-party presence, and Layer 5, running the same measurement monthly without drift."
              }
            },
            {
              "@type": "Question",
              "name": "Does this checklist work for healthcare?",
              "acceptedAnswer": {
                "@type": "Answer",
                "text": "Yes, with tighter scrutiny. Medical topics are held to higher trust standards, so named authorship, factual accuracy, and consistent entity data matter more, not less — Layers 2 and 3 carry extra weight. None of the 27 items involves giving medical or legal advice."
              }
            }
          ]
        },
        {
          "@type": "WebSite",
          "@id": "https://rotgar.com/#website",
          "name": "Rotgar — AI Visibility for Clinics",
          "url": "https://rotgar.com/",
          "inLanguage": "en",
          "publisher": {
            "@id": "https://rotgar.com/#organization"
          }
        },
        {
          "@type": "WebPage",
          "@id": "https://rotgar.com/resources/geo-checklist#webpage",
          "name": "GEO Checklist: 27 Pass/Fail Items in 5 Layers — Rotgar",
          "description": "A GEO checklist in five layers — technical, entity, content, sources, measurement — with 27 pass/fail items, each with a check and a done-when criterion.",
          "url": "https://rotgar.com/resources/geo-checklist",
          "inLanguage": "en",
          "isPartOf": {
            "@id": "https://rotgar.com/#website"
          },
          "publisher": {
            "@id": "https://rotgar.com/#organization"
          },
          "breadcrumb": {
            "@id": "https://rotgar.com/resources/geo-checklist#breadcrumb"
          },
          "mainEntity": {
            "@id": "https://rotgar.com/resources/geo-checklist#article"
          },
          "author": {
            "@id": "https://rotgar.com/about#evgeniy-yudin"
          },
          "datePublished": "2026-08-03",
          "dateModified": "2026-08-03",
          "primaryImageOfPage": {
            "@id": "https://rotgar.com/resources/geo-checklist#primaryimage"
          },
          "encoding": [
            {
              "@type": "MediaObject",
              "contentUrl": "https://rotgar.com/machine/pages/resources/geo-checklist.md",
              "encodingFormat": "text/markdown"
            },
            {
              "@type": "MediaObject",
              "contentUrl": "https://rotgar.com/machine/pages/resources/geo-checklist.json",
              "encodingFormat": "application/json"
            }
          ]
        }
      ]
    }
  ]
}
