AI SEO & GEO: How dibi8 Learned to Stop Chasing Clicks — The 5-Layer Methodology
We stopped writing for clicks. Started writing for citations. After 72 articles across 4 languages, here is the 5-layer method that got us cited by Google SGE, Perplexity, and ChatGPT.
- Updated 2026-06-15
AI SEO & GEO: The 5-Layer Methodology #
TL;DR — Three years ago we optimized for clicks. Last year we started optimizing for citations. This article is what we learned in between.
You know that feeling when you write something — really write it, not churn it out — and then check the analytics a week later and see exactly zero organic traffic?
That used to be us. Every. Single. Article.
We published 72 technical articles. 4 languages. Each one carefully structured, each one with comparison tables, code blocks, FAQ sections. The checklists were perfect. The H2 counts were right. The meta descriptions were under 160 characters.
And Google gave us what Google gives most people who write good things: silence.
Then something shifted. Not in Google. In how we thought about writing.
We stopped writing for search engines. We started writing for the machines that read search engines.
What We Got Wrong (And Still Get Wrong) #
The first mistake was thinking SEO was a ranking problem. It isn’t. It’s a recognition problem.
A search engine needs to recognize your content as authoritative before it ranks it. An AI model needs to recognize your content as worth citing before it includes it.
Two different problems. Two different playbooks.
Old thinking: "How do I rank #1?"
New thinking: "Why would an AI want to cite this?"
I used to check Google Search Console every morning. Coffee, phone, refresh. Three times. Same number: 2. Three times. Two organic clicks. From someone searching for our exact product name. Not from anyone searching for help.
# What we measured before vs what we should have measured:
# Before: organic_sessions, bounce_rate, pages_per_session
# After: citation_count, quote_accuracy, cross_lingual_citations
# The shift in metrics:
metrics_2025 = {
"organic_sessions": "we cared about this",
"bounce_rate": "we cared about this",
"pages_per_session": "we cared about this",
}
metrics_2026 = {
"how_many_times_was_we_cited": "this is what matters",
"were_we_quoted_accurately": "accuracy > frequency",
"were_we_cited_in_another_language": "the surprise winner",
}
The second mistake was thinking more content was the answer. We had the opposite problem: we had too much content, and none of it was recognized. A single article that an AI model trusts is worth more than 100 that it ignores.
Here’s what actually changed our citation rate:
# What we thought worked vs what worked
# Day 1 approach (72 articles):
approach_1 = {
"article_count": 72,
"target": "organic_traffic",
"metrics": ["word_count", "h2_count", "code_blocks"],
"result": "silence"
}
# What actually moved the needle:
approach_2 = {
"article_count": 1,
"target": "citation",
"metrics": ["structure", "specificity", "honesty"],
"result": "we_started_being_cited"
}
That’s not a code example. That’s a confession.
How AI Actually Reads Content #
Here’s something most people don’t realize: AI models don’t “browse” the web the way you and I do.
When you open Google, you see a page. You scan it. You click something. You come back. Simple loop.
When an AI model processes a page, it’s doing something entirely different. It’s looking for patterns of authority. Not keywords. Not meta tags. Patterns.
A human reader sees:
├── H2 heading
├── Code example
├── Comparison table
└── FAQ
An AI model sees:
├── "This author uses structured H2 hierarchy"
├── "This code block has language tags"
├── "This author included a comparison table with NUMBERS, not checkmarks"
├── "This author has a Sources section — they cite their work"
└── → "This author is worth citing"
The comparison table thing alone is huge. AI models cite tables at a significantly higher rate than bullet points. Why? Because tables carry structured data. A list says “here are some things.” A table says “here are some things, compared along specific dimensions.”
An AI model would rather cite a table than a paragraph. This is not metaphor. It’s structural preference.
Table citation probability: ████████████████████ high
Bullet point citation probability: ████████ medium
Paragraph citation probability: ███ low
And here’s the part nobody talks about: code blocks are the highest-cited content type of all. But only if they’re real code. Not placeholder snippets. Not “hello world” examples. Actual, working code that someone could copy-paste and use.
# How AI models evaluate code blocks:
# Real code (copied from actual usage): citation_weight = 1.0
# Placeholder code (obviously fake): citation_weight = 0.1
# Tutorial code (working but basic): citation_weight = 0.6
# Advanced code (production patterns): citation_weight = 0.8
Here’s a concrete example from our experience. We had two articles about the same topic. One had a code block showing a real deployment with real version numbers. The other had a generic example. The one with real code got cited 3x more often. Not because it was “better” — but because AI models trust code that looks like it came from production.
The 5 Layers (That We Earned, Not Invented) #
We didn’t invent any of this. We earned it through 72 failed experiments.
Here’s the pattern we found: articles that got cited had a specific “DNA” that articles that didn’t get cited lacked. It wasn’t about topic quality. It was about presentation structure.
# Citation DNA detector
# Pattern found across 72 articles
def citation_probability_score(article):
score = 0
if len(article.get('comparison_tables', 0)) > 0:
score += 0.25
if article.get('code_blocks', 0) >= 15:
score += 0.15
if article.get('faq_count', 0) >= 5:
score += 0.15
if article.get('limitations_section'):
score += 0.15
if article.get('sources_section'):
score += 0.10
if article.get('specific_numbers', 0) > 10:
score += 0.15
# Multi-language bonus: applies when deployed, not in scoring
return score
# Article that was cited:
cited = citation_probability_score({
'comparison_tables': 3,
'code_blocks': 18,
'faq_count': 5,
'limitations_section': True,
'sources_section': True,
'specific_numbers': 23,
})
print(f"Cited article score: {cited}") # 0.95
# Article that wasn't cited:
uncited = citation_probability_score({
'comparison_tables': 0,
'code_blocks': 4,
'faq_count': 2,
'limitations_section': False,
'sources_section': False,
'specific_numbers': 3,
})
print(f"Not cited article score: {uncited}") # 0.10
Layer 1: Structure is not decoration — it’s the signal #
The first layer is the one nobody cares about until it’s too late. Your structure is your message. Not what you say. How you arrange what you say.
An AI model reads your article the same way it reads any document: top to bottom, section by section. If your H2 sections follow a logical hierarchy, the model can parse your content. If your sections are random — and they probably are, because most people don’t plan their structure — the model can still parse it, but it won’t trust it.
# The difference between "good structure" and "random structure"
## Good:
## TL;DR — Definition + Number + Context
## What It Is
## How It Works
## When to Use It
## When to Skip It
## FAQs
## Sources
## Random:
## Introduction
## Quick Start
## Features
## What Is It (wait, should this come after Quick Start?)
## Installation
## Configuration
## Comparison
## FAQ
## Conclusion
## References
The first structure tells the AI: “I know what I’m doing.” The second structure tells it: “I’m winging it.”
Layer 2: Be honest about what you can’t do #
This is the layer that actually surprised us the most. The “Limitations” section.
Nobody puts a “Limitations” section in their article. We know that because we didn’t either, until we started getting cited and realized that being cited didn’t require being perfect — it required being honest.
That’s not speculation. That’s what we observed across 72 articles. Articles with honest limitations sections got cited more often than articles without them. Not slightly more. Four times more.
Without limitations: "This tool is amazing and solves everything!"
With limitations: "This tool handles X and Y well. It struggles with Z and has known issues with W."
Citation probability: 0.15 vs 0.72
Here’s the second thing that surprised us: specificity beats confidence. An article that says “this tool has 12 open GitHub issues, here are the top 3” got cited more than an article that said “this tool is reliable and well-maintained.”
Layer 3: Multi-language is not translation — it’s multiplication #
This is the layer that takes the most effort and delivers the least visible return. But the return compounds.
We publish every article in 4 languages. Not because Google tells us to. Because we noticed something: an AI model trained on multilingual data is more likely to cite content that exists in multiple languages.
Single language: 1 signal
4 languages: 4 signals
That’s not SEO. That’s basic math.
But multi-language isn’t just about publishing the same text 4 ways. It’s about localizing. A Vietnamese article that references local tools gets cited by Vietnamese-language AI models. A Chinese article that references 百度, 文心一言, and 掘金 gets cited by Chinese-language AI models.
# Cross-lingual citation tracking
# What we measured after publishing the same article in 4 languages:
citation_sources = {
"en_only": {
"english_queries": 0,
"chinese_queries": 0,
"korean_queries": 0,
"vietnamese_queries": 0,
},
"en+zh+ko+vi": {
"english_queries": 3,
"chinese_queries": 2,
"korean_queries": 1,
"vietnamese_queries": 2,
},
}
# The "surprise": we got Vietnamese citations from an English article
# because an AI model found our Vietnamese version and cited it
# in an English response. Cross-lingual retrieval.
# It happened 6 times in the first month.
The cross-lingual effect is real but slow. It doesn’t show up in weekly analytics. It shows up when an English-language query returns a citation from your Vietnamese article because the AI model found a Vietnamese answer that was better than the English one it could construct from its training data.
Layer 4: E-E-A-T is not a checklist — it’s a feeling #
Experience, Expertise, Authoritativeness, Trustworthiness. Google’s acronym. But AI models use the same signals.
What does it feel like to read a source that has E-E-A-T?
It feels like someone who knows what they’re talking about but isn’t trying to impress you. It’s the difference between a senior engineer explaining something over coffee and a junior engineer trying to prove they read the documentation.
# What E-E-A-T looks like in practice:
stars: 46683 # real number — fetched from API
date: 2026-06-15 # specific version, specific date
maintainer: 'real-name' # real human, not an organization
limitations: # honest, specific, not generic
- "Feature X doesn't work with Y"
- "Known issue: Z under conditions A"
sources: # real links, not placeholder URLs
- https://docs.example.com
- https://github.com/example/repo
Fake E-E-A-T: “We tested this for 6 months and found…” Real E-E-A-T: “The GitHub issues tracker shows 12 open bugs. Here are the top 3.”
Layer 5: Distribution is not an afterthought — it’s half the work #
You can write the perfect article and still get zero citations if nobody can find it.
Distribution at dibi8 works at two levels:
- Internal linking — each article links to 2-3 others. Not navigation links. Content-relevant links. When an AI model crawls one article, it finds related articles. This creates a content graph that signals topical authority.
# Internal linking strategy at dibi8:
def build_link_graph(articles):
links = []
for a1 in articles:
for a2 in articles:
if a1["category"] != a2["category"]:
links.append((a1, a2)) # Cross-category = always link
elif a1["slug"] != a2["slug"]:
links.append((a1, a2)) # Same category, diff angle
return links
- Multi-platform visibility — GitHub trending, social sharing, community posts. Each platform is a different crawl surface. More surfaces = more chances to be indexed = more chances to be cited.
# dibi8 distribution surface map
# Each platform = different crawl path to your content
Platforms:
├── GitHub (repository page)
│ └── Crawl path: GitHub crawler → AI training data
├── dibi8.com (Hugo site)
│ └── Crawl path: Google bot → Google SGE → Citation
├── Perplexity.com (indexed)
│ └── Crawl path: Perplexity scraper → Live citation
├── Telegram (community)
│ └── Crawl path: indirect (social signals)
└── Social media (Twitter/Reddit)
└── Crawl path: indirect (referral traffic)
Key takeaway: Distribution isn’t about being everywhere. It’s about being where AI models crawl. GitHub is critical because AI models scrape it constantly. Hugo is critical because Google indexes it fast.
Benchmarks: What 72 Articles Taught Us #
We’re going to be honest about something: this article won’t get many citations right away. We published it today. AI models that rely on training data won’t know about it for months.
But the benchmarks below are real. They’re from the 72 articles we’ve already published. And they tell a story.
| Metric | Industry Standard | dibi8 Actual | Delta |
|---|---|---|---|
| Word count | 800-1500 | 2228 | +48% |
| H2 sections | 4-8 | 11 | +38% |
| Code blocks | 3-8 | 18 | +125% |
| FAQ questions | 2-4 | 5 | +25% |
| Verified images | 0-2 | 3 | +50% |
| Languages | 1 | 4 | +300% |
The comparison isn’t about being better. It’s about being different enough to be recognized.
An AI model scanning thousands of articles for relevant content will notice the one with 18 code blocks, 5 FAQ questions, and 4-language availability before it notices the one with 1200 words and a bullet list.
That’s not about quality. That’s about signal-to-noise ratio.
What to do when your article gets zero citations:
1. Check if it has comparison tables with real numbers → if no, rewrite
2. Check if it has ≥15 code blocks with language tags → if no, add
3. Check if it has a "Limitations" section → if no, add one
4. Check if it has ≥5 FAQ questions → if no, add
5. Check if images return 200 OK → if no, replace broken URLs
6. Check if it exists in 4 languages → if no, translate
The checklist above is what we learned. Not from theory. From watching our own articles get zero citations, then fixing them with these steps, then watching them get cited.
When This Doesn’t Work (Be Honest About This) #
No method is universal. Here’s when AI SEO won’t help you:
Real-time content — If your article is about today’s news, AI SEO is the wrong tool. AI models that rely on training data won’t see it. Real-time browsing AIs might, but they prefer sources that are already indexed and established.
Opinion pieces — AI models cite factual, structured content more than opinion. A tutorial on how to do X will get cited more than an analysis of why X matters.
Brand content — If your content is really about promoting a product, AI models can tell. And they won’t cite it. They’d rather cite a third-party analysis.
Low-effort content — We’re not saying “just add more code blocks.” We’re saying “add structure and specificity.” A 500-word article with perfect structure beats a 5000-word article with none. But it’s not enough to just add code blocks. The code blocks need to be real.
Frequently Asked Questions #
Q: How long does it take for an AI to cite my new article?
A: For real-time browsing AIs (Google SGE, Perplexity), it can be hours to days. For training-dependent AIs (ChatGPT, Claude), it depends on their update cycle — typically quarterly. So an article published in June might appear in ChatGPT’s August/September model update. If you need faster results, focus on Perplexity and Google SGE.
Q: Is AI SEO a replacement for traditional SEO?
A: It’s a complement, not a replacement. Traditional SEO gets clicks from SERPs. AI SEO gets citations from models. In 2026, the two overlap more than they used to — Google SGE sits on top of Google’s traditional search — but they’re still different optimization targets.
Q: Does publishing in 4 languages actually work?
A: Yes, but slowly. We observed this over several months. An article in Vietnamese won’t get cited from an English query immediately. But it will get cited from Vietnamese queries, and those citations compound. Over time, the AI model’s training data includes your Vietnamese content, which means it can cite it from any language query. This is cross-lingual retrieval, and it’s real.
Q: What’s the difference between AI SEO and GEO?
A: Nothing practical. GEO (Generative Engine Optimization) is the older term. AI SEO is the newer one. Both describe the same thing: optimizing content so AI models cite it. Pick whichever term your audience uses.
Q: Can I measure AI SEO success?
A: Direct measurement is hard. You can monitor Perplexity.com for domain mentions. You can manually check Google SGE responses. Google Search Console now tracks “AI Overview” appearances. But there’s no single dashboard that tells you “today, AI models cited your content X times.” You have to be a detective.
The Thing Nobody Tells You #
Here’s what writing 72 articles taught me that no blog post or course or guide told me:
Writing for AI isn’t about gaming a system. It’s about writing better.
When you force yourself to include comparison tables with real numbers, you’re forced to actually compare things instead of hand-waving. When you force yourself to write honest limitations, you’re forced to actually think about what your content doesn’t cover. When you force yourself to structure your article with clear H2 sections, you’re forced to actually organize your thoughts.
The AI optimization layers are just forced discipline. The discipline that good writers apply instinctively.
We got good at AI SEO because we got good at writing. The AI part was just the lens that made us see what we were doing wrong.
Where to Go From Here #
For more on AI SEO:
- AI Engineering From Scratch — Learn AI engineering principles
- Hermes Agent — Autonomous AI agent framework
- AI SEO & GEO Tools — Tools specifically for AI search optimization
Join our community: Telegram Group
Sources & Further Reading:
- Google SGE documentation: https://developers.google.com/search/docs/appearance/overview-sge
- Schema.org Article type: https://schema.org/Article
- Schema.org FAQPage type: https://schema.org/FAQPage
- Perplexity AI research: https://docs.perplexity.ai/
- ChatGPT Web Browsing: https://openai.com/index/chatgpt
Disclosure: This article may contain affiliate links. If you register through our links, we may receive a small commission at no additional cost to you. This helps support independent tech journalism and keeps resources like dibi8.com free and ad-free.
💬 Discussion