---
name: static-encyclopedia-geo-optimization
slug: static-encyclopedia-geo-optimization
description: >-
  Complete GEO (Generative Engine Optimization) pipeline for static HTML
  industry encyclopedia sites. 7-module SOP adapted from the AI Traffic +471%
  methodology — batch optimizes 100+ static HTML pages for AI search
  visibility (ChatGPT Search, Perplexity, Gemini, Claude).
version: 1.1.0
tags: [geo, generative-engine-optimization, static-html, seo, ai-search,
  schema, eeat, semantic-html, batch-processing]
---

# Static Encyclopedia GEO Optimization Pipeline

Batch GEO optimization for static HTML industry encyclopedia sites (lighting, packaging, furniture, etc.). Based on the 7-module GEO SOP methodology proven to increase AI Platform traffic by +471%.

## When This Skill Is Relevant

Trigger when:
- User has a static HTML encyclopedia site (e.g. `/encyclopedia/lighting/`)
- User wants to optimize 100+ pages for AI search visibility
- Need to batch-apply SEO/GEO improvements across an entire site
- Building a new vertical encyclopedia and want to start GEO-ready from day 1

## ⚠️ Critical Constraint: "Public Content Only Shows Results, Not Methods"

When the user asks about what GEO optimization does for their clients / public-facing content, **never describe the technical steps or tools used**. Only describe the **results and outcomes**:

- ❌ "We added FAQPage Schema to 21 pages and Quick Answer boxes to 115 pages"
- ✅ "Your encyclopedia content is now structured so AI search engines can directly extract and cite your information"

- ❌ "We replaced div tags with semantic HTML elements like main, article, aside"
- ✅ "Your pages are technically optimized for AI crawlers to better understand and prioritize your content"

- ❌ "We set up a cron job at 9 AM to generate articles and your local agent publishes at 10 AM"
- ✅ "Content creation and multi-platform distribution are fully automated"

This constraint applies to: step-by-step instructions, specific tool names, architecture details, and technical implementation methods.

## Architecture

The encyclopedia is a static HTML site in a directory structure:
```
/var/www/[domain]/landing/encyclopedia/[topic]/
├── index.html
├── products/
│   ├── index.html
│   └── led-downlights-guide.html
├── parameters/
├── scenes/
├── troubleshooting/
├── standards/
├── research/
├── us/ (city directories — skip)
├── answers/ (GEO Prompt pages — NEW)
├── sitemap.xml
├── llms.txt
└── llms-full.txt
```

## The 7-Module GEO SOP

### Module 1: Optimization Goals & Metrics

Define measurable outcomes before starting:

| Metric | Source | Target |
|--------|--------|--------|
| AI Platform referral traffic | GA4 (filter by platform) | +50% in 30 days |
| AI mention rate | Batch Prompt testing | Brand appears in 60%+ of relevant prompts |
| Schema coverage | grep scan of HTML files | 95%+ of content pages |
| llms.txt completeness | Check for all categories | All sections listed with direct URLs |
| sitemap coverage | URL count vs file count | 1:1 ratio |

### Module 2: Page Type Matrix

Categorize pages by GEO value:

| Type | Example | Schema | Priority |
|------|---------|--------|----------|
| **Product guides** | `products/led-downlights-guide.html` | Article, HowTo | T1 |
| **Technical parameters** | `parameters/color-temperature-cct-explained.html` | Article, FAQPage | T1 |
| **Scene/application guides** | `scenes/bedroom-lighting-ideas.html` | Article | T1 |
| **Troubleshooting guides** | `troubleshooting/led-flickering-causes.html` | FAQPage, HowTo | T1 |
| **Standards & compliance** | `standards/ce-marking-lighting-guide.html` | Article | T1 |
| **Research articles** | `research/*` | Article, ScholarlyArticle | T2 |
| **GEO Prompt pages** | `answers/*` (NEW) | FAQPage | T2 |
| **City directories** | `us/new-york-lighting-stores.html` | LocalBusiness | T3 (skip QA/structure) |
| **Index pages** | `*/index.html` | CollectionPage | Skip content optimization |
| **Utility pages** | `about/`, `contact/`, `privacy/` | WebPage | Skip content optimization |

### Module 3: Batch Content Optimization (Pipeline)

This is the core. Run in this order:

#### Step 1: SEO Title & Meta Description Batch Rewrite
```python
# Script pattern: iterate all HTML files, skip index pages and city directories
# For each page:
#   1. Extract existing title and description
#   2. If title matches generic template pattern → rewrite with SEO keywords
#   3. If meta description is missing or generic → add keyword-rich description
#   4. Use category-based templates:
#     - products: "LED [Product] Guide: [Key Features] & [Benefits]"
#     - troubleshooting: "[Problem] Fix: [Solution] & [Steps]"
#     - parameters: "[Parameter] Guide: [Key concepts] & [Applications]"
#     - scenes: "[Room/Scene] Lighting Guide: [Design tips] & [Selection]"
```

**Generic template detection:**
- Title starts with "Neutral," or "LED Lighting" without Guide/Best
- Meta description starts with generic phrases
- Title under 20 chars or over 70 chars

#### Step 2: Structured Data (JSON-LD) Batch Injection

Three schema types based on page category:

| Category | Schema Type | Key Properties |
|----------|-------------|----------------|
| Products | TechArticle | name, description, category |
| Parameters | Article + FAQPage | mainEntity (array of Question/Answer) |
| Troubleshooting | FAQPage | mainEntity (each H2 becomes a Question) |
| Scenes | Article | name, description, image |
| Standards | Article | name, description, about |
| Research | ScholarlyArticle | name, description, datePublished |
| City directories | ItemList, LocalBusiness | itemListElement, address |
| All pages | BreadcrumbList | itemListElement with position |

**FAQPage generation logic:**
```python
# For troubleshooting pages: auto-extract H2 headings as Questions
# Extract first paragraph under each H2 as Answer
# Store in JSON-LD format
faq_items = []
for h2 in page.find_all('h2'):
    question = h2.get_text(strip=True)
    next_p = h2.find_next('p')
    if next_p and next_p in content_area:
        answer = next_p.get_text(strip=True)[:200]
        faq_items.append({"@type":"Question", "name":question, ...})
```

**Automatic FAQ dictionary** — for pages where H2 extraction fails (too few, non-question format), use a topic-based FAQ dictionary:
```python
auto_faq = {
    'troubleshooting': [
        {"q": "What causes [topic]?", "a": "..."},
        {"q": "How to fix [topic]?", "a": "..."},
    ],
    'products': [
        {"q": "What is [product]?", "a": "..."},
        {"q": "How to choose [product]?", "a": "..."},
    ],
    ...
}
```

#### Step 3: Quick Answer Box Injection

Insert a blue-tinted "Quick Answer" box at the top of the content area, before the first H2:

```python
# Pattern: extract first 1-2 sentences of the first meaningful paragraph
# Wrap in a div with class="quick-answer" and distinct styling
quick_box = f'''<div class="quick-answer" style="background:#f0f7ff;
  border-left:4px solid #0d6efd;padding:16px 20px;margin:20px 0;
  border-radius:0 8px 8px 0;">
  <strong style="color:#0d6efd;">Quick Answer</strong>
  <p>{first_two_sentences}</p>
</div>'''
```

**Skip:** City directories, index pages, utility pages (about/contact/privacy).

#### Step 4: E-E-A-T Signals Injection

Add to each content page's meta area:
```
<span>📅 Published: YYYY-MM-DD</span>
<span>🔄 Updated: YYYY-MM-DD</span>
<span>✍️ Author: GEO · Compare2Best [Topic] Team</span>
<span>🔗 Sources: [Industry sources relevant to topic]</span>
```

Update `<meta property="article:modified_time">` to current date for freshness signal.

#### Step 5: Internal Link Network

Add related articles section at bottom of each page:
```python
# For each page, find semantically related pages:
# - Same category: other products link to each other
# - Cross-category: product → parameters → troubleshooting
# Example: led-strip-lights-guide links to:
#   - voltage-drop-led-strip (troubleshooting)
#   - led-strip-not-sticking (troubleshooting)
#   - dimmable-led-bulbs-guide (troubleshooting)
```

**Semantic linking rules:**
```python
# Define topic clusters
clusters = {
    "dimmer": ["dimmer-incompatibility", "dimmable-led-bulbs-guide", "dimmable-lights-guide", "triac-dali-dmx-diming"],
    "cct/color": ["color-temperature-cct-explained", "warm-white-vs-cool-white-led", "color-rendering-metrics", "color-tolerance-sdcm"],
    "driver": ["led-driver-complete-guide", "led-driver-failure-signs", "led-driver-vs-transformer"],
    # ... etc
}

# For each page, find its cluster → pick 3-5 related pages
# Ensure cross-category links (products → troubleshooting → parameters)
```

#### Step 6: Semantic HTML Tag Replacement

Replace generic `<div>` wrappers with semantic HTML5 elements:

| Original | Replacement | Purpose |
|----------|-------------|---------|
| `<div class="container">` | `<main class="container">` | Main content landmark |
| `<div class="breadcrumb">` | `
<!-- HEADER -->

<!-- HEADER -->

<!-- HEADER -->

<!-- HEADER -->

<!-- HEADER -->
<nav class="nav" id="navbar">
  <div class="nav__inner">
    <a href="/" class="nav__logo"><span class="nav__logo-icon">T</span>GEO · Compare2Best</a>
    <ul class="nav__links">
      <li><a href="/" class="nav__link">Home</a></li>
      <li><a href="/geo-wiki/" class="nav__link">GEO Wiki</a></li>
      <li><a href="/b2b-practice/" class="nav__link">B2B Cross-Border</a></li>
      <li><a href="/ai-watch/" class="nav__link">AI Search Watch</a></li>
      <li><a href="/reports/" class="nav__link">Trend Reports</a></li>
      <li><a href="/academy/" class="nav__link">Academy</a></li>
      <li><a href="/about" class="nav__cta">Free Audit →</a></li>
    </ul>
    <button class="nav__toggle" aria-label="Menu"><span></span><span></span><span></span></button>
  </div>
</nav>
<script>document.querySelectorAll('.nav__link').forEach(function(a){if(a.getAttribute('href')===location.pathname||(location.pathname!=='/'&&a.getAttribute('href')!=='/'&&location.pathname.startsWith(a.getAttribute('href')))){a.classList.add('nav__link--active')}});</script>
<script>const navbar=document.getElementById('navbar');window.addEventListener('scroll',function(){navbar.classList.toggle('scrolled',window.scrollY>50)});</script>
<!-- /HEADER -->

<script>document.querySelectorAll('.nav__link').forEach(function(a){if(a.getAttribute('href')===location.pathname||(location.pathname!=='/'&&a.getAttribute('href')!=='/'&&location.pathname.startsWith(a.getAttribute('href')))){a.classList.add('nav__link--active')}});</script>
<script>const navbar=document.getElementById('navbar');window.addEventListener('scroll',function(){navbar.classList.toggle('scrolled',window.scrollY>50)});</script>
<!-- /HEADER -->

<script>document.querySelectorAll('.nav__link').forEach(function(a){if(a.getAttribute('href')===location.pathname||(location.pathname!=='/'&&a.getAttribute('href')!=='/'&&location.pathname.startsWith(a.getAttribute('href')))){a.classList.add('nav__link--active')}});</script>
<script>const navbar=document.getElementById('navbar');window.addEventListener('scroll',function(){navbar.classList.toggle('scrolled',window.scrollY>50)});</script>
<!-- /HEADER -->

<script>document.querySelectorAll('.nav__link').forEach(function(a){if(a.getAttribute('href')===location.pathname||(location.pathname!=='/'&&a.getAttribute('href')!=='/'&&location.pathname.startsWith(a.getAttribute('href')))){a.classList.add('nav__link--active')}});</script>
<!-- /HEADER -->

<script>document.querySelectorAll('.nav__link').forEach(function(a){if(a.getAttribute('href')===location.pathname||(location.pathname!=='/'&&a.getAttribute('href')!=='/'&&location.pathname.startsWith(a.getAttribute('href')))){a.classList.add('nav__link--active')}});</script>
<!-- /HEADER -->

<section class="hero">
  <div class="hero__badge"><span class="hero__badge-dot"></span> GEO · Compare2Best</div>
  <h1 class="hero__title"><span>\n', ''),
    ('\n\n\n\n

...GA4 + SEO meta...

...navigation...

  ...
  Question as title</span></h1>
  <p class="hero__desc"></p>
</section>
\n<h2'),
    # wrap content div
    ('<div class="content">', '<article class="content">'),
    ('</div>\n\n<!-- Related Articles', '</article>\n\n<!-- Related Articles'),
    # wrap related articles div
    ('<div class="related-articles"', '<aside class="related-articles"'),
]
```

### Module 4: GEO Prompt Pages (Incremental)

Create targeted `/answers/` directory pages that directly answer specific AI search prompts:

**Page types to create:**

| Type | Example | Structure | Schema |
|------|---------|-----------|--------|
| **What-is question** | `answers/best-color-temperature-bedroom.html` | Quick Answer + table + explanation + FAQ | FAQPage |
| **How-to guide** | `answers/fix-led-flickering.html` | 6-step with diagnostic boxes + flowchart | HowTo |
| **VS comparison** | `answers/led-vs-incandescent-vs-cfl.html` | Comparison table + cost analysis + verdict | ItemList |

**Template structure:**
```html
<!DOCTYPE html>
<html lang="en">
<head>...GA4 + SEO meta...</head>
<body>
<header>...navigation...</header>
<main>
  <nav aria-label="breadcrumb">...</nav>

  <h2>Question as title</h2>
  <div class="meta">Author + dates + sources</div>
  <article class="content">
    <div class="quick-answer">Direct answer in 1-2 sentences</div>
    <h2>Detailed Answer</h2>
    ... tables, lists, steps ...
    <h2>FAQ</h2>
  </article>
  <aside>Related articles</aside>
</main>

<!-- FOOTER -->

<!-- FOOTER -->

<!-- FOOTER -->

<!-- FOOTER -->

<!-- FOOTER -->
<footer class="footer">
  <div class="footer__inner">
    <div class="footer__brand">
      <div class="footer__logo"><span class="nav__logo-icon" style="width:28px;height:28px;font-size:14px">T</span> GEO · Compare2Best</div>