
AIを活用した検索エンジンやチャットインターフェースの台頭により、従来の検索エンジン最適化(SEO)だけではもはや不十分です。開発者は、質問の回答、コードスニペットの検索、問題のデバッグにAIを利用することが増えています。ChatGPT、Perplexity、Claude、GoogleのAI Overviewsは、多くの技術的なクエリにとって最初の情報源となっており、これらはメタタグを完全に迂回します。
この新しい世界で、技術文書、ライブラリ、エンジニアリングブログを見つけやすくしたいのであれば、**生成エンジン最適化(GEO)**が必要です。これは、AIモデルがコンテンツを正確に解析し、統合し、自信を持って引用できるようにコンテンツを構造化する実践です。
GEOは、AIのためのキーワードスタッフィングではありません。トレーニングセットを不正に操作することでもありません。「2026年現在」のような記述をあらゆる場所に追加することでもありません。
GEOは、以下の構造でコンテンツを作成することです。
このように考えてみてください。ドキュメントを処理するLLMは、「この情報源を自信を持って引用できるか?」という質問に答える必要があります。あなたの仕事は、その答えをイエスにすることです。
今すぐ追加できる最もシンプルなGEOシグナルは、llms.txtです。これは、サイトのルートにあるプレーンテキストファイルで、AIクローラーにサイトの内容と最も重要なページを伝えます。
robots.txtに触発され、2024年にJeremy Howardによって提案され、現在ではPerplexityやAnthropicのClaude.mdを含むいくつかのAIクローラーでサポートされています。
# llms.txt for locionic.com
# Updated: 2026-09-22
> Locionic is a Python and AI backend engineering blog by Loc Tran.
> Topics: Python, FastAPI, RAG, vector databases, DevOps, Kubernetes, data engineering.
## Key Pages
- [Blog index](https://locionic.com/en/blog): All technical posts
- [Vector databases and RAG](https://locionic.com/en/blog/vector-databases-rag): Core RAG architecture guide
- [Python async profiling](https://locionic.com/en/blog/python-async-memory-leak-profiling): Memory leak detection in async Python
- [FastAPI vs Litestar](https://locionic.com/en/blog/fastapi-vs-litestar-comparison): Framework comparison
## Optional: Full content index
- [All posts](https://locionic.com/sitemap.xml)
クローラーに完全なコンテンツを取り込ませたいサイトでは、llms-full.txtも作成してください。一部のクローラー(Perplexityなど)は、最小限のバージョンよりもこちらを好みます。
ファイルを作成する:
touch public/llms.txt
# Then verify it's accessible:
curl https://yourdomain.com/llms.txt
GEOと従来のSEOが最も明確に重なるのは、構造化データです。AIクローラーとGoogleのAI Overviewsの両方が、ArticleまたはTechArticle JSON-LDを含むページを強く推奨しています。
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "Generative Engine Optimization for Technical Docs",
"datePublished": "2026-08-04",
"dateModified": "2026-09-22",
"author": {
"@type": "Person",
"name": "Loc Tran",
"url": "https://locionic.com"
},
"publisher": {
"@type": "Organization",
"name": "Locionic"
},
"description": "How to structure developer documentation so AI search engines cite your content accurately.",
"articleSection": "Technical Documentation",
"keywords": ["GEO", "technical writing", "AI search", "documentation"],
"proficiencyLevel": "Expert"
}
TechArticleタイプ(一般的なArticleと比較して)は、これが技術コンテンツであることをクローラーに明示的に伝え、AIモデルがそれを分類し、ルーティングする方法を改善します。
最も影響の大きいGEOの変更は、Q&Aペアにきれいにマッピングされる方法で書くことです。AIモデルは、質問応答データセットでファインチューニングされています。この形式に自然に一致するコンテンツは、より頻繁に引用されます。
「データベースのインデックス作成には多くの方法があります。開発者は、クエリパターンに応じてB-treeとハッシュインデックスのどちらを使うか議論することがよくあります。」
B-treeインデックスとハッシュインデックスの違いは何ですか?
B-treeインデックスは範囲クエリ(
WHERE price > 100)とソートをサポートします。ハッシュインデックスは等価検索(WHERE id = 42)のみをサポートしますが、完全一致の場合は高速です。PostgreSQLはデフォルトでB-treeを使用します。ハッシュインデックスは、排他的に完全一致をクエリする場合にのみ使用してください。
2番目のバージョンは、そのまま抽出可能です。LLMは自信を持って引用できます。最初のバージョンは言い換えが必要であり、エラーを招き、引用される可能性を低くします。
AIモデルはコンテキストから学習します。不完全なスニペットは、モデルに不完全な回答を生成するように学習させます。常に以下を提供してください。
# GEO-optimized example: Complete, runnable, with expected output
from fastapi import FastAPI
from pydantic import BaseModel
import uvicorn
app = FastAPI()
class Item(BaseModel):
name: str
price: float
@app.post("/items", response_model=Item)
async def create_item(item: Item) -> Item:
return item
# Run with: uvicorn main:app --reload
# Test: curl -X POST http://localhost:8000/items \
# -H "Content-Type: application/json" \
# -d '{"name": "widget", "price": 9.99}'
# Expected: {"name":"widget","price":9.99}
# ... setup code ...で始まるスニペットと比較してみてください。そのパターンをコピーするAIモデルは、ユーザーにとって壊れた例を生成するでしょう。
LLMは、「なぜFastAPIはバリデーションにPydanticを使うのか?」や「なぜPythonでasyncを使うべきなのか?」といった概念的な質問を頻繁に尋ねられます。ドキュメントが何かを「どうやって」使うかだけを説明している場合、これらのクエリに対しては存在しないも同然です。
すべての主要なセクションには、明示的ななぜの記述が必要です。
## Why Use Connection Pooling?
PostgreSQL creates a new OS process per connection (~5MB RAM each).
Without pooling, 100 concurrent users = 100 processes = 500MB RAM
just for connections. A pool of 20 connections handles 100 users with
~100MB RAM by queueing and reusing connections.
**Rule of thumb:** Set pool size to `(num_cpu_cores * 2) + num_disks`.
For a 4-core server with 1 disk = 9 connections is your starting point.
この段落は、「なぜプーリングを使うのか」と「どのようにサイズを設定するのか」という2つの異なるクエリに、1つのブロックで答えています。それぞれが独立して引用可能です。
AIモデルは、信頼できる定義から知識グラフを構築します。ドキュメントが用語を明確かつ正確に定義していれば、その用語について誰かが尋ねるたびに、その定義が引用される可能性があります。
概念的なセクションの冒頭に、明示的で自己完結型の定義を記述してください。
**Topical authority** is a search ranking signal that measures how
comprehensively a website covers a specific topic cluster. A site
with 50 articles about Python async programming has higher topical
authority for Python async queries than a general programming blog
with one Python article, even if that one article has more backlinks.
このパターン(太字の用語、コロンまたは「は」、そして平易な言葉による完全な定義)は、LLMがエンティティ知識を構築する方法に直接マッピングされます。
AI検索は、比較質問に答えるのが非常に得意です。「Kafka vs RabbitMQ」、「Pydantic v1 vs v2」、「Docker vs Wasm」などです。テーブルは、コンテンツがこれらのクエリに答えることを示す最も明確なシグナルです。
| Feature | Kafka | RabbitMQ |
|---|---|---|
| Message retention | Configurable (days/forever) | Until consumed |
| Replay | Yes (seek to any offset) | No |
| Throughput | Millions/sec | ~50K/sec |
| Protocol | Custom binary | AMQP |
| Best for | Event streaming, audit logs | Task queues, RPC |
テーブルは、RAGパイプライン(構造化された事実として)とLLMファインチューニングコーパス(比較例として)の両方によって解析されます。適切に記述された比較テーブルは、最もレバレッジの高いGEO投資の1つです。
AIクローラーはコンテンツを再インデックスします。フロントマター/JSON-LDのlastmodまたはdateModifiedは、このコンテンツが最新であることをクローラーに伝えます。
---
date: '2026-08-04'
lastmod: '2026-09-22' # Updated when content changes - not just layout
---
このフィールドは、以下の場合に更新してください。
誤字脱字の修正やCSSの変更では更新しないでください。AIクローラーは、実質的なコンテンツが変更されたかどうかを検出します。
RAGアーキテクチャで構築されたAIモデルは、1つのページだけを見るのではなく、リンクをたどってコンテキストを構築します。5〜10個の関連する内部リンクを持つページは、以下を示します。
各投稿について、以下にリンクすることを目指してください。
この構造は、LLMがトピック間の関係をどのように考えるかとも一致します。
公開する前に、すべての技術記事でこれを実行してください。
lastmodが更新されている: フロントマターが実際の最終編集を反映しているTechArticleスキーマとdateModified開発チームは、広範なAPIドキュメントのためにGEOを実装しています。彼らは`llms.txt`と`llms-full.txt`のどちらを使用するか議論しています。AIモデルがコンテンツを正確に解析し、自信を持って引用できるように合成するという目標を考えると、包括的な技術ドキュメントにとって一般的にどちらのアプローチがより効果的で、その理由はなぜですか?
GEOはSEOに取って代わるのか? いいえ、Googleは依然としてオーガニック検索トラフィックの大部分を占めています。GEOは追加的なものです。多くのGEO最適化(構造化データ、明確な見出し、完全なコンテンツ)は、従来のSEOも改善します。人間と機械の両方のために同時に書くことだと考えてください。
GEOの変更が結果を出すまでどれくらいかかるか? 従来のSEOよりも速いです。AIクローラーはGoogleよりも頻繁に再インデックスします。優れたGEOシグナルを持つ新しいコンテンツは、公開から数日以内にAI検索の引用に表示されることがあります。ただし、AIのためのトピック権威を構築するには(Googleのドメイン権威と同様に)、数ヶ月にわたる一貫した出力が必要です。
最も影響の大きい単一のGEO変更は何か?
llms.txtと完全なコード例を追加することです。どちらも実装が迅速で、AIクローラーがサイトをインデックスする方法に即座に影響を与えます。
LLMは、私が公開する前にトレーニングされた場合でも、私のコンテンツを引用するのか? トレーニングデータからは引用しませんが、最新のAI検索(Perplexity、検索機能付きChatGPT、Gemini)のほとんどは、ライブウェブクローリングとRAGを使用しています。これらのシステムは、トレーニングのカットオフ後に公開されたコンテンツを引用します。GEO最適化は、これらのRAGパイプラインがページを取得し、スコアリングする方法を直接改善します。
GEOは、実際には「知的な読者のために明確に書くこと」に過ぎません。ただし、今ではその読者の一部はAIモデルであり、彼らはあなたを正確に引用するか、ひどく言い換えるかのどちらかです。ここで紹介したテクニック(完全な例、明示的な定義、Q&A構造、構造化データ)は、常にドキュメントをより良くしてきました。GEOは、それらをより厳密に行うことの根拠を明確にするだけです。
まずはllms.txtから始め、次に上位10件の投稿について、完全なコード例と明示的な「なぜ」のセクションがあるか監査してください。この2つの変更だけでも大きな効果があります。
AI CLIログの整形、Cron式の作成、JWTの解析、chmod権限の計算をオフラインで実行。

Streamable HTTP、DNSリバインディング対策、OAuth 2.1 Bearerトークン、FastAPIを活用した本番環境向けリモートModel Context Protocol (MCP) サーバーの設計・セキュリティ・デプロイ実践。
続きを読む
vLLM PagedAttentionの詳細を、KVキャッシュメモリ断片化、チャンク化されたPrefill、Prefix Cachingに焦点を当て、本番環境レベルのアーキテクチャとコード例を交えて解説する包括的なガイドです。
続きを読む
UnslothとLoRAでDeepSeek R1をファインチューニングし、本番環境レベルのアーキテクチャとコード例を用いてメモリ効率の良い推論モデルを構築するための包括的なガイドです。
続きを読む