メインコンテンツへスキップ
友田 陽大
公開中

AI回答エンジンに引用されるサイトの作り方 — 7言語371記事の実装

llms.txt、CC BY 4.0の機械可読データセット、本番robots.txtを検証するデプロイテスト。ProxyFacts をAIO前提で設計した記録

なぜポートフォリオにあるか

検索の入口が、10本の青いリンクから「AIの1つの回答」に移りつつあります。引用されるサイトの条件は、単に良い記事があることではなく、機械が読める形で事実を出していることです。ProxyFacts はそれを前提に組みました。

なぜ作ったか

「AIO対策をやります」と言うのは簡単ですが、証拠がありません。実際にAI回答エンジンに引用されることを目標に置いたサイトを、最初から最後まで自分で建てて運用してみるしかない、と考えました。

題材にはプロキシ/スクレイピング基盤の比較を選びました。価格や仕様が頻繁に変わり、事実を構造化して持つ意味が大きく、かつ多言語で需要がある領域だからです。

いちばん難しかったこと

難所は、AIO対策の大半が**「やったつもり」で終わること**でした。

robots.txt にAIクローラーを書いたつもりでも、デプロイ後の実物がそうなっている保証はありません。hreflang を出したつもりでも、翻訳が存在しない言語を宣言していれば逆効果です。llms.txt を置いたつもりでも、中身が古ければ意味がありません。

もう一つは、若いサイトのアクセス解析が何も返さないことでした。固定のインプレッション下限で「あと少しで上位」のクエリを拾おうとすると、数週間ずっと0件が返ります。

どう決めたか(と、捨てたもの)

「書いたつもり」を全部テストにする方針にしました。

AIクローラーの許可リストは独立した純粋なデータモジュールに置き、robots.txt はそこから生成します。そのうえで、デプロイ済みの本番 robots.txt を実際に取得して、同じリストと照合するテストを用意しました。設定ファイルではなく、出ている結果を検証します。

hreflang は記事ごとに「実在する翻訳の集合」から計算します。翻訳していない言語版は宣言しません。

捨てたものは記事数の速度です。53記事 × 7言語という構成は、言語を増やすほど1記事あたりの追加コストが上がります。浅い記事を量産するより、ピラーとクラスタの構造を保ったまま全言語を揃えることを優先しました。

実際に動いているもの

料金データは記事本文から読み取らせるのではなく、**CC BY 4.0 の機械可読データセットとして独立したURLに置き、Dataset の構造化データを付けています。**再利用の条件(表示すべき出典)はデータ自身が持ちます。免責事項もデータのフィールドとして同梱し、データだけ切り出されても文脈が落ちないようにしました。

ロケール設計は、英語をルート(そのまま x-default)、他6言語をプレフィックス付きにしています。zh は繁体字(zh-Hant / zh_TW)、pt はブラジル(pt-BR)と、言語タグ・hreflang・OGロケールを別々に持たせています。ひとつの文字列を使い回すと必ずどこかで嘘になるためです。

IndexNow は対応する検索エンジンにのみ送信し、「Googleは参加していない」という事実をコード内に注記しています。効かないものを効くように書かないためです。

Search Console のクエリは、AI回答エンジンのファンアウト由来か人間由来かを分類して編集バックログに流します。若いサイトでは固定の下限が機能しないため、適応的な下限を使っています。

コードから数えられる値

2026-07-17 から 07-27 までの72コミット。53記事 × 7ロケール = 371本のMDX、ロケールごとに3ピラー + 50クラスタ。テストは69ファイルで、カバレッジの下限は80%。

CIは品質ゲート(コンテンツビルド → 整形 → ESLint警告ゼロ → 型チェック → コンテンツ検証 → カバレッジ)に加えて、依存監査・Gitleaks(全履歴)・Semgrep のSASTを回しています。

AIクローラーの許可リストは10種(GPTBot / OAI-SearchBot / ChatGPT-User / PerplexityBot / Perplexity-User / ClaudeBot / Claude-User / Google-Extended / Applebot-Extended / CCBot)。この10種が本番のrobots.txtに実際に載っているかを、デプロイ検証が確認します。

これは、あなたの案件の何を証明するか

いま読んでいるこのページも、同じ考え方で作られています。構造化データ、llms.txt、hreflang、そして「数えられない数字は書かない」という制約 — ProxyFacts で試したことを、このポートフォリオ自体に適用しています。AIO対策の話を、AIO対策をしたサイトの上で読んでいるというのが、いちばん確認しやすい証拠だと思います。

多言語(7言語)の hreflang を「実在する翻訳だけ」で組む設計、機械可読データセットによる引用可能性の作り方、そして施策が本番に出ているかをテストで担保する方法は、これから作るコンテンツ基盤にそのまま移植できます。

多言語コンテンツ基盤の設計は、技術顧問・CTO代行としてもお請けしています。

コードから数えられる値

対応言語
7ロケール英語がルート(x-default)、ja / de / fr / es / pt / zh がプレフィックス付き
記事
371本53記事 × 7言語。ロケールごとに3ピラー + 50クラスタのトピッククラスタ構成
AIクローラー許可
10種GPTBot / ClaudeBot / PerplexityBot ほか。デプロイ済み本番のrobots.txtに対してテストで照合

よくある質問

ProxyFacts はどの立場で比較していますか?
独立系です。アフィリエイトパートナーは5社ありますが、該当するリンクには rel="sponsored nofollow" を強制付与し、開示を明記しています。
何言語で公開されていますか?
7ロケールです。英語がルート(x-default)、ja / de / fr / es / pt / zh がプレフィックス付きで、53記事 × 7言語 = 371本のMDXを配信しています。
hreflang はどう生成していますか?
記事ごとに、実在する翻訳の集合から計算しています。翻訳していない言語版は宣言しません。
AI回答エンジン向けに何をしていますか?
llms.txt を配信し、CC BY 4.0 の機械可読な料金データセットを専用ルートに Dataset 構造化データ付きで公開し、10種のAIクローラーを robots.txt の許可リストに明記しています。その許可リストは、デプロイ済みの本番 robots.txt を実際に取得して照合するテストで担保しています。
IndexNow は Google に効きますか?
効きません。Google は IndexNow に参加していないため、その旨をコード内に注記した上で、対応する検索エンジンにのみ送信しています。
記事のテーマはどう決めていますか?
Search Console のクエリを、AI回答エンジンのファンアウト由来か人間由来かで分類し、編集バックログに流しています。若いサイトでは固定のインプレッション下限だと0件しか返らないため、適応的な下限を使っています。

同様の課題、抱えていませんか?

あなたのビジネス課題も、最新の技術で解決できます。 まずは30分の無料技術相談から、状況をお聞かせください。

自社の課題もSaaS化できるか相談する

プロジェクト単位(請負)・技術顧問、どちらにも対応可能です

自社プロダクト一覧を見る