自分の考えを書いて、それを多くの人に届けたい。ブログを書く動機はシンプルだ。
ただ、「多くの人に届ける」の意味が変わりつつある。2026 年現在、技術的な疑問を持ったとき、検索エンジンの代わりに ChatGPT や Claude に聞く場面が増えてきた。そのとき AI が返す回答の元になっているのは、誰かがウェブに公開した記事だ。自分の知見を広く届けたいなら、人間の読者だけでなく、LLM の学習データクローラーにも届く状態にしておく必要がある。
このブログは現時点で RSS フィードもサイトマップも robots.txt もない。つまり、人間にも AI にも「見つけにくい」状態だ。これを改善するために何を設定すべきか、LLM に読まれることを意識しながら整理してみる。
LLM が学習データを集める仕組み
LLM の学習データは主に 2 つの経路で集められている。
1 つ目は Common Crawl。Common Crawl は非営利のウェブアーカイブプロジェクトで、定期的にウェブ全体をクロールしてデータを公開している。GPT シリーズ、Claude、Llama など主要な LLM の学習に広く使われているデータソースだ。クローラーのユーザーエージェントは CCBot。
2 つ目は各社の独自クローラー。OpenAI の GPTBot、Anthropic の anthropic-ai、Google の Google-Extended などが、学習データ収集のために独自にウェブをクロールしている。
ここで重要なのは、クローラーには「学習用」と「検索用」の 2 種類があるという点だ。
| 種類 | 目的 | 例 |
|---|---|---|
| 学習用 | モデルの訓練データ収集 | GPTBot, Google-Extended, CCBot |
| 検索用 | ユーザーの質問にリアルタイムで回答 | ChatGPT-User, PerplexityBot |
学習用クローラーに拾われると、自分の知見が LLM の「知識」に組み込まれる。検索用クローラーに拾われると、AI チャットの回答にリアルタイムで引用される。個人ブログなら、どちらもブロックせず歓迎するのが基本姿勢だ。
ただし、クロールされただけでは学習データには入らない。ACM FAccT 2024 で発表された分析論文によると、Common Crawl のデータは LLM の学習パイプラインで品質フィルタリングされる。他サイトからのリンクが多いドメインほど優先的にクロールされ、ナビゲーションメニューやエラーメッセージのような定型テキスト、スパム的な内容、HTML 構造が壊れたページは除外される傾向にある。
つまり、学習データに入るには技術設定(クローラーがたどり着ける)と コンテンツの質(フィルタリングを通過する)の両方が必要になる。この記事では前者の設定を扱う。
1. robots.txt — AI クローラーの許可確認
最も優先度が高い。これがブロックされていると他のすべてが無意味になるからだ。
robots.txt がなければデフォルトで全クローラーが許可される。しかし多くのブログテンプレートやホスティングサービスが、知らないうちに AI クローラーをブロックする robots.txt を入れていることがある。まず確認が必要だ。
全クローラーを許可しつつ、サイトマップの場所も伝える最小限の robots.txt はこうなる。
User-agent: *
Allow: /
Sitemap: https://www.null-coding.com/sitemap-index.xml
この設定は「すべてのクローラーを許可し、サイトマップの場所を通知する」という内容だ。ポイントは GPTBot や CCBot を Disallow にしないこと。
「リアルタイム検索には出したいが学習データには使わないでほしい」場合は、GPTBot と Google-Extended だけブロックして ChatGPT-User は許可する設定もできる。ただし個人ブログでこの区別をする実益はあまりない。
2. サイトマップ — ページ一覧の通知
サイトマップは、サイト上のすべてのページの URL を一覧にした XML ファイルだ。検索エンジンも AI クローラーもこれを参照して、どのページをクロールすべきかを判断する。
Astro では @astrojs/sitemap パッケージで自動生成できる。まずインストールする。
npm install @astrojs/sitemap
次に astro.config.ts にインテグレーションを追加する。site が設定済みなら、ビルド時に sitemap-index.xml と sitemap-0.xml が自動生成される。
import sitemap from "@astrojs/sitemap";
export default defineConfig({
site: "https://www.null-coding.com",
integrations: [sitemap()],
});
サイトマップの生成結果として、全ページの URL が XML 形式で出力される。サイトマップがなくてもクローラーはリンクをたどれるが、記事数が少ない段階ではクローラーがサイトを巡回する頻度が低いため、サイトマップの存在が発見速度に直結する。
3. RSS フィード — 人間と AI 両方への更新通知
RSS フィードは XML 形式の更新通知だ。RSS リーダーで購読している読者に新記事を届けるのが本来の役割だが、AI 系のサービスも RSS を監視して情報を取得している。
Astro では @astrojs/rss パッケージで実装する。
npm install @astrojs/rss
src/pages/rss.xml.ts を作り、ブログ記事コレクションからフィードを生成する。各記事のタイトル、公開日、本文、URL を含むフィードが /rss.xml として公開される。
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
import type { APIContext } from "astro";
export async function GET(context: APIContext) {
const posts = await getCollection("blog", ({ data }) => !data.draft);
return rss({
title: "ソフトウェア自動開発のメモ帳",
description: "ソフトウェア自動開発とそれに関連するプロダクト開発の研究メモ",
site: context.site!.toString(),
items: posts.map((post) => ({
title: post.data.title,
pubDate: post.data.pubDate,
link: `/posts/${post.id}/`,
})),
});
}
この RSS エンドポイントは、公開済みの記事(draft でないもの)を公開日順でフィードに含める。技術ブログの読者は RSS リーダーを使っていることが多く、検索エンジン経由では埋もれがちな記事も RSS なら確実に目に入る。
4. llms.txt — AI 向けのサイト説明
llms.txt は 2024 年末に提案された仕組みで、サイトの概要や重要なページを Markdown 形式で AI に伝えるファイルだ。robots.txt が「ここにはアクセスしないで」を伝えるのに対し、llms.txt は「うちのサイトはこういう内容です」を伝える。
robots.txt や sitemap が「クロール時」に参照されるのに対し、llms.txt は主に AI エージェントやチャットボットがサイトの内容を理解する場面で使われる。たとえば AI アシスタントが「このサイトは何について書いているか」を知りたいとき、HTML をパースする代わりに llms.txt を読む。
2026 年 3 月時点では正式な標準ではないが、llmstxt.site でコミュニティが推進しており、Cloudflare や Stripe が採用している。
ブログの場合、/llms.txt としてサイトの説明と主要なトピックを記述する。
# null-coding.com
> ソフトウェア自動開発とそれに関連するプロダクト開発の研究メモ
## About
AI コーディングツール、エージェント型開発、LLM ベンチマーク、
AI 規制などについて日本語で記事を公開している技術ブログ。
## Key Topics
- AI コーディングツール (Claude Code, Cursor, Codex CLI)
- マルチエージェント開発
- LLM ベンチマーク分析
- AI 規制 (日本)
このファイルは、サイトの説明と主要カテゴリを Markdown で書いたものだ。LLM の学習データに直接影響するかどうかは未検証だが、静的ファイルをひとつ置くだけなのでコストはほぼゼロ。やらない理由がない。
5. OGP と canonical — SNS と検索エンジンへの対応
最後は人間の読者向けの設定だが、間接的に LLM の学習データにも影響する。
OGP(Open Graph Protocol) は、SNS でブログ記事がシェアされたときにタイトルや説明文が正しく表示されるための仕組みだ。HTML の <head> にメタタグを追加する。
<meta property="og:title" content="記事タイトル" />
<meta property="og:description" content="記事の説明" />
<meta property="og:url" content="https://www.null-coding.com/posts/slug/" />
<meta property="og:type" content="article" />
これらのタグは、SNS にシェアされたときの記事の見え方を制御する。SNS 経由のアクセスが増えれば外部リンクも増え、結果として Common Crawl でのクロール優先度が上がる。OGP は LLM の学習データに入るための間接的な施策だ。
canonical URL は「この記事の正規 URL はこれです」とクローラーに伝えるタグ。重複コンテンツとして扱われるのを防ぐ。
<link rel="canonical" href="https://www.null-coding.com/posts/slug/" />
このタグにより、同じ記事が複数の URL でアクセスできる場合でもクローラーが正規の URL を認識できる。
このブログでどうしていくか
ここまで整理してきた設定を、このブログ(null-coding.com)に当てはめるとこうなる。
| 優先度 | 設定 | このブログの状態 |
|---|---|---|
| 最優先 | robots.txt | 未設置 → public/robots.txt を追加 |
| 高 | サイトマップ | 未設置 → @astrojs/sitemap を導入 |
| 高 | RSS フィード | 未設置 → @astrojs/rss を導入 |
| 中 | llms.txt | 未設置 → public/llms.txt を追加 |
| 中 | OGP / canonical | 部分的 → <head> にメタタグ追加 |
これらを設定したからといってすぐに LLM の学習データに入るわけではない。Common Crawl の品質フィルタリングを通過するには被リンクや記事の質も必要だ。ただ、土台がなければどんなに良い記事を書いてもクローラーに届かない。まずは robots.txt の追加から始める。
追記(2026-03-17): この記事で紹介した 5 つの設定はすべて当ブログに適用済み。robots.txt、サイトマップ、RSS フィード、llms.txt、OGP / canonical を確認できる。