---
title: "GEO Rule Suite: Eight New Rules That Catch AI Discoverability Gaps at the PR Boundary"
date: "2026-09-13"
slug: "geo-rule-suite-launch"
description: "SEOCode now checks for the signals AI search engines use to decide whether to cite your pages. Eight new rules cover crawler access, entity graphs, SSR metadata hydration, FAQ schema, and content structure — all enforced before code ships."
tags: ["geo", "ai-search", "schema", "robots-txt", "seo", "feature-launch"]
---
A page can rank first on Google and never appear in a ChatGPT or Perplexity answer. Today we shipped eight rules that catch the reasons why, before the code that causes them ever merges.
What the GEO Rule Suite checks
The eight rules live in a new geo category. They run alongside your existing SEO rules. Nothing existing changes.
Here is what each rule catches and why it matters.
geo-robots-ai-agents — Critical
What it catches: A Disallow: / directive aimed at GPTBot, ClaudeBot, PerplexityBot, or other AI crawlers in robots.txt.
Why it matters: If GPTBot cannot crawl your site, ChatGPT cannot cite it. This is the most common reason a well-ranked page is invisible to AI engines. The block is often added intentionally for one bot and then copy-pasted to cover others by accident. The rule fires on any repo with a public/robots.txt and flags the exact line number.
Severity: Critical
schema-nested-graph — Critical
What it catches: A JSON-LD @graph block where the root entity (typically Organization or WebSite) is missing an @id property.
Why it matters: AI engines resolve entities against knowledge graphs. Without an @id anchor, the entity cannot be linked to external knowledge bases. A schema block with no @id is structurally valid JSON-LD but functionally anonymous to a knowledge graph resolver. The rule fires on any page with JSON-LD.
Severity: Critical
geo-ssr-hydration — Critical
What it catches: <title>, <meta name="description">, or Open Graph tags set inside a useEffect hook in JSX or TSX files.
Why it matters: AI crawlers do not execute JavaScript. Metadata written in useEffect is invisible to them. The page ships with a title and description that only appear after client-side hydration. The rule fires on JSX and TSX files and names the specific hook and tag.
Severity: Critical
Framework note: Validated against Next.js App Router, Remix, and Astro patterns. The rule distinguishes useEffect-based metadata from server-rendered metadata set via framework conventions like export const metadata in Next.js App Router, which are safe.
schema-entity-sameas — Warning
What it catches: An Organization or Person entity in JSON-LD that has no sameAs property pointing to an authoritative external source (Wikipedia, Wikidata, LinkedIn, Crunchbase, or similar).
Why it matters: sameAs is how AI engines connect your entity to their existing knowledge about it. Without it, the engine has to guess whether your "Acme Corp" is the same Acme Corp it already knows about. A missing sameAs weakens entity confidence and reduces the likelihood of citation.
Severity: Warning
schema-faqpage-completeness — Warning
What it catches: A FAQPage schema block where one or more Question entities are missing an acceptedAnswer, or where the acceptedAnswer text is under 40 characters.
Why it matters: AI engines pull FAQ content directly into answers. An incomplete FAQPage block either fails to parse or produces a low-confidence answer. A 12-character accepted answer like "See our docs" is not useful to a language model trying to answer a user question.
Severity: Warning
geo-unanchored-stats — Warning
What it catches: Numeric claims in body content that have no citation. The rule looks for patterns like "73% of users" or "increased by 4x" with no adjacent link or footnote.
Why it matters: AI engines weight cited statistics more heavily than bare claims. An unanchored statistic is a claim the engine cannot verify. Pages with sourced data are more likely to be cited as authoritative. The rule flags the specific sentence.
Severity: Warning
geo-bluf-structure — Info
What it catches: Pages where the first 120 words do not contain a direct answer to the implied question of the page title.
Why it matters: AI engines extract passage-level answers. If the answer to the page's core question is buried in paragraph four, the engine may not surface it. BLUF (Bottom Line Up Front) structure puts the answer where the engine is most likely to find it.
Severity: Info
geo-passage-containment — Info
What it catches: Key claims or answers that span multiple HTML block elements rather than sitting inside a single <p> or <section>.
Why it matters: Passage indexing and AI answer extraction work at the block level. A claim split across three paragraphs is harder for an engine to extract as a coherent unit than the same claim written inside one paragraph. The rule flags the split and shows the affected elements.
Severity: Info
Why now
AI search engines are now a meaningful source of referral traffic for many sites. ChatGPT, Perplexity, Google AI Overviews, and Claude all cite sources. The signals they use to decide what to cite are different from traditional ranking signals, and most of them are set in code. A blocked crawler, a missing @id, or a useEffect-wrapped title tag are all code problems. They belong at the PR boundary.
Who gets these rules
All SEOCode users on Developer and Studio tiers get the GEO Rule Suite automatically. No configuration is required.
The geo-robots-ai-agents rule fires on any repo with a public/robots.txt. Schema rules fire on pages with JSON-LD. The geo-ssr-hydration rule fires on JSX and TSX files. If none of those conditions apply to a given PR, the rules stay quiet.
What to do
Open a pull request that touches robots.txt, any file with JSON-LD, or any JSX or TSX file with metadata. SEOCode will run the GEO rules automatically and report findings inline.
If you want to see the full rule set before your next PR, the rule reference is at seocodeapp.com/docs/rules/geo.
Sources
- OpenAI. "GPTBot." https://platform.openai.com/docs/gptbot
- Perplexity AI. "PerplexityBot." https://docs.perplexity.ai/docs/perplexitybot
- Anthropic. "ClaudeBot and web crawling." https://support.anthropic.com/en/articles/8896518-does-anthropic-crawl-the-web-and-how-can-site-owners-block-the-crawler
- Google. "AI Overviews and web content." https://developers.google.com/search/docs/appearance/ai-overviews
- Schema.org. "@id and entity identity in JSON-LD." https://schema.org/docs/jsonldcontext.html
- Schema.org. "sameAs property." https://schema.org/sameAs
- Schema.org. "FAQPage." https://schema.org/FAQPage
- Google. "FAQ structured data." https://developers.google.com/search/docs/appearance/structured-data/faqpage
- Google. "Passage indexing." https://blog.google/products/search/search-on/
- Next.js. "Metadata API." https://nextjs.org/docs/app/building-your-application/optimizing/metadata
- Wikidata. "Linked data and entity resolution." https://www.wikidata.org/wiki/Wikidata:Introduction
Catch SEO and AI discoverability issues before they ship
SEOCode reviews every pull request automatically. No manual audits. No surprises after deploy.
Top comments (0)