Geodocs.dev

GEO for Developers: Technical Implementation Guide

ShareLinkedIn

Open this article in your favorite AI assistant for deeper analysis, summaries, or follow-up questions.

GEO for developers is the implementation work that makes a site discoverable, parseable, and citable by AI search engines. The core deliverables are JSON-LD schema, an llms.txt file, semantic HTML, an AI-aware robots.txt, and automated validation in CI.

TL;DR: Ship five things to make your site GEO-ready: (1) a JSON-LD schema component on every content template, (2) an llms.txt file at the site root, (3) explicit allow rules in robots.txt for major AI crawlers, (4) a semantic HTML template with a single H1 and answer-first prose, and (5) CI checks that fail the build if structured data or heading hierarchy regresses. None of these replace SEO — they extend it.

Why GEO Is a Developer Problem

Most GEO advice is written for marketers, but the work that actually moves the needle lives in your build pipeline. AI assistants like ChatGPT, Claude, Perplexity, and Gemini retrieve content through crawlers and APIs, then synthesize answers from whatever they can parse cleanly. If your templates emit malformed schema, ship a single H1 inconsistently, or block AI user agents in robots.txt, your content is effectively invisible to those systems regardless of how well it ranks in Google.

GEO inherits the entire SEO stack — crawlability, performance, canonicalization, sitemaps — and adds a thin layer of AI-specific machine-readable hooks on top. Treat the AI-specific work as code: tests, types, and CI gates, not one-off marketing tasks.

Developer Checklist

Infrastructure (one-time)

  • [ ] Deploy llms.txt at the site root
  • [ ] Deploy ai.txt (or equivalent policy file) at the site root
  • [ ] Configure robots.txt with explicit rules for AI crawlers
  • [ ] Generate sitemap.xml automatically from your content source
  • [ ] Implement canonical URL logic in your routing layer
  • [ ] Add if you publish a feed

Per-page (template-level)

  • [ ] JSON-LD structured data component injected into or
  • [ ] Semantic HTML (
    ,
    ,
    ,
  • [ ] Single

    enforced at the template level

  • [ ] and <meta name="description"> populated from frontmatter</li> <li>[ ] Open Graph and Twitter Card metadata</li> <li>[ ] Last-Modified header derived from the content's update date</li> <li>[ ] Answer-first opening paragraph that defines the topic in one or two sentences</li> </ul> <h3 id="build-pipeline">Build pipeline</h3> <ul> <li>[ ] Auto-generate sitemap.xml and llms.txt on every build</li> <li>[ ] Validate JSON-LD against schema.org in CI</li> <li>[ ] Lint heading hierarchy (no skipped levels, exactly one H1)</li> <li>[ ] Block deploys when structured data tests fail</li> <li>[ ] Track per-page word count and warn on thin content</li> </ul> <h2 id="implementation-five-concrete-pieces">Implementation: Five Concrete Pieces</h2> <h3 id="1-json-ld-schema-component">1. JSON-LD Schema Component</h3> <p>JSON-LD is the format Google recommends for structured data, and AI systems parse it the same way. Keep it in a single component so the contract is type-checked and the markup is identical across pages.</p> <p>tsx</p> <p>type ArticleSchemaProps = {</p> <p> title: string</p> <p> datePublished: string</p> <p> dateModified: string</p> <p> authorName: string</p> <p> description: string</p> <p> imageUrl: string</p> <p> publisherName: string</p> <p> publisherLogoUrl: string</p> <p>}</p> <p>export function ArticleSchema(props: ArticleSchemaProps) {</p> <p> const schema = {</p> <p> "@context": "https://schema.org",</p> <p> "@type": "Article",</p> <p> headline: props.title,</p> <p> image: [props.imageUrl],</p> <p> datePublished: props.datePublished,</p> <p> dateModified: props.dateModified,</p> <p> author: { "@type": "Person", name: props.authorName },</p> <p> publisher: {</p> <p> "@type": "Organization",</p> <p> name: props.publisherName,</p> <p> logo: { "@type": "ImageObject", url: props.publisherLogoUrl },</p> <p> },</p> <p> description: props.description,</p> <p> }</p> <p> return (</p> <p> <script</p> <p> type="application/ld+json"</p> <p> dangerouslySetInnerHTML= __html: JSON.stringify(schema) </p> <p> /></p> <p> )</p> <p>}</p> <p>For question-and-answer or step-by-step content, layer FAQPage or HowTo schemas on top of Article. AI systems treat these as high-signal extraction targets because the format already mirrors the answer shape they want to emit.</p> <h3 id="2-llms-txt">2. llms.txt</h3> <p>llms.txt is a proposed standard introduced by Jeremy Howard at llmstxt.org in late 2024. It is a Markdown file at the site root that gives LLMs a low-noise, summarized index of the content you most want them to use. It is not a blocking mechanism, and as of early 2026 no major AI provider has publicly committed to consuming it in production. Adoption is real among developer-facing AI tooling (coding assistants, retrieval frameworks), so the cost is low and the upside is concrete.</p> <p>Generate it automatically from your content source rather than maintaining it by hand:</p> <p>js</p> <p>import fs from "node:fs"</p> <p>import { getArticles } from "./content.js"</p> <p>const articles = getArticles()</p> <p>let output = # Your Sitenn> One-sentence description of what this site covers.nn## Pagesnn</p> <p>for (const a of articles) {</p> <p> output += - ${a.title}: ${a.description}n</p> <p>}</p> <p>fs.writeFileSync("public/llms.txt", output)</p> <p>If your site is large, also publish an llms-full.txt that concatenates the body content of every page into a single Markdown document for tools that prefer one-shot ingestion.</p> <h3 id="3-robots-txt-for-ai-crawlers">3. Robots.txt for AI Crawlers</h3> <p>Decide explicitly which AI crawlers you allow. The major user agents to know are GPTBot and OAI-SearchBot (OpenAI), ChatGPT-User (OpenAI on-demand), ClaudeBot and anthropic-ai (Anthropic), PerplexityBot and Perplexity-User (Perplexity), Google-Extended (Google generative training), CCBot (Common Crawl), and Bytespider (ByteDance).</p> <p>A permissive baseline that maximizes AI search visibility looks like this:</p> <h1 id="traditional-crawlers">Traditional crawlers</h1> <p>User-agent: *</p> <p>Allow: /</p> <h1 id="ai-crawlers-explicit-allow-for-visibility-in-ai-answers">AI crawlers — explicit allow for visibility in AI answers</h1> <p>User-agent: GPTBot</p> <p>Allow: /</p> <p>User-agent: OAI-SearchBot</p> <p>Allow: /</p> <p>User-agent: ChatGPT-User</p> <p>Allow: /</p> <p>User-agent: ClaudeBot</p> <p>Allow: /</p> <p>User-agent: anthropic-ai</p> <p>Allow: /</p> <p>User-agent: PerplexityBot</p> <p>Allow: /</p> <p>User-agent: Perplexity-User</p> <p>Allow: /</p> <p>User-agent: Google-Extended</p> <p>Allow: /</p> <p>User-agent: CCBot</p> <p>Allow: /</p> <p>Sitemap: https://example.com/sitemap.xml</p> <p>If you want to allow retrieval for answers but disallow training, scope the rule by user agent. GPTBot and Google-Extended are training-oriented; OAI-SearchBot, ChatGPT-User, and Perplexity-User are retrieval-oriented.</p> <h3 id="4-semantic-html-and-answer-first-prose">4. Semantic HTML and Answer-First Prose</h3> <p>AI extractors prefer pages that are structurally explicit. The contract your template should enforce is:</p> <ul> <li>One <h1> per page, identical to the frontmatter title</li> <li>Headings descend monotonically (no jumping from H2 to H4)</li> <li>An answer-first opening: the first paragraph defines the topic in plain language</li> <li>A short summary block (such as an <aside> or callout) immediately after the H1</li> <li>A closing FAQ section using H3 questions followed by 2-4 sentence answers</li> </ul> <p>These choices are not cosmetic. AI systems chunk content by heading boundaries before retrieval; clean hierarchy lets them quote you accurately, and answer-first paragraphs raise your odds of being selected as the citation source for a given query.</p> <h3 id="5-ci-validation">5. CI Validation</h3> <p>Nothing in GEO is durable unless CI enforces it. The minimum gates worth running on every commit:</p> <ul> <li>Schema validation — Run extracted JSON-LD against schema.org definitions; fail on missing required fields.</li> <li>Heading lint — Parse the rendered HTML for each page and assert exactly one H1 plus a non-skipping heading hierarchy.</li> <li>Frontmatter completeness — Type-check frontmatter against your content schema (Zod, Valibot, or equivalent).</li> <li>Word count guard — Warn or fail when a page is below the floor for its content type (for example, 600 words for a definition).</li> <li>Link integrity — Detect broken internal anchors and missing canonical hubs.</li> </ul> <p>Google's Rich Results Test and the Schema.org Validator are useful spot checks, but for CI prefer programmatic validation (for example, schema-dts types in TypeScript or a JSON Schema derived from schema.org).</p> <h2 id="framework-notes">Framework Notes</h2> <p>Every modern web framework can ship a clean GEO stack. The integration points are roughly the same regardless of stack:</p> <div class="table-responsive"><table><thead><tr><th>Framework</th><th>Where the schema component lives</th><th>Where llms.txt is generated</th></tr></thead><tbody><tr><td>Next.js</td><td>app/<route>/layout.tsx or metadata API</td><td>next.config build hook or a postbuild script</td></tr><tr><td>Astro</td><td>Content Collections + <head> slot</td><td>Integration that reads collections and writes to public/</td></tr><tr><td>SvelteKit</td><td>+layout.svelte head block</td><td>vite-plugin or a postbuild script</td></tr><tr><td>Hugo</td><td>Partial template under layouts/partials/</td><td>Custom output format or a build script</td></tr><tr><td>WordPress</td><td>Theme header.php or a structured-data plugin</td><td>Plugin or a scheduled cron job</td></tr></tbody></table></div> <p>The table above lists where the work goes, not vendor endorsements; pick the integration point that matches your team's existing build conventions.</p> <h2 id="monitoring-what-you-shipped">Monitoring What You Shipped</h2> <p>GEO without monitoring is throwing code over a wall. The minimum signal set:</p> <ul> <li>Server logs — Track hits from GPTBot, ClaudeBot, PerplexityBot, and OAI-SearchBot over time.</li> <li>Referral traffic — Filter analytics for chat.openai.com, perplexity.ai, claude.ai, gemini.google.com, and copilot.microsoft.com.</li> <li>Citation tracking — Periodically prompt the major AI assistants with target queries and record whether your URL is cited. Tools like Profound, AthenaHQ, and BrightEdge automate this; a weekly cron with a thin script also works.</li> <li>Structured data alerts — Wire Google Search Console structured-data error reports into your team chat.</li> </ul> <h2 id="common-mistakes">Common Mistakes</h2> <ol> <li>Shipping schema once, then forgetting it. Frontmatter drifts, fields go missing, and the schema silently breaks. CI gates fix this.</li> <li>Building llms.txt by hand. It will go stale within a release cycle. Generate it from the content source.</li> <li>Blocking AI crawlers by default. Many starter robots.txt configs deny all unknown agents. Audit explicitly.</li> <li>Heavy client-side rendering with no SSR fallback. Most AI crawlers do not execute JavaScript reliably. Render core content on the server.</li> <li>Optimizing only the homepage. Citations land on deep pages. Apply the full GEO contract to every content template.</li> </ol> <h2 id="faq">FAQ</h2> <h3 id="q-does-llms-txt-actually-do-anything-in-2026">Q: Does llms.txt actually do anything in 2026?</h3> <p>It is a proposed standard, not an adopted one, and no major AI provider has publicly committed to consuming it in production as of early 2026. Adoption is strongest among developer-facing AI tools (coding assistants, retrieval frameworks). The cost to ship is low, so most teams treat it as a low-risk hedge rather than a load-bearing channel.</p> <h3 id="q-will-geo-replace-seo">Q: Will GEO replace SEO?</h3> <p>No. GEO extends SEO. Most GEO foundations — semantic HTML, structured data, canonical URLs, fast pages — are SEO foundations. Keep doing SEO and add the AI-specific layer on top.</p> <h3 id="q-which-ai-crawlers-should-i-allow-in-robots-txt">Q: Which AI crawlers should I allow in robots.txt?</h3> <p>At minimum, allow the user agents tied to live retrieval: OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User, and ClaudeBot. Decide separately whether to allow training-oriented agents like GPTBot and Google-Extended based on your content licensing posture.</p> <h3 id="q-which-schema-type-should-i-prioritize">Q: Which schema type should I prioritize?</h3> <p>For most documentation and editorial sites, Article is the baseline. Layer FAQPage on Q&A sections and HowTo on tutorials — both formats mirror how AI systems present answers and tend to surface more often as citation sources.</p> <h3 id="q-do-i-need-both-a-sitemap-and-llms-txt">Q: Do I need both a sitemap and llms.txt?</h3> <p>Yes. sitemap.xml is for search-engine crawlers and is the source of truth for indexing. llms.txt is a curated, human-readable index aimed at LLMs and assistants. They serve different audiences and should both be auto-generated from your content source.</p></div><div style="margin-top:64px"><h2 style="font-size:18px;font-weight:600;margin-bottom:16px;padding-bottom:8px;border-bottom:1px solid var(--border-default)">Related Articles</h2><div style="display:grid;grid-template-columns:repeat(auto-fill, minmax(280px, 1fr));gap:16px"><a style="text-decoration:none" data-related-article="what-is-geo" data-related-position="1" href="/geo/what-is-geo"><div class="card"><span class="badge badge-green" style="margin-bottom:8px">guide</span><h3 style="font-size:15px;font-weight:600;color:var(--text-heading);margin-bottom:4px">What Is GEO? Generative Engine Optimization Defined</h3><p style="font-size:13px;color:var(--text-secondary);line-height:1.5">GEO (Generative Engine Optimization) is the practice of structuring content so AI search engines retrieve, understand, synthesize, and cite it in generated answers.</p></div></a><a style="text-decoration:none" data-related-article="ai-crawl-signals" data-related-position="2" href="/technical/ai-crawl-signals"><div class="card"><span class="badge badge-green" style="margin-bottom:8px">reference</span><h3 style="font-size:15px;font-weight:600;color:var(--text-heading);margin-bottom:4px">AI Crawl Signals: How AI Discovers Content</h3><p style="font-size:13px;color:var(--text-secondary);line-height:1.5">Technical reference for the signals AI systems use to discover, access, and prioritize web content — including sitemaps, llms.txt, robots.txt, structured data, and HTTP headers.</p></div></a><a style="text-decoration:none" data-related-article="json-ld-for-ai-search" data-related-position="3" href="/technical/json-ld-for-ai-search"><div class="card"><span class="badge badge-green" style="margin-bottom:8px">guide</span><h3 style="font-size:15px;font-weight:600;color:var(--text-heading);margin-bottom:4px">JSON-LD for AI Search: Complete Guide</h3><p style="font-size:13px;color:var(--text-secondary);line-height:1.5">How to implement JSON-LD structured data so AI search engines and traditional search both understand your content's type, authorship, and entities.</p></div></a></div></div></article><div style="padding-left:40px" class="toc-sidebar"><nav style="position:sticky;top:88px;font-size:13px;line-height:1.6;max-height:calc(100vh - 100px);overflow-y:auto"><div style="font-family:var(--font-mono);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:2px;color:var(--color-cool-gray);margin-bottom:12px">On this page</div><a href="#why-geo-is-a-developer-problem" style="display:block;padding:4px 0;padding-left:0;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:none">Why GEO Is a Developer Problem</a><a href="#developer-checklist" style="display:block;padding:4px 0;padding-left:0;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:none">Developer Checklist</a><a href="#infrastructure-one-time" style="display:block;padding:4px 0;padding-left:16px;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:1px solid var(--border-default)">Infrastructure (one-time)</a><a href="#per-page-template-level" style="display:block;padding:4px 0;padding-left:16px;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:1px solid var(--border-default)">Per-page (template-level)</a><a href="#build-pipeline" style="display:block;padding:4px 0;padding-left:16px;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:1px solid var(--border-default)">Build pipeline</a><a href="#implementation-five-concrete-pieces" style="display:block;padding:4px 0;padding-left:0;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:none">Implementation: Five Concrete Pieces</a><a href="#1-json-ld-schema-component" style="display:block;padding:4px 0;padding-left:16px;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:1px solid var(--border-default)">1. JSON-LD Schema Component</a><a href="#2-llms-txt" style="display:block;padding:4px 0;padding-left:16px;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:1px solid var(--border-default)">2. llms.txt</a><a href="#3-robots-txt-for-ai-crawlers" style="display:block;padding:4px 0;padding-left:16px;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:1px solid var(--border-default)">3. Robots.txt for AI Crawlers</a><a href="#4-semantic-html-and-answer-first-prose" style="display:block;padding:4px 0;padding-left:16px;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:1px solid var(--border-default)">4. Semantic HTML and Answer-First Prose</a><a href="#5-ci-validation" style="display:block;padding:4px 0;padding-left:16px;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:1px solid var(--border-default)">5. CI Validation</a><a href="#framework-notes" style="display:block;padding:4px 0;padding-left:0;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:none">Framework Notes</a><a href="#monitoring-what-you-shipped" style="display:block;padding:4px 0;padding-left:0;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:none">Monitoring What You Shipped</a><a href="#common-mistakes" style="display:block;padding:4px 0;padding-left:0;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:none">Common Mistakes</a><a href="#faq" style="display:block;padding:4px 0;padding-left:0;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:none">FAQ</a><a href="#q-does-llms-txt-actually-do-anything-in-2026" style="display:block;padding:4px 0;padding-left:16px;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:1px solid var(--border-default)">Q: Does llms.txt actually do anything in 2026?</a><a href="#q-will-geo-replace-seo" style="display:block;padding:4px 0;padding-left:16px;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:1px solid var(--border-default)">Q: Will GEO replace SEO?</a><a href="#q-which-ai-crawlers-should-i-allow-in-robots-txt" style="display:block;padding:4px 0;padding-left:16px;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:1px solid var(--border-default)">Q: Which AI crawlers should I allow in robots.txt?</a><a href="#q-which-schema-type-should-i-prioritize" style="display:block;padding:4px 0;padding-left:16px;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:1px solid var(--border-default)">Q: Which schema type should I prioritize?</a><a href="#q-do-i-need-both-a-sitemap-and-llms-txt" style="display:block;padding:4px 0;padding-left:16px;color:var(--text-secondary);text-decoration:none;transition:color 0.15s ease;border-left:1px solid var(--border-default)">Q: Do I need both a sitemap and llms.txt?</a></nav></div></div><style> @media (max-width: 1024px) { .toc-sidebar { display: none !important; } } @media (min-width: 1025px) { article { /* override grid for 3-col with TOC */ } } .article-tag-link:hover { border-color: var(--color-dark-green) !important; color: var(--text-primary) !important; background: rgba(0, 237, 100, 0.06) !important; } </style></main><section style="padding:64px 24px;background:var(--bg-surface);border-top:1px solid var(--border-subtle)"><div style="max-width:520px;margin:0 auto;text-align:center"><div style="font-family:var(--font-mono);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:2px;color:var(--color-dark-green);margin-bottom:12px">Stay Updated</div><h2 style="font-family:var(--font-display);font-size:clamp(1.25rem, 3vw, 1.75rem);font-weight:400;color:var(--text-heading);margin-bottom:8px;line-height:1.3">GEO & AI Search Insights</h2><p style="font-size:14px;color:var(--text-secondary);line-height:1.7;margin-bottom:24px">New articles, framework updates, and industry analysis. No spam, unsubscribe anytime.</p><form style="display:flex;flex-wrap:wrap;gap:8px;max-width:420px;margin:0 auto"><input type="email" placeholder="your@email.com" required="" style="flex:1;min-width:200px;padding:12px 16px;border-radius:var(--radius-pill);border:1px solid var(--border-default);background:var(--bg-page);color:var(--text-primary);font-family:var(--font-body);font-size:14px;outline:none;transition:border-color 0.2s ease" value=""/><button type="submit" class="btn btn-primary" style="padding:12px 24px;font-size:14px;opacity:1">Subscribe</button></form></div></section><footer style="background:var(--color-forest-black);border-top:1px solid var(--color-teal-gray);padding:64px 24px 32px"><div style="max-width:1200px;margin:0 auto"><div style="display:grid;grid-template-columns:repeat(auto-fit, minmax(180px, 1fr));gap:48px;margin-bottom:48px"><div><div style="margin-bottom:16px"><img alt="Geodocs.dev" loading="lazy" width="140" height="32" decoding="async" data-nimg="1" style="color:transparent;height:24px;width:auto" src="/geodocs-logo-dark.svg"/></div><p style="font-size:13px;color:var(--color-cool-gray);line-height:1.6;max-width:220px">Structured knowledge for AI search visibility. The canonical reference for GEO, AEO, and AI search optimization.</p></div><div><h4 style="font-family:var(--font-mono);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:2px;color:var(--color-mongodb-green);margin-bottom:16px">Learn</h4><ul style="list-style:none;display:flex;flex-direction:column;gap:10px"><li><a class="footer-link" href="/geo/what-is-geo">What Is GEO?</a></li><li><a class="footer-link" href="/aeo/what-is-aeo">What Is AEO?</a></li><li><a class="footer-link" href="/geo/geo-vs-seo">GEO vs SEO</a></li><li><a class="footer-link" href="/reference/geo-aeo-glossary">GEO Glossary</a></li></ul></div><div><h4 style="font-family:var(--font-mono);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:2px;color:var(--color-mongodb-green);margin-bottom:16px">Build</h4><ul style="list-style:none;display:flex;flex-direction:column;gap:10px"><li><a class="footer-link" href="/technical/llms-txt">llms.txt Reference</a></li><li><a class="footer-link" href="/technical/how-to-create-llms-txt">Create llms.txt</a></li><li><a class="footer-link" href="/technical/structured-data-for-ai-search">Structured Data</a></li><li><a class="footer-link" href="/technical/ai-txt">ai.txt Reference</a></li></ul></div><div><h4 style="font-family:var(--font-mono);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:2px;color:var(--color-mongodb-green);margin-bottom:16px">Strategy</h4><ul style="list-style:none;display:flex;flex-direction:column;gap:10px"><li><a class="footer-link" href="/strategy/ai-visibility-measurement">AI Visibility</a></li><li><a class="footer-link" href="/strategy/geo-content-strategy">Content Strategy</a></li><li><a class="footer-link" href="/strategy/geo-roi-framework">GEO ROI</a></li><li><a class="footer-link" href="/aeo/aeo-content-checklist">AEO Checklist</a></li></ul></div><div><h4 style="font-family:var(--font-mono);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:2px;color:var(--color-mongodb-green);margin-bottom:16px">Resources</h4><ul style="list-style:none;display:flex;flex-direction:column;gap:10px"><li><a class="footer-link" href="https://github.com/Geodocs-dev">GitHub</a></li><li><a class="footer-link" href="/contact">Contact</a></li><li><a class="footer-link" href="/tags">Tags</a></li><li><a class="footer-link" href="/sitemap.xml">Sitemap</a></li><li><a class="footer-link" href="/llms.txt">llms.txt</a></li><li><a class="footer-link" href="/ai.txt">ai.txt</a></li></ul></div></div><div style="border-top:1px solid var(--color-teal-gray);padding-top:24px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:16px"><p style="font-size:12px;color:var(--color-cool-gray)">© <!-- -->2026<!-- --> Geodocs.dev. <!-- -->All rights reserved.</p><p style="font-size:12px;color:var(--color-cool-gray)"><a href="mailto:contact@geodocs.dev" class="footer-link">contact@geodocs.dev</a> · <!-- -->Built for humans and AI agents.</p></div></div><style> .footer-link { font-size: 13px; color: var(--color-silver-teal); text-decoration: none; transition: color 0.2s ease; } .footer-link:hover { color: var(--color-white); } </style></footer><!--$--><!--/$--><script> (function(){ var s=document.createElement('script'); s.src='https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js'; s.defer=true; s.onload=function(){ var isDark=document.documentElement.getAttribute('data-theme')==='dark'; mermaid.initialize({startOnLoad:true,theme:isDark?'dark':'default',securityLevel:'loose'}); mermaid.run(); }; document.head.appendChild(s); })(); (function(){ var link=document.createElement('link'); link.rel='stylesheet'; var isDark=document.documentElement.getAttribute('data-theme')==='dark'; link.href=isDark ?'https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.11.1/build/styles/github-dark.min.css' :'https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.11.1/build/styles/github.min.css'; link.id='hljs-theme'; document.head.appendChild(link); var s=document.createElement('script'); s.src='https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.11.1/build/highlight.min.js'; s.defer=true; s.onload=function(){hljs.highlightAll()}; document.head.appendChild(s); })(); </script><script src="/_next/static/chunks/0_k5kz-r4593u.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[86402,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\"],\"GTMNoScript\"]\n3:I[59919,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\"],\"ThemeProvider\"]\n4:\"$Sreact.suspense\"\n5:I[86402,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\"],\"PostHogPageView\"]\n6:I[39756,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\"],\"default\"]\n7:I[37457,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\"],\"default\"]\n9:I[35264,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\"],\"AlgoliaSearchDialog\"]\na:I[56414,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\"],\"GeolifyAIDialog\"]\nb:I[86402,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\"],\"Analytics\"]\ne:I[97367,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\"],\"OutletBoundary\"]\n11:I[97367,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\"],\"ViewportBoundary\"]\n13:I[97367,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\"],\"MetadataBoundary\"]\n15:I[63491,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\",\"/_next/static/chunks/0z~59b-n8nq5n.js\"],\"default\"]\n:HL[\"/_next/static/chunks/0m3u_6ri~.w--.css\",\"style\"]\n:HL[\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700\u0026family=JetBrains+Mono:wght@400;500;600\u0026family=Lora:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700\u0026display=swap\",\"style\"]\nc:T42d,\n(function(){\n var s=document.createElement('script');\n s.src='https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js';\n s.defer=true;\n s.onload=function(){\n var isDark=document.documentElement.getAttribute('data-theme')==='dark';\n mermaid.initialize({startOnLoad:true,theme:isDark?'dark':'default',securityLevel:'loose'});\n mermaid.run();\n };\n document.head.appendChild(s);\n})();\n(function(){\n var link=document.createElement('link');\n link.rel='stylesheet';\n var isDark=document.documentElement.getAttribute('data-theme')==='dark';\n link.href=isDark\n ?'https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.11.1/build/styles/github-dark.min.css'\n :'https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.11.1/build/styles/github.min.css';\n link.id='hljs-theme';\n document.head.appendChild(link);\n var s=document.createElement('script');\n s.src='https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.11.1/build/highlight.min.js';\n s.defer=true;\n s.onload=fu"])</script><script>self.__next_f.push([1,"nction(){hljs.highlightAll()};\n document.head.appendChild(s);\n})();\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"geo\",\"geo-for-developers\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"geo\",{\"children\":[[\"slug\",\"geo-for-developers\",\"d\",null],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0m3u_6ri~.w--.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0ld4q8u-25eux.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/_next/static/chunks/148t.fhegq9f1.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/_next/static/chunks/05cra..ka3fzk.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){try{var t=localStorage.getItem('geodocs-theme');if(t==='dark'){document.documentElement.setAttribute('data-theme','dark')}else{document.documentElement.setAttribute('data-theme','light')}}catch(e){}})()\"}}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"sizes\":\"any\"}],[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.googleapis.com\"}],[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.gstatic.com\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"link\",null,{\"href\":\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700\u0026family=JetBrains+Mono:wght@400;500;600\u0026family=Lora:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700\u0026display=swap\",\"rel\":\"stylesheet\"}]]}],[\"$\",\"body\",null,{\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{\"children\":[[\"$\",\"$4\",null,{\"fallback\":null,\"children\":[\"$\",\"$L5\",null,{}]}],[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[\"$L8\",[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"$L9\",null,{}],[\"$\",\"$La\",null,{}]]}],[\"$\",\"$Lb\",null,{}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"$c\"}}]]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[\"$Ld\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0immojv~8w4~6.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$Le\",null,{\"children\":[\"$\",\"$4\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@f\"}]}]]}],{},null,false,null]},null,false,\"$@10\"]},null,false,\"$@10\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L11\",null,{\"children\":\"$L12\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L13\",null,{\"children\":[\"$\",\"$4\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L14\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$15\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0m3u_6ri~.w--.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"XmxgrMGsPQQMqpdfzGmxJ\"}\n"])</script><script>self.__next_f.push([1,"16:[]\n10:\"$W16\"\n"])</script><script>self.__next_f.push([1,"17:I[2971,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\",\"/_next/static/chunks/0immojv~8w4~6.js\"],\"Header\"]\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"$L17\",null,{\"lang\":\"en\",\"dict\":{\"nav\":{\"startHere\":\"Start Here\",\"geo\":\"GEO\",\"aeo\":\"AEO\",\"technical\":\"Technical\",\"strategy\":\"Strategy\",\"reference\":\"Reference\",\"tools\":\"Tools\",\"search\":\"Search docs...\",\"askGeolifyAI\":\"Ask GeolifyAI\",\"beta\":\"Beta\"},\"home\":{\"tagline\":\"The Canonical Knowledge System\",\"headline\":\"Structured knowledge for\",\"headlineHighlight\":\"AI search visibility\",\"subtitle\":\"GEO, AEO, and AI search optimization — defined, structured, and operationalized. Built for SEO professionals, developers, content teams, and AI agents.\",\"ctaPrimary\":\"Start with GEO\",\"ctaSecondary\":\"Read llms.txt spec\",\"trustSignals\":{\"answerFirst\":\"Answer-first content\",\"aiCitable\":\"AI-citable definitions\",\"machineReadable\":\"Machine-readable specs\",\"openFree\":\"Open \u0026 free\"},\"essentialReading\":\"Essential Reading\",\"geoPlaybooks\":\"GEO Playbooks\",\"playbooksSubtitle\":\"Canonical definitions, comparisons, and implementation guides. Start here to build your GEO foundation.\",\"readArticle\":\"Read article\",\"operatorsToolkit\":\"Operator's Toolkit\",\"technicalStandards\":\"Technical Standards for AI Search\",\"technicalSubtitle\":\"Implementation specs, file standards, and measurement frameworks. Everything you need to make your content AI-ready.\",\"knowledgeMap\":\"Knowledge Map\",\"browseBySection\":\"Browse by Section\",\"browseSubtitle\":\"Every concept has one canonical page. Explore the knowledge graph organized by domain.\",\"aiNativeDoc\":\"AI-Native Documentation\",\"builtForHumans\":\"Built for humans.\",\"readableByAI\":\"Readable by AI.\",\"aiNativeSubtitle\":\"Every page on geodocs.dev includes AI summary blocks, structured frontmatter, and machine-readable specs. Our content is designed to be cited by AI systems worldwide.\",\"aiContentSpec\":\"AI Content Spec\",\"viewLlmsTxt\":\"View llms.txt\"},\"sections\":{\"geo\":{\"title\":\"GEO - Generative Engine Optimization\",\"description\":\"Guides, definitions, and frameworks for optimizing content visibility in AI-generated answers.\"},\"aeo\":{\"title\":\"AEO - Answer Engine Optimization\",\"description\":\"How to structure content so AI systems can extract and cite direct answers.\"},\"technical\":{\"title\":\"Technical Implementation\",\"description\":\"llms.txt, ai.txt, structured data, and other technical specs for AI search readiness.\"},\"strategy\":{\"title\":\"Strategy \u0026 Frameworks\",\"description\":\"Business frameworks for AI search visibility — ROI, measurement, and content planning.\"},\"reference\":{\"title\":\"Reference\",\"description\":\"Glossary, cheatsheets, and canonical definitions for GEO/AEO terminology.\"},\"tools\":{\"title\":\"Tools \u0026 Platforms\",\"description\":\"Evaluations, comparisons, and stack recommendations for AI search optimization tools.\"},\"case-studies\":{\"title\":\"Case Studies\",\"description\":\"Evidence-based examples with real data — before/after results and industry applications.\"},\"ai-agents\":{\"title\":\"AI Agents\",\"description\":\"Machine-readable specs and documentation designed specifically for AI parsers and bots.\"}},\"article\":{\"minRead\":\"{min} min read\",\"words\":\"{count} words\",\"updated\":\"Updated {date}\",\"relatedArticles\":\"Related Articles\",\"onThisPage\":\"On this page\",\"topics\":\"Topics\",\"copy\":\"Copy\",\"copied\":\"Copied!\"},\"tags\":{\"browseByTopic\":\"Browse by Topic\",\"exploreTopics\":\"Explore {count} topics across all GEO, AEO, and AI search optimization articles.\",\"articlesTaggedWith\":\"{count} article tagged with \\\"{tag}\\\"|{count} articles tagged with \\\"{tag}\\\"\"},\"newsletter\":{\"stayUpdated\":\"Stay Updated\",\"title\":\"GEO \u0026 AI Search Insights\",\"description\":\"New articles, framework updates, and industry analysis. No spam, unsubscribe anytime.\",\"placeholder\":\"your@email.com\",\"subscribe\":\"Subscribe\",\"success\":\"You're subscribed! We'll keep you updated.\",\"error\":\"Something went wrong. Please try again.\"},\"footer\":{\"learn\":\"Learn\",\"build\":\"Build\",\"strategy\":\"Strategy\",\"resources\":\"Resources\",\"description\":\"Structured knowledge for AI search visibility. The canonical reference for GEO, AEO, and AI search optimization.\",\"allRightsReserved\":\"All rights reserved.\",\"builtForHumansAndAI\":\"Built for humans and AI agents.\"},\"common\":{\"articles\":\"articles\",\"article\":\"article\",\"page\":\"Page {current} of {total}\",\"noArticles\":\"No published articles in this section yet.\",\"checkBackSoon\":\"Content is being actively developed. Check back soon.\",\"loadingArticles\":\"Loading articles…\",\"prev\":\"← Prev\",\"next\":\"Next →\",\"goHome\":\"Go home\",\"startWithGEO\":\"Start with GEO\"},\"notFound\":{\"label\":\"404 - Page Not Found\",\"title\":\"This page doesn't exist yet.\",\"description\":\"The content you're looking for may be in development. Geodocs.dev is actively building the canonical knowledge base for GEO and AEO.\"},\"error\":{\"title\":\"Something went wrong\",\"description\":\"An unexpected error occurred. Our team has been notified.\",\"tryAgain\":\"Try Again\"},\"contact\":{\"getInTouch\":\"Get In Touch\",\"contactUs\":\"Contact Us\",\"heroDescription\":\"Have a question about GEO, AEO, or AI search optimization? Want to collaborate or contribute? We'd love to hear from you.\",\"name\":\"Name\",\"email\":\"Email\",\"subject\":\"Subject\",\"subjectPlaceholder\":\"What is this about?\",\"namePlaceholder\":\"Your name\",\"message\":\"Message\",\"messagePlaceholder\":\"Tell us more...\",\"sendMessage\":\"Send Message\",\"sending\":\"Sending...\",\"messageSent\":\"Message sent!\",\"thankYou\":\"Thank you for reaching out. We'll get back to you within 1-2 business days.\",\"sendAnother\":\"Send another message\",\"emailDirectly\":\"Or email us directly at\",\"validationName\":\"Please enter your name.\",\"validationEmail\":\"Please enter a valid email address.\",\"validationMessage\":\"Please enter a message (at least 10 characters).\",\"networkError\":\"Network error. Please try again.\",\"genericError\":\"Something went wrong. Please try again.\"},\"languagePicker\":{\"label\":\"Language\"}}}],\"$L18\",\"$L19\"]\n"])</script><script>self.__next_f.push([1,"1a:I[22016,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\",\"/_next/static/chunks/0immojv~8w4~6.js\"],\"\"]\n1b:I[5500,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\",\"/_next/static/chunks/0immojv~8w4~6.js\"],\"Image\"]\n18:[\"$\",\"main\",null,{\"style\":{\"minHeight\":\"60vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"textAlign\":\"center\",\"padding\":\"80px 24px\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"var(--font-mono)\",\"fontSize\":11,\"fontWeight\":600,\"textTransform\":\"uppercase\",\"letterSpacing\":3,\"color\":\"var(--color-cool-gray)\",\"marginBottom\":16},\"children\":\"404 - Page Not Found\"}],[\"$\",\"h1\",null,{\"style\":{\"fontFamily\":\"var(--font-display)\",\"fontSize\":\"clamp(2rem, 4vw, 3rem)\",\"fontWeight\":400,\"color\":\"var(--color-forest-black)\",\"marginBottom\":16},\"children\":\"This page doesn't exist yet.\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":16,\"color\":\"var(--color-cool-gray)\",\"lineHeight\":1.7,\"maxWidth\":480,\"margin\":\"0 auto 32px\"},\"children\":\"The content you're looking for may be in development. Geodocs.dev is actively building the canonical knowledge base for GEO and AEO.\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"flex\",\"justifyContent\":\"center\",\"gap\":12},\"children\":[[\"$\",\"$L1a\",null,{\"href\":\"/\",\"className\":\"btn btn-primary\",\"children\":\"Go home\"}],[\"$\",\"$L1a\",null,{\"href\":\"/geo/what-is-geo\",\"className\":\"btn btn-outline\",\"children\":\"Start with GEO\"}]]}]]}]}]\n"])</script><script>self.__next_f.push([1,"19:[\"$\",\"footer\",null,{\"style\":{\"background\":\"var(--color-forest-black)\",\"borderTop\":\"1px solid var(--color-teal-gray)\",\"padding\":\"64px 24px 32px\"},\"children\":[[\"$\",\"div\",null,{\"style\":{\"maxWidth\":1200,\"margin\":\"0 auto\"},\"children\":[[\"$\",\"div\",null,{\"style\":{\"display\":\"grid\",\"gridTemplateColumns\":\"repeat(auto-fit, minmax(180px, 1fr))\",\"gap\":48,\"marginBottom\":48},\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"style\":{\"marginBottom\":16},\"children\":[\"$\",\"$L1b\",null,{\"src\":\"/geodocs-logo-dark.svg\",\"alt\":\"Geodocs.dev\",\"width\":140,\"height\":32,\"style\":{\"height\":24,\"width\":\"auto\"}}]}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":13,\"color\":\"var(--color-cool-gray)\",\"lineHeight\":1.6,\"maxWidth\":220},\"children\":\"Structured knowledge for AI search visibility. The canonical reference for GEO, AEO, and AI search optimization.\"}]]}],[[\"$\",\"div\",\"Learn\",{\"children\":[[\"$\",\"h4\",null,{\"style\":{\"fontFamily\":\"var(--font-mono)\",\"fontSize\":11,\"fontWeight\":600,\"textTransform\":\"uppercase\",\"letterSpacing\":2,\"color\":\"var(--color-mongodb-green)\",\"marginBottom\":16},\"children\":\"Learn\"}],[\"$\",\"ul\",null,{\"style\":{\"listStyle\":\"none\",\"display\":\"flex\",\"flexDirection\":\"column\",\"gap\":10},\"children\":[[\"$\",\"li\",\"/geo/what-is-geo\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/geo/what-is-geo\",\"className\":\"footer-link\",\"children\":\"What Is GEO?\"}]}],[\"$\",\"li\",\"/aeo/what-is-aeo\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/aeo/what-is-aeo\",\"className\":\"footer-link\",\"children\":\"What Is AEO?\"}]}],[\"$\",\"li\",\"/geo/geo-vs-seo\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/geo/geo-vs-seo\",\"className\":\"footer-link\",\"children\":\"GEO vs SEO\"}]}],[\"$\",\"li\",\"/reference/geo-aeo-glossary\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/reference/geo-aeo-glossary\",\"className\":\"footer-link\",\"children\":\"GEO Glossary\"}]}]]}]]}],[\"$\",\"div\",\"Build\",{\"children\":[[\"$\",\"h4\",null,{\"style\":{\"fontFamily\":\"var(--font-mono)\",\"fontSize\":11,\"fontWeight\":600,\"textTransform\":\"uppercase\",\"letterSpacing\":2,\"color\":\"var(--color-mongodb-green)\",\"marginBottom\":16},\"children\":\"Build\"}],[\"$\",\"ul\",null,{\"style\":{\"listStyle\":\"none\",\"display\":\"flex\",\"flexDirection\":\"column\",\"gap\":10},\"children\":[[\"$\",\"li\",\"/technical/llms-txt\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/technical/llms-txt\",\"className\":\"footer-link\",\"children\":\"llms.txt Reference\"}]}],[\"$\",\"li\",\"/technical/how-to-create-llms-txt\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/technical/how-to-create-llms-txt\",\"className\":\"footer-link\",\"children\":\"Create llms.txt\"}]}],[\"$\",\"li\",\"/technical/structured-data-for-ai-search\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/technical/structured-data-for-ai-search\",\"className\":\"footer-link\",\"children\":\"Structured Data\"}]}],[\"$\",\"li\",\"/technical/ai-txt\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/technical/ai-txt\",\"className\":\"footer-link\",\"children\":\"ai.txt Reference\"}]}]]}]]}],[\"$\",\"div\",\"Strategy\",{\"children\":[[\"$\",\"h4\",null,{\"style\":{\"fontFamily\":\"var(--font-mono)\",\"fontSize\":11,\"fontWeight\":600,\"textTransform\":\"uppercase\",\"letterSpacing\":2,\"color\":\"var(--color-mongodb-green)\",\"marginBottom\":16},\"children\":\"Strategy\"}],[\"$\",\"ul\",null,{\"style\":{\"listStyle\":\"none\",\"display\":\"flex\",\"flexDirection\":\"column\",\"gap\":10},\"children\":[[\"$\",\"li\",\"/strategy/ai-visibility-measurement\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/strategy/ai-visibility-measurement\",\"className\":\"footer-link\",\"children\":\"AI Visibility\"}]}],[\"$\",\"li\",\"/strategy/geo-content-strategy\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/strategy/geo-content-strategy\",\"className\":\"footer-link\",\"children\":\"Content Strategy\"}]}],[\"$\",\"li\",\"/strategy/geo-roi-framework\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/strategy/geo-roi-framework\",\"className\":\"footer-link\",\"children\":\"GEO ROI\"}]}],[\"$\",\"li\",\"/aeo/aeo-content-checklist\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/aeo/aeo-content-checklist\",\"className\":\"footer-link\",\"children\":\"AEO Checklist\"}]}]]}]]}],[\"$\",\"div\",\"Resources\",{\"children\":[[\"$\",\"h4\",null,{\"style\":{\"fontFamily\":\"var(--font-mono)\",\"fontSize\":11,\"fontWeight\":600,\"textTransform\":\"uppercase\",\"letterSpacing\":2,\"color\":\"var(--color-mongodb-green)\",\"marginBottom\":16},\"children\":\"Resources\"}],[\"$\",\"ul\",null,{\"style\":{\"listStyle\":\"none\",\"display\":\"flex\",\"flexDirection\":\"column\",\"gap\":10},\"children\":[[\"$\",\"li\",\"https://github.com/Geodocs-dev\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"https://github.com/Geodocs-dev\",\"className\":\"footer-link\",\"children\":\"GitHub\"}]}],[\"$\",\"li\",\"/contact\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/contact\",\"className\":\"footer-link\",\"children\":\"Contact\"}]}],[\"$\",\"li\",\"/tags\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/tags\",\"className\":\"footer-link\",\"children\":\"Tags\"}]}],[\"$\",\"li\",\"/sitemap.xml\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/sitemap.xml\",\"className\":\"footer-link\",\"children\":\"Sitemap\"}]}],\"$L1c\",\"$L1d\"]}]]}]]]}],\"$L1e\"]}],\"$L1f\"]}]\n"])</script><script>self.__next_f.push([1,"1c:[\"$\",\"li\",\"/llms.txt\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/llms.txt\",\"className\":\"footer-link\",\"children\":\"llms.txt\"}]}]\n1d:[\"$\",\"li\",\"/ai.txt\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/ai.txt\",\"className\":\"footer-link\",\"children\":\"ai.txt\"}]}]\n1e:[\"$\",\"div\",null,{\"style\":{\"borderTop\":\"1px solid var(--color-teal-gray)\",\"paddingTop\":24,\"display\":\"flex\",\"justifyContent\":\"space-between\",\"alignItems\":\"center\",\"flexWrap\":\"wrap\",\"gap\":16},\"children\":[[\"$\",\"p\",null,{\"style\":{\"fontSize\":12,\"color\":\"var(--color-cool-gray)\"},\"children\":[\"© \",2026,\" Geodocs.dev. \",\"All rights reserved.\"]}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":12,\"color\":\"var(--color-cool-gray)\"},\"children\":[[\"$\",\"a\",null,{\"href\":\"mailto:contact@geodocs.dev\",\"className\":\"footer-link\",\"children\":\"contact@geodocs.dev\"}],\" · \",\"Built for humans and AI agents.\"]}]]}]\n1f:[\"$\",\"style\",null,{\"children\":\"\\n .footer-link {\\n font-size: 13px;\\n color: var(--color-silver-teal);\\n text-decoration: none;\\n transition: color 0.2s ease;\\n }\\n .footer-link:hover {\\n color: var(--color-white);\\n }\\n \"}]\n"])</script><script>self.__next_f.push([1,"20:I[43937,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\",\"/_next/static/chunks/0immojv~8w4~6.js\"],\"ArticleTracker\"]\n21:T450,{\"@context\":\"https://schema.org\",\"@type\":\"TechArticle\",\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://geodocs.dev/geo/geo-for-developers\"},\"headline\":\"GEO for Developers: Technical Implementation Guide\",\"description\":\"A developer-focused guide to implementing GEO: JSON-LD schema, llms.txt, semantic HTML, sitemap optimization, and CI validation for AI search visibility.\",\"image\":\"https://geodocs.dev/geodocs-logo-dark.png\",\"url\":\"https://geodocs.dev/geo/geo-for-developers\",\"author\":{\"@type\":\"Person\",\"name\":\"Geodocs Team\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Geodocs.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://geodocs.dev/geodocs-logo-dark.png\"}},\"datePublished\":\"2025-04-25\",\"dateModified\":\"2026-04-28\",\"keywords\":\"GEO for developers, GEO technical implementation, developer AI search optimization, llms.txt setup, JSON-LD for AI search, AI crawler robots.txt\",\"about\":[{\"@type\":\"Thing\",\"name\":\"Generative Engine Optimization\"},{\"@type\":\"Thing\",\"name\":\"Developer GEO\"},{\"@type\":\"Thing\",\"name\":\"JSON-LD\"},{\"@type\":\"Thing\",\"name\":\"llms.txt\"},{\"@type\":\"Thing\",\"name\":\"Schema.org\"}]}22:T775,"])</script><script>self.__next_f.push([1,"{\"@context\":\"https://schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"Does llms.txt actually do anything in 2026?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"It is a proposed standard, not an adopted one, and no major AI provider has publicly committed to consuming it in production as of early 2026. Adoption is strongest among developer-facing AI tools (coding assistants, retrieval frameworks). The cost to ship is low, so most teams treat it as a low-risk hedge rather than a load-bearing channel.\"}},{\"@type\":\"Question\",\"name\":\"Will GEO replace SEO?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"No. GEO extends SEO. Most GEO foundations — semantic HTML, structured data, canonical URLs, fast pages — are SEO foundations. Keep doing SEO and add the AI-specific layer on top.\"}},{\"@type\":\"Question\",\"name\":\"Which AI crawlers should I allow in robots.txt?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"At minimum, allow the user agents tied to live retrieval: OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User, and ClaudeBot. Decide separately whether to allow training-oriented agents like GPTBot and Google-Extended based on your content licensing posture.\"}},{\"@type\":\"Question\",\"name\":\"Which schema type should I prioritize?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"For most documentation and editorial sites, Article is the baseline. Layer FAQPage on Q\u0026A sections and HowTo on tutorials — both formats mirror how AI systems present answers and tend to surface more often as citation sources.\"}},{\"@type\":\"Question\",\"name\":\"Do I need both a sitemap and llms.txt?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes. sitemap.xml is for search-engine crawlers and is the source of truth for indexing. llms.txt is a curated, human-readable index aimed at LLMs and assistants. They serve different audiences and should both be auto-generated from your content source.\"}}]}"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"$L17\",null,{\"lang\":\"en\",\"dict\":\"$8:0:props:dict\"}],[[\"$\",\"main\",null,{\"style\":{\"minHeight\":\"70vh\"},\"children\":[[\"$\",\"$L20\",null,{\"meta\":{\"slug\":\"geo-for-developers\",\"section\":\"geo\",\"content_type\":\"guide\",\"difficulty\":\"intermediate\",\"primary_audience\":\"developer\",\"secondary_audiences\":[\"seo-specialist\",\"content-strategist\"],\"word_count\":1755,\"reading_time_min\":9,\"has_code_snippet\":false,\"has_table\":false,\"citation_readiness\":\"reviewed\",\"series\":\"geo-foundations\",\"series_order\":4}}],[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$21\"}}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BreadcrumbList\\\",\\\"itemListElement\\\":[{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":1,\\\"name\\\":\\\"Home\\\",\\\"item\\\":\\\"https://geodocs.dev\\\"},{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":2,\\\"name\\\":\\\"GEO\\\",\\\"item\\\":\\\"https://geodocs.dev/geo\\\"},{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":3,\\\"name\\\":\\\"GEO for Developers: Technical Implementation Guide\\\",\\\"item\\\":\\\"https://geodocs.dev/geo/geo-for-developers\\\"}]}\"}}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$22\"}}],\"$L23\",\"$L24\"]]}],\"$L25\"],\"$L26\"]\n"])</script><script>self.__next_f.push([1,"27:I[23150,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\",\"/_next/static/chunks/0immojv~8w4~6.js\"],\"ShareButtons\"]\n28:I[47654,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\",\"/_next/static/chunks/0immojv~8w4~6.js\"],\"ExploreWithAI\"]\n2c:I[11181,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\",\"/_next/static/chunks/0immojv~8w4~6.js\"],\"Newsletter\"]\n29:T34fc,"])</script><script>self.__next_f.push([1,"\u003cdiv class=\"ai-summary\"\u003e\u003cp\u003eGEO for developers is the implementation work that makes a site discoverable, parseable, and citable by AI search engines. The core deliverables are JSON-LD schema, an llms.txt file, semantic HTML, an AI-aware robots.txt, and automated validation in CI.\u003c/p\u003e\u003c/div\u003e\n\u003cp\u003eTL;DR: Ship five things to make your site GEO-ready: (1) a JSON-LD schema component on every content template, (2) an llms.txt file at the site root, (3) explicit allow rules in robots.txt for major AI crawlers, (4) a semantic HTML template with a single H1 and answer-first prose, and (5) CI checks that fail the build if structured data or heading hierarchy regresses. None of these replace SEO — they extend it.\u003c/p\u003e\n\u003ch2 id=\"why-geo-is-a-developer-problem\"\u003eWhy GEO Is a Developer Problem\u003c/h2\u003e\n\u003cp\u003eMost GEO advice is written for marketers, but the work that actually moves the needle lives in your build pipeline. AI assistants like ChatGPT, Claude, Perplexity, and Gemini retrieve content through crawlers and APIs, then synthesize answers from whatever they can parse cleanly. If your templates emit malformed schema, ship a single H1 inconsistently, or block AI user agents in robots.txt, your content is effectively invisible to those systems regardless of how well it ranks in Google.\u003c/p\u003e\n\u003cp\u003eGEO inherits the entire SEO stack — crawlability, performance, canonicalization, sitemaps — and adds a thin layer of AI-specific machine-readable hooks on top. Treat the AI-specific work as code: tests, types, and CI gates, not one-off marketing tasks.\u003c/p\u003e\n\u003ch2 id=\"developer-checklist\"\u003eDeveloper Checklist\u003c/h2\u003e\n\u003ch3 id=\"infrastructure-one-time\"\u003eInfrastructure (one-time)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[ ] Deploy llms.txt at the site root\u003c/li\u003e\n\u003cli\u003e[ ] Deploy ai.txt (or equivalent policy file) at the site root\u003c/li\u003e\n\u003cli\u003e[ ] Configure robots.txt with explicit rules for AI crawlers\u003c/li\u003e\n\u003cli\u003e[ ] Generate sitemap.xml automatically from your content source\u003c/li\u003e\n\u003cli\u003e[ ] Implement canonical URL logic in your routing layer\u003c/li\u003e\n\u003cli\u003e[ ] Add \u003clink rel=\"alternate\" type=\"application/rss+xml\"\u003e if you publish a feed\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"per-page-template-level\"\u003ePer-page (template-level)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[ ] JSON-LD structured data component injected into \u003chead\u003e or \u003cbody\u003e\u003c/li\u003e\n\u003cli\u003e[ ] Semantic HTML (\u003carticle\u003e, \u003csection\u003e, \u003cheader\u003e, \u003cnav\u003e, \u003cmain\u003e)\u003c/li\u003e\n\u003cli\u003e[ ] Single \u003ch1\u003e enforced at the template level\u003c/li\u003e\n\u003cli\u003e[ ] \u003ctitle\u003e and \u003cmeta name=\"description\"\u003e populated from frontmatter\u003c/li\u003e\n\u003cli\u003e[ ] Open Graph and Twitter Card metadata\u003c/li\u003e\n\u003cli\u003e[ ] Last-Modified header derived from the content's update date\u003c/li\u003e\n\u003cli\u003e[ ] Answer-first opening paragraph that defines the topic in one or two sentences\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"build-pipeline\"\u003eBuild pipeline\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[ ] Auto-generate sitemap.xml and llms.txt on every build\u003c/li\u003e\n\u003cli\u003e[ ] Validate JSON-LD against schema.org in CI\u003c/li\u003e\n\u003cli\u003e[ ] Lint heading hierarchy (no skipped levels, exactly one H1)\u003c/li\u003e\n\u003cli\u003e[ ] Block deploys when structured data tests fail\u003c/li\u003e\n\u003cli\u003e[ ] Track per-page word count and warn on thin content\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"implementation-five-concrete-pieces\"\u003eImplementation: Five Concrete Pieces\u003c/h2\u003e\n\u003ch3 id=\"1-json-ld-schema-component\"\u003e1. JSON-LD Schema Component\u003c/h3\u003e\n\u003cp\u003eJSON-LD is the format Google recommends for structured data, and AI systems parse it the same way. Keep it in a single component so the contract is type-checked and the markup is identical across pages.\u003c/p\u003e\n\u003cp\u003etsx\u003c/p\u003e\n\u003cp\u003etype ArticleSchemaProps = {\u003c/p\u003e\n\u003cp\u003e title: string\u003c/p\u003e\n\u003cp\u003e datePublished: string\u003c/p\u003e\n\u003cp\u003e dateModified: string\u003c/p\u003e\n\u003cp\u003e authorName: string\u003c/p\u003e\n\u003cp\u003e description: string\u003c/p\u003e\n\u003cp\u003e imageUrl: string\u003c/p\u003e\n\u003cp\u003e publisherName: string\u003c/p\u003e\n\u003cp\u003e publisherLogoUrl: string\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003eexport function ArticleSchema(props: ArticleSchemaProps) {\u003c/p\u003e\n\u003cp\u003e const schema = {\u003c/p\u003e\n\u003cp\u003e \"@context\": \"https://schema.org\",\u003c/p\u003e\n\u003cp\u003e \"@type\": \"Article\",\u003c/p\u003e\n\u003cp\u003e headline: props.title,\u003c/p\u003e\n\u003cp\u003e image: [props.imageUrl],\u003c/p\u003e\n\u003cp\u003e datePublished: props.datePublished,\u003c/p\u003e\n\u003cp\u003e dateModified: props.dateModified,\u003c/p\u003e\n\u003cp\u003e author: { \"@type\": \"Person\", name: props.authorName },\u003c/p\u003e\n\u003cp\u003e publisher: {\u003c/p\u003e\n\u003cp\u003e \"@type\": \"Organization\",\u003c/p\u003e\n\u003cp\u003e name: props.publisherName,\u003c/p\u003e\n\u003cp\u003e logo: { \"@type\": \"ImageObject\", url: props.publisherLogoUrl },\u003c/p\u003e\n\u003cp\u003e },\u003c/p\u003e\n\u003cp\u003e description: props.description,\u003c/p\u003e\n\u003cp\u003e }\u003c/p\u003e\n\u003cp\u003e return (\u003c/p\u003e\n\u003cp\u003e \u003cscript\u003c/p\u003e\n\u003cp\u003e type=\"application/ld+json\"\u003c/p\u003e\n\u003cp\u003e dangerouslySetInnerHTML= __html: JSON.stringify(schema) \u003c/p\u003e\n\u003cp\u003e /\u003e\u003c/p\u003e\n\u003cp\u003e )\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003eFor question-and-answer or step-by-step content, layer FAQPage or HowTo schemas on top of Article. AI systems treat these as high-signal extraction targets because the format already mirrors the answer shape they want to emit.\u003c/p\u003e\n\u003ch3 id=\"2-llms-txt\"\u003e2. llms.txt\u003c/h3\u003e\n\u003cp\u003ellms.txt is a proposed standard introduced by Jeremy Howard at llmstxt.org in late 2024. It is a Markdown file at the site root that gives LLMs a low-noise, summarized index of the content you most want them to use. It is not a blocking mechanism, and as of early 2026 no major AI provider has publicly committed to consuming it in production. Adoption is real among developer-facing AI tooling (coding assistants, retrieval frameworks), so the cost is low and the upside is concrete.\u003c/p\u003e\n\u003cp\u003eGenerate it automatically from your content source rather than maintaining it by hand:\u003c/p\u003e\n\u003cp\u003ejs\u003c/p\u003e\n\u003cp\u003eimport fs from \"node:fs\"\u003c/p\u003e\n\u003cp\u003eimport { getArticles } from \"./content.js\"\u003c/p\u003e\n\u003cp\u003econst articles = getArticles()\u003c/p\u003e\n\u003cp\u003elet output = # Your Sitenn\u003e One-sentence description of what this site covers.nn## Pagesnn\u003c/p\u003e\n\u003cp\u003efor (const a of articles) {\u003c/p\u003e\n\u003cp\u003e output += - ${a.title}: ${a.description}n\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003efs.writeFileSync(\"public/llms.txt\", output)\u003c/p\u003e\n\u003cp\u003eIf your site is large, also publish an llms-full.txt that concatenates the body content of every page into a single Markdown document for tools that prefer one-shot ingestion.\u003c/p\u003e\n\u003ch3 id=\"3-robots-txt-for-ai-crawlers\"\u003e3. Robots.txt for AI Crawlers\u003c/h3\u003e\n\u003cp\u003eDecide explicitly which AI crawlers you allow. The major user agents to know are GPTBot and OAI-SearchBot (OpenAI), ChatGPT-User (OpenAI on-demand), ClaudeBot and anthropic-ai (Anthropic), PerplexityBot and Perplexity-User (Perplexity), Google-Extended (Google generative training), CCBot (Common Crawl), and Bytespider (ByteDance).\u003c/p\u003e\n\u003cp\u003eA permissive baseline that maximizes AI search visibility looks like this:\u003c/p\u003e\n\u003ch1 id=\"traditional-crawlers\"\u003eTraditional crawlers\u003c/h1\u003e\n\u003cp\u003eUser-agent: *\u003c/p\u003e\n\u003cp\u003eAllow: /\u003c/p\u003e\n\u003ch1 id=\"ai-crawlers-explicit-allow-for-visibility-in-ai-answers\"\u003eAI crawlers — explicit allow for visibility in AI answers\u003c/h1\u003e\n\u003cp\u003eUser-agent: GPTBot\u003c/p\u003e\n\u003cp\u003eAllow: /\u003c/p\u003e\n\u003cp\u003eUser-agent: OAI-SearchBot\u003c/p\u003e\n\u003cp\u003eAllow: /\u003c/p\u003e\n\u003cp\u003eUser-agent: ChatGPT-User\u003c/p\u003e\n\u003cp\u003eAllow: /\u003c/p\u003e\n\u003cp\u003eUser-agent: ClaudeBot\u003c/p\u003e\n\u003cp\u003eAllow: /\u003c/p\u003e\n\u003cp\u003eUser-agent: anthropic-ai\u003c/p\u003e\n\u003cp\u003eAllow: /\u003c/p\u003e\n\u003cp\u003eUser-agent: PerplexityBot\u003c/p\u003e\n\u003cp\u003eAllow: /\u003c/p\u003e\n\u003cp\u003eUser-agent: Perplexity-User\u003c/p\u003e\n\u003cp\u003eAllow: /\u003c/p\u003e\n\u003cp\u003eUser-agent: Google-Extended\u003c/p\u003e\n\u003cp\u003eAllow: /\u003c/p\u003e\n\u003cp\u003eUser-agent: CCBot\u003c/p\u003e\n\u003cp\u003eAllow: /\u003c/p\u003e\n\u003cp\u003eSitemap: https://example.com/sitemap.xml\u003c/p\u003e\n\u003cp\u003eIf you want to allow retrieval for answers but disallow training, scope the rule by user agent. GPTBot and Google-Extended are training-oriented; OAI-SearchBot, ChatGPT-User, and Perplexity-User are retrieval-oriented.\u003c/p\u003e\n\u003ch3 id=\"4-semantic-html-and-answer-first-prose\"\u003e4. Semantic HTML and Answer-First Prose\u003c/h3\u003e\n\u003cp\u003eAI extractors prefer pages that are structurally explicit. The contract your template should enforce is:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eOne \u003ch1\u003e per page, identical to the frontmatter title\u003c/li\u003e\n\u003cli\u003eHeadings descend monotonically (no jumping from H2 to H4)\u003c/li\u003e\n\u003cli\u003eAn answer-first opening: the first paragraph defines the topic in plain language\u003c/li\u003e\n\u003cli\u003eA short summary block (such as an \u003caside\u003e or callout) immediately after the H1\u003c/li\u003e\n\u003cli\u003eA closing FAQ section using H3 questions followed by 2-4 sentence answers\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThese choices are not cosmetic. AI systems chunk content by heading boundaries before retrieval; clean hierarchy lets them quote you accurately, and answer-first paragraphs raise your odds of being selected as the citation source for a given query.\u003c/p\u003e\n\u003ch3 id=\"5-ci-validation\"\u003e5. CI Validation\u003c/h3\u003e\n\u003cp\u003eNothing in GEO is durable unless CI enforces it. The minimum gates worth running on every commit:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSchema validation — Run extracted JSON-LD against schema.org definitions; fail on missing required fields.\u003c/li\u003e\n\u003cli\u003eHeading lint — Parse the rendered HTML for each page and assert exactly one H1 plus a non-skipping heading hierarchy.\u003c/li\u003e\n\u003cli\u003eFrontmatter completeness — Type-check frontmatter against your content schema (Zod, Valibot, or equivalent).\u003c/li\u003e\n\u003cli\u003eWord count guard — Warn or fail when a page is below the floor for its content type (for example, 600 words for a definition).\u003c/li\u003e\n\u003cli\u003eLink integrity — Detect broken internal anchors and missing canonical hubs.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eGoogle's Rich Results Test and the Schema.org Validator are useful spot checks, but for CI prefer programmatic validation (for example, schema-dts types in TypeScript or a JSON Schema derived from schema.org).\u003c/p\u003e\n\u003ch2 id=\"framework-notes\"\u003eFramework Notes\u003c/h2\u003e\n\u003cp\u003eEvery modern web framework can ship a clean GEO stack. The integration points are roughly the same regardless of stack:\u003c/p\u003e\n\u003cdiv class=\"table-responsive\"\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003eFramework\u003c/th\u003e\u003cth\u003eWhere the schema component lives\u003c/th\u003e\u003cth\u003eWhere llms.txt is generated\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003eNext.js\u003c/td\u003e\u003ctd\u003eapp/\u003croute\u003e/layout.tsx or metadata API\u003c/td\u003e\u003ctd\u003enext.config build hook or a postbuild script\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eAstro\u003c/td\u003e\u003ctd\u003eContent Collections + \u003chead\u003e slot\u003c/td\u003e\u003ctd\u003eIntegration that reads collections and writes to public/\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eSvelteKit\u003c/td\u003e\u003ctd\u003e+layout.svelte head block\u003c/td\u003e\u003ctd\u003evite-plugin or a postbuild script\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eHugo\u003c/td\u003e\u003ctd\u003ePartial template under layouts/partials/\u003c/td\u003e\u003ctd\u003eCustom output format or a build script\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eWordPress\u003c/td\u003e\u003ctd\u003eTheme header.php or a structured-data plugin\u003c/td\u003e\u003ctd\u003ePlugin or a scheduled cron job\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eThe table above lists where the work goes, not vendor endorsements; pick the integration point that matches your team's existing build conventions.\u003c/p\u003e\n\u003ch2 id=\"monitoring-what-you-shipped\"\u003eMonitoring What You Shipped\u003c/h2\u003e\n\u003cp\u003eGEO without monitoring is throwing code over a wall. The minimum signal set:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eServer logs — Track hits from GPTBot, ClaudeBot, PerplexityBot, and OAI-SearchBot over time.\u003c/li\u003e\n\u003cli\u003eReferral traffic — Filter analytics for chat.openai.com, perplexity.ai, claude.ai, gemini.google.com, and copilot.microsoft.com.\u003c/li\u003e\n\u003cli\u003eCitation tracking — Periodically prompt the major AI assistants with target queries and record whether your URL is cited. Tools like Profound, AthenaHQ, and BrightEdge automate this; a weekly cron with a thin script also works.\u003c/li\u003e\n\u003cli\u003eStructured data alerts — Wire Google Search Console structured-data error reports into your team chat.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"common-mistakes\"\u003eCommon Mistakes\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eShipping schema once, then forgetting it. Frontmatter drifts, fields go missing, and the schema silently breaks. CI gates fix this.\u003c/li\u003e\n\u003cli\u003eBuilding llms.txt by hand. It will go stale within a release cycle. Generate it from the content source.\u003c/li\u003e\n\u003cli\u003eBlocking AI crawlers by default. Many starter robots.txt configs deny all unknown agents. Audit explicitly.\u003c/li\u003e\n\u003cli\u003eHeavy client-side rendering with no SSR fallback. Most AI crawlers do not execute JavaScript reliably. Render core content on the server.\u003c/li\u003e\n\u003cli\u003eOptimizing only the homepage. Citations land on deep pages. Apply the full GEO contract to every content template.\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"faq\"\u003eFAQ\u003c/h2\u003e\n\u003ch3 id=\"q-does-llms-txt-actually-do-anything-in-2026\"\u003eQ: Does llms.txt actually do anything in 2026?\u003c/h3\u003e\n\u003cp\u003eIt is a proposed standard, not an adopted one, and no major AI provider has publicly committed to consuming it in production as of early 2026. Adoption is strongest among developer-facing AI tools (coding assistants, retrieval frameworks). The cost to ship is low, so most teams treat it as a low-risk hedge rather than a load-bearing channel.\u003c/p\u003e\n\u003ch3 id=\"q-will-geo-replace-seo\"\u003eQ: Will GEO replace SEO?\u003c/h3\u003e\n\u003cp\u003eNo. GEO extends SEO. Most GEO foundations — semantic HTML, structured data, canonical URLs, fast pages — are SEO foundations. Keep doing SEO and add the AI-specific layer on top.\u003c/p\u003e\n\u003ch3 id=\"q-which-ai-crawlers-should-i-allow-in-robots-txt\"\u003eQ: Which AI crawlers should I allow in robots.txt?\u003c/h3\u003e\n\u003cp\u003eAt minimum, allow the user agents tied to live retrieval: OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User, and ClaudeBot. Decide separately whether to allow training-oriented agents like GPTBot and Google-Extended based on your content licensing posture.\u003c/p\u003e\n\u003ch3 id=\"q-which-schema-type-should-i-prioritize\"\u003eQ: Which schema type should I prioritize?\u003c/h3\u003e\n\u003cp\u003eFor most documentation and editorial sites, Article is the baseline. Layer FAQPage on Q\u0026A sections and HowTo on tutorials — both formats mirror how AI systems present answers and tend to surface more often as citation sources.\u003c/p\u003e\n\u003ch3 id=\"q-do-i-need-both-a-sitemap-and-llms-txt\"\u003eQ: Do I need both a sitemap and llms.txt?\u003c/h3\u003e\n\u003cp\u003eYes. sitemap.xml is for search-engine crawlers and is the source of truth for indexing. llms.txt is a curated, human-readable index aimed at LLMs and assistants. They serve different audiences and should both be auto-generated from your content source.\u003c/p\u003e"])</script><script>self.__next_f.push([1,"23:[\"$\",\"div\",null,{\"style\":{\"display\":\"grid\",\"gridTemplateColumns\":\"1fr min(var(--content-max-width), 100%) 1fr\",\"gap\":0,\"maxWidth\":1200,\"margin\":\"0 auto\",\"padding\":\"48px 24px 80px\"},\"children\":[[\"$\",\"div\",null,{}],[\"$\",\"article\",null,{\"children\":[[\"$\",\"h1\",null,{\"style\":{\"fontFamily\":\"var(--font-display)\",\"fontSize\":\"clamp(1.75rem, 4vw, 2.5rem)\",\"fontWeight\":500,\"lineHeight\":1.2,\"color\":\"var(--text-heading)\",\"marginBottom\":16},\"children\":\"GEO for Developers: Technical Implementation Guide\"}],[\"$\",\"div\",null,{\"className\":\"metadata-bar\",\"style\":{\"marginBottom\":24},\"children\":[[\"$\",\"span\",null,{\"className\":\"metadata-bar__tag metadata-bar__tag--section\",\"children\":\"geo\"}],[\"$\",\"span\",null,{\"className\":\"metadata-bar__tag\",\"children\":\"guide\"}],[\"$\",\"span\",null,{\"className\":\"metadata-bar__tag\",\"children\":\"intermediate\"}],[\"$\",\"span\",null,{\"className\":\"metadata-bar__dot\"}],[\"$\",\"span\",null,{\"children\":\"9 min read\"}],[\"$\",\"span\",null,{\"className\":\"metadata-bar__dot\"}],[\"$\",\"span\",null,{\"children\":\"1,755 words\"}],[[\"$\",\"span\",null,{\"className\":\"metadata-bar__dot\"}],[\"$\",\"span\",null,{\"children\":\"Updated Apr 2026\"}]]]}],[\"$\",\"$L27\",null,{\"title\":\"GEO for Developers: Technical Implementation Guide\",\"url\":\"https://geodocs.dev/geo/geo-for-developers\"}],[\"$\",\"$L28\",null,{\"title\":\"GEO for Developers: Technical Implementation Guide\",\"url\":\"https://geodocs.dev/geo/geo-for-developers\",\"section\":\"geo\",\"slug\":\"geo-for-developers\"}],[\"$\",\"div\",null,{\"className\":\"prose\",\"dangerouslySetInnerHTML\":{\"__html\":\"$29\"}}],\"$L2a\",false]}],\"$L2b\"]}]\n"])</script><script>self.__next_f.push([1,"24:[\"$\",\"style\",null,{\"children\":\"\\n @media (max-width: 1024px) {\\n .toc-sidebar { display: none !important; }\\n }\\n @media (min-width: 1025px) {\\n article {\\n /* override grid for 3-col with TOC */\\n }\\n }\\n .article-tag-link:hover {\\n border-color: var(--color-dark-green) !important;\\n color: var(--text-primary) !important;\\n background: rgba(0, 237, 100, 0.06) !important;\\n }\\n \"}]\n25:[\"$\",\"$L2c\",null,{\"dict\":\"$8:0:props:dict:newsletter\"}]\n"])</script><script>self.__next_f.push([1,"26:[\"$\",\"footer\",null,{\"style\":{\"background\":\"var(--color-forest-black)\",\"borderTop\":\"1px solid var(--color-teal-gray)\",\"padding\":\"64px 24px 32px\"},\"children\":[[\"$\",\"div\",null,{\"style\":{\"maxWidth\":1200,\"margin\":\"0 auto\"},\"children\":[[\"$\",\"div\",null,{\"style\":{\"display\":\"grid\",\"gridTemplateColumns\":\"repeat(auto-fit, minmax(180px, 1fr))\",\"gap\":48,\"marginBottom\":48},\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"style\":{\"marginBottom\":16},\"children\":[\"$\",\"$L1b\",null,{\"src\":\"/geodocs-logo-dark.svg\",\"alt\":\"Geodocs.dev\",\"width\":140,\"height\":32,\"style\":{\"height\":24,\"width\":\"auto\"}}]}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":13,\"color\":\"var(--color-cool-gray)\",\"lineHeight\":1.6,\"maxWidth\":220},\"children\":\"Structured knowledge for AI search visibility. The canonical reference for GEO, AEO, and AI search optimization.\"}]]}],[[\"$\",\"div\",\"Learn\",{\"children\":[[\"$\",\"h4\",null,{\"style\":{\"fontFamily\":\"var(--font-mono)\",\"fontSize\":11,\"fontWeight\":600,\"textTransform\":\"uppercase\",\"letterSpacing\":2,\"color\":\"var(--color-mongodb-green)\",\"marginBottom\":16},\"children\":\"Learn\"}],[\"$\",\"ul\",null,{\"style\":{\"listStyle\":\"none\",\"display\":\"flex\",\"flexDirection\":\"column\",\"gap\":10},\"children\":[[\"$\",\"li\",\"/geo/what-is-geo\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/geo/what-is-geo\",\"className\":\"footer-link\",\"children\":\"What Is GEO?\"}]}],[\"$\",\"li\",\"/aeo/what-is-aeo\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/aeo/what-is-aeo\",\"className\":\"footer-link\",\"children\":\"What Is AEO?\"}]}],[\"$\",\"li\",\"/geo/geo-vs-seo\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/geo/geo-vs-seo\",\"className\":\"footer-link\",\"children\":\"GEO vs SEO\"}]}],[\"$\",\"li\",\"/reference/geo-aeo-glossary\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/reference/geo-aeo-glossary\",\"className\":\"footer-link\",\"children\":\"GEO Glossary\"}]}]]}]]}],[\"$\",\"div\",\"Build\",{\"children\":[[\"$\",\"h4\",null,{\"style\":{\"fontFamily\":\"var(--font-mono)\",\"fontSize\":11,\"fontWeight\":600,\"textTransform\":\"uppercase\",\"letterSpacing\":2,\"color\":\"var(--color-mongodb-green)\",\"marginBottom\":16},\"children\":\"Build\"}],[\"$\",\"ul\",null,{\"style\":{\"listStyle\":\"none\",\"display\":\"flex\",\"flexDirection\":\"column\",\"gap\":10},\"children\":[[\"$\",\"li\",\"/technical/llms-txt\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/technical/llms-txt\",\"className\":\"footer-link\",\"children\":\"llms.txt Reference\"}]}],[\"$\",\"li\",\"/technical/how-to-create-llms-txt\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/technical/how-to-create-llms-txt\",\"className\":\"footer-link\",\"children\":\"Create llms.txt\"}]}],[\"$\",\"li\",\"/technical/structured-data-for-ai-search\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/technical/structured-data-for-ai-search\",\"className\":\"footer-link\",\"children\":\"Structured Data\"}]}],[\"$\",\"li\",\"/technical/ai-txt\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/technical/ai-txt\",\"className\":\"footer-link\",\"children\":\"ai.txt Reference\"}]}]]}]]}],[\"$\",\"div\",\"Strategy\",{\"children\":[[\"$\",\"h4\",null,{\"style\":{\"fontFamily\":\"var(--font-mono)\",\"fontSize\":11,\"fontWeight\":600,\"textTransform\":\"uppercase\",\"letterSpacing\":2,\"color\":\"var(--color-mongodb-green)\",\"marginBottom\":16},\"children\":\"Strategy\"}],[\"$\",\"ul\",null,{\"style\":{\"listStyle\":\"none\",\"display\":\"flex\",\"flexDirection\":\"column\",\"gap\":10},\"children\":[[\"$\",\"li\",\"/strategy/ai-visibility-measurement\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/strategy/ai-visibility-measurement\",\"className\":\"footer-link\",\"children\":\"AI Visibility\"}]}],[\"$\",\"li\",\"/strategy/geo-content-strategy\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/strategy/geo-content-strategy\",\"className\":\"footer-link\",\"children\":\"Content Strategy\"}]}],[\"$\",\"li\",\"/strategy/geo-roi-framework\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/strategy/geo-roi-framework\",\"className\":\"footer-link\",\"children\":\"GEO ROI\"}]}],[\"$\",\"li\",\"/aeo/aeo-content-checklist\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/aeo/aeo-content-checklist\",\"className\":\"footer-link\",\"children\":\"AEO Checklist\"}]}]]}]]}],[\"$\",\"div\",\"Resources\",{\"children\":[[\"$\",\"h4\",null,{\"style\":{\"fontFamily\":\"var(--font-mono)\",\"fontSize\":11,\"fontWeight\":600,\"textTransform\":\"uppercase\",\"letterSpacing\":2,\"color\":\"var(--color-mongodb-green)\",\"marginBottom\":16},\"children\":\"Resources\"}],[\"$\",\"ul\",null,{\"style\":{\"listStyle\":\"none\",\"display\":\"flex\",\"flexDirection\":\"column\",\"gap\":10},\"children\":[[\"$\",\"li\",\"https://github.com/Geodocs-dev\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"https://github.com/Geodocs-dev\",\"className\":\"footer-link\",\"children\":\"GitHub\"}]}],[\"$\",\"li\",\"/contact\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/contact\",\"className\":\"footer-link\",\"children\":\"Contact\"}]}],[\"$\",\"li\",\"/tags\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/tags\",\"className\":\"footer-link\",\"children\":\"Tags\"}]}],[\"$\",\"li\",\"/sitemap.xml\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/sitemap.xml\",\"className\":\"footer-link\",\"children\":\"Sitemap\"}]}],\"$L2d\",\"$L2e\"]}]]}]]]}],\"$L2f\"]}],\"$L30\"]}]\n"])</script><script>self.__next_f.push([1,"2a:[\"$\",\"div\",null,{\"style\":{\"marginTop\":64},\"children\":[[\"$\",\"h2\",null,{\"style\":{\"fontSize\":18,\"fontWeight\":600,\"marginBottom\":16,\"paddingBottom\":8,\"borderBottom\":\"1px solid var(--border-default)\"},\"children\":\"Related Articles\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"grid\",\"gridTemplateColumns\":\"repeat(auto-fill, minmax(280px, 1fr))\",\"gap\":16},\"children\":[[\"$\",\"$L1a\",\"what-is-geo\",{\"href\":\"/geo/what-is-geo\",\"style\":{\"textDecoration\":\"none\"},\"data-related-article\":\"what-is-geo\",\"data-related-position\":1,\"children\":[\"$\",\"div\",null,{\"className\":\"card\",\"children\":[[\"$\",\"span\",null,{\"className\":\"badge badge-green\",\"style\":{\"marginBottom\":8},\"children\":\"guide\"}],[\"$\",\"h3\",null,{\"style\":{\"fontSize\":15,\"fontWeight\":600,\"color\":\"var(--text-heading)\",\"marginBottom\":4},\"children\":\"What Is GEO? Generative Engine Optimization Defined\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":13,\"color\":\"var(--text-secondary)\",\"lineHeight\":1.5},\"children\":\"GEO (Generative Engine Optimization) is the practice of structuring content so AI search engines retrieve, understand, synthesize, and cite it in generated answers.\"}]]}]}],[\"$\",\"$L1a\",\"ai-crawl-signals\",{\"href\":\"/technical/ai-crawl-signals\",\"style\":{\"textDecoration\":\"none\"},\"data-related-article\":\"ai-crawl-signals\",\"data-related-position\":2,\"children\":[\"$\",\"div\",null,{\"className\":\"card\",\"children\":[[\"$\",\"span\",null,{\"className\":\"badge badge-green\",\"style\":{\"marginBottom\":8},\"children\":\"reference\"}],[\"$\",\"h3\",null,{\"style\":{\"fontSize\":15,\"fontWeight\":600,\"color\":\"var(--text-heading)\",\"marginBottom\":4},\"children\":\"AI Crawl Signals: How AI Discovers Content\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":13,\"color\":\"var(--text-secondary)\",\"lineHeight\":1.5},\"children\":\"Technical reference for the signals AI systems use to discover, access, and prioritize web content — including sitemaps, llms.txt, robots.txt, structured data, and HTTP headers.\"}]]}]}],[\"$\",\"$L1a\",\"json-ld-for-ai-search\",{\"href\":\"/technical/json-ld-for-ai-search\",\"style\":{\"textDecoration\":\"none\"},\"data-related-article\":\"json-ld-for-ai-search\",\"data-related-position\":3,\"children\":[\"$\",\"div\",null,{\"className\":\"card\",\"children\":[[\"$\",\"span\",null,{\"className\":\"badge badge-green\",\"style\":{\"marginBottom\":8},\"children\":\"guide\"}],[\"$\",\"h3\",null,{\"style\":{\"fontSize\":15,\"fontWeight\":600,\"color\":\"var(--text-heading)\",\"marginBottom\":4},\"children\":\"JSON-LD for AI Search: Complete Guide\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":13,\"color\":\"var(--text-secondary)\",\"lineHeight\":1.5},\"children\":\"How to implement JSON-LD structured data so AI search engines and traditional search both understand your content's type, authorship, and entities.\"}]]}]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"2b:[\"$\",\"div\",null,{\"style\":{\"paddingLeft\":40},\"className\":\"toc-sidebar\",\"children\":[\"$\",\"nav\",null,{\"style\":{\"position\":\"sticky\",\"top\":88,\"fontSize\":13,\"lineHeight\":1.6,\"maxHeight\":\"calc(100vh - 100px)\",\"overflowY\":\"auto\"},\"children\":[[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"var(--font-mono)\",\"fontSize\":10,\"fontWeight\":600,\"textTransform\":\"uppercase\",\"letterSpacing\":2,\"color\":\"var(--color-cool-gray)\",\"marginBottom\":12},\"children\":\"On this page\"}],[[\"$\",\"a\",\"why-geo-is-a-developer-problem\",{\"href\":\"#why-geo-is-a-developer-problem\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":0,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"none\"},\"children\":\"Why GEO Is a Developer Problem\"}],[\"$\",\"a\",\"developer-checklist\",{\"href\":\"#developer-checklist\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":0,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"none\"},\"children\":\"Developer Checklist\"}],[\"$\",\"a\",\"infrastructure-one-time\",{\"href\":\"#infrastructure-one-time\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":16,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"1px solid var(--border-default)\"},\"children\":\"Infrastructure (one-time)\"}],[\"$\",\"a\",\"per-page-template-level\",{\"href\":\"#per-page-template-level\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":16,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"1px solid var(--border-default)\"},\"children\":\"Per-page (template-level)\"}],[\"$\",\"a\",\"build-pipeline\",{\"href\":\"#build-pipeline\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":16,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"1px solid var(--border-default)\"},\"children\":\"Build pipeline\"}],[\"$\",\"a\",\"implementation-five-concrete-pieces\",{\"href\":\"#implementation-five-concrete-pieces\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":0,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"none\"},\"children\":\"Implementation: Five Concrete Pieces\"}],[\"$\",\"a\",\"1-json-ld-schema-component\",{\"href\":\"#1-json-ld-schema-component\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":16,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"1px solid var(--border-default)\"},\"children\":\"1. JSON-LD Schema Component\"}],[\"$\",\"a\",\"2-llms-txt\",{\"href\":\"#2-llms-txt\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":16,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"1px solid var(--border-default)\"},\"children\":\"2. llms.txt\"}],[\"$\",\"a\",\"3-robots-txt-for-ai-crawlers\",{\"href\":\"#3-robots-txt-for-ai-crawlers\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":16,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"1px solid var(--border-default)\"},\"children\":\"3. Robots.txt for AI Crawlers\"}],[\"$\",\"a\",\"4-semantic-html-and-answer-first-prose\",{\"href\":\"#4-semantic-html-and-answer-first-prose\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":16,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"1px solid var(--border-default)\"},\"children\":\"4. Semantic HTML and Answer-First Prose\"}],[\"$\",\"a\",\"5-ci-validation\",{\"href\":\"#5-ci-validation\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":16,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"1px solid var(--border-default)\"},\"children\":\"5. CI Validation\"}],[\"$\",\"a\",\"framework-notes\",{\"href\":\"#framework-notes\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":0,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"none\"},\"children\":\"Framework Notes\"}],[\"$\",\"a\",\"monitoring-what-you-shipped\",{\"href\":\"#monitoring-what-you-shipped\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":0,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"none\"},\"children\":\"Monitoring What You Shipped\"}],\"$L31\",\"$L32\",\"$L33\",\"$L34\",\"$L35\",\"$L36\",\"$L37\"]]}]}]\n"])</script><script>self.__next_f.push([1,"2d:[\"$\",\"li\",\"/llms.txt\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/llms.txt\",\"className\":\"footer-link\",\"children\":\"llms.txt\"}]}]\n2e:[\"$\",\"li\",\"/ai.txt\",{\"children\":[\"$\",\"$L1a\",null,{\"href\":\"/ai.txt\",\"className\":\"footer-link\",\"children\":\"ai.txt\"}]}]\n2f:[\"$\",\"div\",null,{\"style\":{\"borderTop\":\"1px solid var(--color-teal-gray)\",\"paddingTop\":24,\"display\":\"flex\",\"justifyContent\":\"space-between\",\"alignItems\":\"center\",\"flexWrap\":\"wrap\",\"gap\":16},\"children\":[[\"$\",\"p\",null,{\"style\":{\"fontSize\":12,\"color\":\"var(--color-cool-gray)\"},\"children\":[\"© \",2026,\" Geodocs.dev. \",\"All rights reserved.\"]}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":12,\"color\":\"var(--color-cool-gray)\"},\"children\":[[\"$\",\"a\",null,{\"href\":\"mailto:contact@geodocs.dev\",\"className\":\"footer-link\",\"children\":\"contact@geodocs.dev\"}],\" · \",\"Built for humans and AI agents.\"]}]]}]\n30:[\"$\",\"style\",null,{\"children\":\"\\n .footer-link {\\n font-size: 13px;\\n color: var(--color-silver-teal);\\n text-decoration: none;\\n transition: color 0.2s ease;\\n }\\n .footer-link:hover {\\n color: var(--color-white);\\n }\\n \"}]\n"])</script><script>self.__next_f.push([1,"31:[\"$\",\"a\",\"common-mistakes\",{\"href\":\"#common-mistakes\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":0,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"none\"},\"children\":\"Common Mistakes\"}]\n32:[\"$\",\"a\",\"faq\",{\"href\":\"#faq\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":0,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"none\"},\"children\":\"FAQ\"}]\n33:[\"$\",\"a\",\"q-does-llms-txt-actually-do-anything-in-2026\",{\"href\":\"#q-does-llms-txt-actually-do-anything-in-2026\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":16,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"1px solid var(--border-default)\"},\"children\":\"Q: Does llms.txt actually do anything in 2026?\"}]\n34:[\"$\",\"a\",\"q-will-geo-replace-seo\",{\"href\":\"#q-will-geo-replace-seo\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":16,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"1px solid var(--border-default)\"},\"children\":\"Q: Will GEO replace SEO?\"}]\n35:[\"$\",\"a\",\"q-which-ai-crawlers-should-i-allow-in-robots-txt\",{\"href\":\"#q-which-ai-crawlers-should-i-allow-in-robots-txt\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":16,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"1px solid var(--border-default)\"},\"children\":\"Q: Which AI crawlers should I allow in robots.txt?\"}]\n36:[\"$\",\"a\",\"q-which-schema-type-should-i-prioritize\",{\"href\":\"#q-which-schema-type-should-i-prioritize\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":16,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"1px solid var(--border-default)\"},\"children\":\"Q: Which schema type should I prioritize?\"}]\n37:[\"$\",\"a\",\"q-do-i-need-both-a-sitemap-and-llms-txt\",{\"href\":\"#q-do-i-need-both-a-sitemap-and-llms-txt\",\"style\":{\"display\":\"block\",\"padding\":\"4px 0\",\"paddingLeft\":16,\"color\":\"var(--text-secondary)\",\"textDecoration\":\"none\",\"transition\":\"color 0.15s ease\",\"borderLeft\":\"1px solid var(--border-default)\"},\"children\":\"Q: Do I need both a sitemap and llms.txt?\"}]\n"])</script><script>self.__next_f.push([1,"12:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"38:I[27201,[\"/_next/static/chunks/0ld4q8u-25eux.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"/_next/static/chunks/0q_5ckv7l6e70.js\",\"/_next/static/chunks/148t.fhegq9f1.js\",\"/_next/static/chunks/05cra..ka3fzk.js\"],\"IconMark\"]\nf:null\n"])</script><script>self.__next_f.push([1,"14:[[\"$\",\"title\",\"0\",{\"children\":\"GEO for Developers: Technical Implementation Guide | Geodocs.dev\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"A developer-focused guide to implementing GEO: JSON-LD schema, llms.txt, semantic HTML, sitemap optimization, and CI validation for AI search visibility.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"keywords\",\"content\":\"GEO for developers,GEO technical implementation,developer AI search optimization,llms.txt setup,JSON-LD for AI search,AI crawler robots.txt\"}],[\"$\",\"link\",\"3\",{\"rel\":\"canonical\",\"href\":\"https://geodocs.dev/geo/geo-for-developers\"}],[\"$\",\"link\",\"4\",{\"rel\":\"alternate\",\"hrefLang\":\"en\",\"href\":\"https://geodocs.dev/geo/geo-for-developers\"}],[\"$\",\"link\",\"5\",{\"rel\":\"alternate\",\"hrefLang\":\"x-default\",\"href\":\"https://geodocs.dev/geo/geo-for-developers\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:title\",\"content\":\"GEO for Developers: Technical Implementation Guide\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:description\",\"content\":\"A developer-focused guide to implementing GEO: JSON-LD schema, llms.txt, semantic HTML, sitemap optimization, and CI validation for AI search visibility.\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"$\",\"meta\",\"9\",{\"property\":\"article:published_time\",\"content\":\"2025-04-25\"}],[\"$\",\"meta\",\"10\",{\"property\":\"article:modified_time\",\"content\":\"2026-04-28\"}],[\"$\",\"meta\",\"11\",{\"property\":\"article:author\",\"content\":\"Geodocs Team\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:title\",\"content\":\"GEO for Developers: Technical Implementation Guide\"}],[\"$\",\"meta\",\"14\",{\"name\":\"twitter:description\",\"content\":\"A developer-focused guide to implementing GEO: JSON-LD schema, llms.txt, semantic HTML, sitemap optimization, and CI validation for AI search visibility.\"}],[\"$\",\"link\",\"15\",{\"rel\":\"shortcut icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"link\",\"16\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0zl.ysuv3a32n.ico\",\"sizes\":\"48x48\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"17\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"link\",\"18\",{\"rel\":\"apple-touch-icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"$L38\",\"19\",{}]]\n"])</script></body></html>