GEO for HTML: Complete Implementation Guide
beginnerStatic HTML sites implement GEO through the head section: add complete meta tags, JSON-LD Article schema, canonical URL, and Open Graph tags. Add robots.txt and llms.txt to the root. No framework required — pure HTML is fully GEO-compatible and often faster than JS frameworks.
GEO for HTML: Complete Implementation Guide
Static HTML sites implement GEO through the head section: add complete meta tags, JSON-LD Article schema, canonical URL, and Open Graph tags. Add robots.txt and llms.txt to the root. No framework required — pure HTML is fully GEO-compatible and often faster than JS frameworks.
Plain HTML has a key advantage for GEO: AI crawlers receive static HTML directly with zero JavaScript execution required. No hydration, no client-side rendering issues, no framework overhead.
Complete HTML Head Block
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- BASICS -->
<title>How to Implement GEO in HTML | My Site</title>
<meta name="description" content="GEO in static HTML requires meta tags, JSON-LD, and semantic structure. Complete guide with examples.">
<meta name="author" content="My Company">
<link rel="canonical" href="https://yoursite.com/geo-html">
<!-- OPEN GRAPH -->
<meta property="og:type" content="article">
<meta property="og:title" content="How to Implement GEO in HTML">
<meta property="og:description" content="Complete GEO guide for static HTML">
<meta property="og:url" content="https://yoursite.com/geo-html">
<meta property="og:site_name" content="My Site">
<meta property="og:image" content="https://yoursite.com/og/geo-html.jpg">
<meta property="og:locale" content="en_US">
<!-- ARTICLE DATES (recency signal for AI scoring) -->
<meta property="article:published_time" content="2026-04-18T00:00:00Z">
<meta property="article:modified_time" content="2026-04-18T00:00:00Z">
<meta property="article:author" content="https://yoursite.com/author/my-company">
<meta property="article:section" content="Technical Guides">
<meta property="article:tag" content="GEO">
<!-- CRAWLER CONTROL -->
<meta name="robots" content="index, follow">
<!-- JSON-LD SCHEMA -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "How to Implement GEO in HTML",
"description": "Complete GEO guide for static HTML with meta tags and JSON-LD",
"author": {
"@type": "Organization",
"name": "My Company"
},
"publisher": {
"@type": "Organization",
"name": "My Site",
"logo": {
"@type": "ImageObject",
"url": "https://yoursite.com/logo.png"
}
},
"datePublished": "2026-04-18T00:00:00Z",
"dateModified": "2026-04-18T00:00:00Z",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://yoursite.com/geo-html"
}
}
</script>
</head>
Semantic Body Structure
<body>
<main>
<article>
<header>
<h1>How to Implement GEO in HTML</h1>
<time datetime="2026-04-18">April 18, 2026</time>
<address rel="author">My Company</address>
</header>
<section>
<h2>What meta tags does an HTML page need for GEO?</h2>
<!-- Answer capsule: direct answer in first paragraph -->
<p>
An HTML page needs at minimum: title, meta description under 160 chars,
canonical URL, complete Open Graph tags, article:published_time,
article:modified_time, and JSON-LD Article schema.
</p>
<!-- Extended explanation follows -->
</section>
<section>
<h2>How to add FAQPage schema to static HTML</h2>
<p>Add a second JSON-LD script block in the head for FAQPage schema.</p>
<!-- FAQ content follows -->
</section>
<footer>
<p>Sources: <cite>Princeton GEO Paper, arxiv.org/abs/2311.09735</cite></p>
</footer>
</article>
</main>
</body>
robots.txt
Place robots.txt at the root of your site (same level as index.html):
User-agent: GPTBot
Allow: /
User-agent: OAI-SearchBot
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: Claude-User
Allow: /
User-agent: Claude-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: Google-Extended
Allow: /
User-agent: BingBot
Allow: /
Sitemap: https://yoursite.com/sitemap.xml
Sitemap: https://yoursite.com/llms.txt
llms.txt
Place llms.txt at the root of your site:
# My Site Name
> One-line description of what your site does and who it serves.
## Main Content
- [GEO Guide](https://yoursite.com/geo-guide): Complete guide to Generative Engine Optimization
- [Technical Implementation](https://yoursite.com/technical): Meta tags, schema, and robots.txt
## About
- [About Us](https://yoursite.com/about): Team and credentials
XML Sitemap
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://yoursite.com/</loc>
<lastmod>2026-04-18</lastmod>
<priority>1.0</priority>
</url>
<url>
<loc>https://yoursite.com/geo-guide</loc>
<lastmod>2026-04-18</lastmod>
<priority>0.9</priority>
</url>
</urlset>
Update <lastmod> every time you update a page’s content. This is the primary recency signal AI crawlers use.
FAQPage Schema (Optional but High Impact)
Add this as a second <script type="application/ld+json"> block in the head when your page has Q&A sections:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is GEO?",
"acceptedAnswer": {
"@type": "Answer",
"text": "GEO (Generative Engine Optimization) is the practice of structuring content to be cited by AI engines like ChatGPT, Perplexity, and Google AI Overviews. It focuses on answer quality, schema markup, and direct response structure."
}
}
]
}
</script>
GEO Checklist for Static HTML
- Complete head block: title, description, canonical, author
- Open Graph: og:type=article, og:title, og:description, og:url, og:site_name, og:image, og:locale
- Article dates: article:published_time, article:modified_time
- JSON-LD Article schema with publisher and dates
- Semantic body: article, header, section, time, address, footer, cite
- robots.txt at root with all 8 AI crawlers allowed
- llms.txt at root with site description and page listing
- XML sitemap with lastmod dates
- Inverted pyramid content structure
- Core Web Vitals: LCP < 2.5s, INP < 200ms, CLS < 0.1