先日、ある確認作業のために、手元に用意されていたチェックツールを使った。手順書には「まだ実際には有効になっていません。使う前に、必ず自分で有効化の手続きを行ってください」という注意書きがあった。言われた通りに、まずは様子を見るだけのつもりで試しに動かしてみた。ところが、その時点でもうツールは動いていた。手順書に書かれた「まだ」は、もう過去のことになっていた。
幸い、このときは実害が無かった。動いていることに気づかないまま作業を進めても、結果が変わらない場面だったからだ。だが一歩間違えれば、「無効のはず」という思い込みのまま重複した処理を走らせてしまうところだった。手順書の注意書きは、書かれた瞬間には正しかった。時間が経って、状況の方が先に変わっていた。
これだけなら、笑い話で済ませられる。だが同じ形のことが、当サイトの中でも起きていた。しかもこちらは笑えない。archives/124で「llms.txt・robots.txt・guitars.txtの到達数を同一期間で集計し、続報として公開する」と書いてから15日、archives/123で英語バイアスの強いクローラーを「確認していない」と書いてから17日、当サイトはどちらも一度も集計していなかった。データは最初から、サーバーに52日分そのまま残っていた。
「まだ効いていません」と書かれた確認手続きを、そのまま信じた
手順書に「まだ効いていない」と書いてあると、人は自然に「これは今は動いていないもの」として扱う。だから確認する動機が生まれない。動いていないと信じているものを、わざわざ確かめには行かない。
ところが今回のツールは、書かれた注意書きよりも早く動き始めていた。手順書を書いた時点では正しかったのだろう。だが、使う側がその「まだ」を鵜呑みにして、実際に動いているかどうかを一度も確かめなかった。もし何かのトラブルが起きていたら、「まだ効いていないはず」という思い込みのまま、原因をまったく別のところに探しに行っていたかもしれない。
この経験を持ったまま、当サイト自身の過去記事を読み返した。すると、まったく同じ形の記述が見つかった。「まだ効いていない」ではなく「これから測る」「確認していない」という言葉で書かれた宣言が、複数の記事にまたがって残っていたのだ。
同じ形は、どこにでも起きる
手順書に書かれた注意書きと、自分の記事に書いた宣言は、一見まったく別のものに見える。だが構造は同じだ。どちらも「今の状態」を言葉で固定している。手順書は「まだ効いていない」という状態を固定し、記事は「これから測る」という状態を固定する。言葉は、書かれた瞬間の状態を写し取る。だが状態そのものは、その後も動き続ける。ツールは効き始めるかもしれない。ログは何日分も積み上がるかもしれない。それでも、書かれた言葉だけは動かない。読む側(書いた本人も含む)が言葉を更新しない限り、いつまでも「まだ」のまま、いつまでも「これから」のままだ。
llms.txtは読まれているか。52日分のログで数え直した
まず本題から始める。llms.txtは、AIがサイトの内容を理解しやすいように、サイトの構成やコンテンツの要約をMarkdown形式でまとめておくファイルの提案仕様だ。llmstxt.orgで公開されている非公式の提案から広まり、robots.txtやsitemap.xmlと同じくサイトのルート直下に置く。robots.txtが「クロールしてよい場所」を、sitemap.xmlが「サイトの構造」を伝えるファイルだとすれば、llms.txtは「AIに読んでほしい要点」を伝えるファイル、という位置づけになる。当サイトも設置している。このファイルが実際に読まれているのかどうかを、今日、あらためて数え直した。
比べる対象は52日間・17,205行
2026年7月6日から2026年8月27日までの52日間、当サイトのアクセスログ(access.log 52ファイル・合計17,205行)から、5つの対象へのアクセスを機械的に数えた。「すでに読まれているとわかっているファイル」と「まだ誰にも読まれていないかもしれないファイル」を、同じ物差しで並べる。
| 対象 | 52日間の総ヒット | 位置づけ |
|---|---|---|
| robots.txt | 1,200 | 必ず読まれているファイル |
| sitemap.xml | 10 | 定期的に読まれているファイル |
| llms.txt | 10 | 今回確かめたいファイル |
| llms-full.txt | 0 | 今回確かめたいファイル |
| guitars.txt | 0 | 存在を誰にも教えていないファイル(2026-08-12設置・15日間) |
robots.txtとguitars.txtを、両端に置く
archives/124で書いたとおり、guitars.txtは「AIへの指示を一切含まない、ギターのプロフィールだけを並べたファイル」だ。sitemap.xmlには意図的に載せていない。クローラーが自力で見つけるかどうかも、確かめたいことのひとつだったからだ。設置から15日が経った今日、あらためて数えたところヒット0件。✅ 当サイト実施済 意図どおり、誰にも見つかっていない。
一方でrobots.txtは52日間で1,200件のヒットがある。これは「アクセスログの取得の仕組みそのものが正しく動いている」ことの裏付けになる。もし対象のファイルすべてが0件だったら、まず疑うべきはAIクローラーの不在ではなく、ログの取得方法の方だ。robots.txtが正しくカウントされているからこそ、llms.txtの「10件」もguitars.txtの「0件」も、今回の数字として読んでいい。
sitemap.xmlも同じ52日間で10件だった。llms.txtとまったく同じ数字だが、性質は違う。sitemap.xmlはrobots.txtから参照されており、検索エンジンが定期的に確認しに来る対象だ。10件という少なさは、更新頻度や巡回間隔の結果であって、「見つけられていない」わけではない。同じ「10件」という数字でも、経路の違いによって意味が変わる。この違いを区別しないまま「10件で少ない」とだけ書くと、性質の違う2つのファイルを同じ棚に置いてしまう。
その10件の中身を、全部見る
llms.txtへのアクセスは52日間で10件だった。「10件しかない」と「10件もある」のどちらで読むかは、中身を見てから決めた方がいい。全件を並べる。
| 日付 | アクセス元 | ステータス |
|---|---|---|
| 2026-08-27 | デスクトップChromeを名乗るUA(挙動から偽装が疑われる) | 403(地域制限) |
| 2026-07-08 | iPhone Safariを名乗るUA(偽装疑い) | 200 |
| 2026-07-13 | Scrapy(汎用スクレイピングツール) | 200 |
| 2026-07-16 | iPhone Safariを名乗るUA(偽装疑い) | 200 |
| 2026-07-17 | Bingbot | 200 |
| 2026-08-04 | Bingbot | 200 |
| 2026-08-05 | DotBot(Mozのリンク調査ツール) | 200 |
| 2026-08-15 | curl(外部IPからの手動アクセス) | 200 |
| 2026-08-16 | curl(サーバー内部からの実行) | 200 |
| 2026-08-19 | CCBot(Common Crawl) | 200 |
半分は検索エンジンでもAIでもない
10件を分類すると、こうなる。Bingbotが2件、SEO調査ツール(DotBot)が1件、汎用スクレイパー(Scrapy)が1件、curlによる手動確認が2件(うち1件は当サイトのサーバー内部からの実行)、UAを偽装した疑いのあるアクセスが3件(モバイル端末を名乗るもの2件・デスクトップを名乗るもの1件。デスクトップの1件は地域制限に引っかかって403)、そしてCommon Crawlが運用するCCBotが1件だけ。
Common Crawlは、複数のAI企業が学習データとして参照している汎用のWebアーカイブだ。だからCCBotは「AIに読まれた」に最も近い1件と言える。だがそれ以外の9件は、検索エンジンかツールか、当サイト自身の確認作業でしかない。
DotBotは、SEOツールを提供するMozが運用しているクローラーで、被リンク調査やサイト分析のためにサイトを巡回する。Scrapyは特定の企業が運用しているものではなく、誰でも自由に使える汎用のスクレイピング用フレームワークだ。どちらもAI検索の回答生成とは無関係な目的で来ている。10件のうち、目的がはっきりしているのはこの2件と、検索エンジン(Bingbot)の2件、当サイト自身によるcurlの2件、合わせて6件。CCBotの1件を加えると7件。残る3件が、素性のはっきりしない偽装疑いのアクセスだった。
もうひとつ、robots.txtの中身も確認しておく。archives/86で扱ったインフラ層の設定とは別の話として、当サイトのrobots.txtにllms.txtへの言及は無い。Sitemap行が1行あるだけだ。llms.txtを見つける手がかりを、robots.txt経由では用意していない。
「偽装疑い」は、確定ではなく保留
表の中の「偽装疑い」は、確定ではなく保留にとどめている。断定できるだけの材料が揃っていないので「偽装」ではなく「偽装疑い」と書いた。判定の根拠は本稿では書かない――どこを見れば怪しいと分かるかは、そのまま偽装の手引きになってしまうからだ。ここで大事なのは、判定の中身よりも姿勢の方だ。この2件を「AIが読みに来た」の側には数えなかった。分からないものを、都合よく大きい方の数字に寄せない。
AIクローラーは、そもそも来ているのか。サイト全体で数えた
llms.txtだけを見ていても片手落ちになる。llms.txtを読みに来ていなくても、AIクローラーがサイトの他のページを読みに来ている可能性はある。そこで対象をllms.txtから外し、同じ52日間・同じログで、サイト全体へのAIクローラーのアクセスを、アクセス元別に数え直した。
来ている方にも、大きな偏りがある
| アクセス元 | 52日間の総ヒット |
|---|---|
| Bingbot | 2,820 |
| Applebot | 689 |
| CCBot(Common Crawl) | 136 |
| ClaudeBot | 103 |
| facebookexternalhit | 92 |
| Googlebot | 41 |
| Bytespider | 34 |
| GPTBot | 5 |
| OAI-SearchBot | 2 |
いちばん多いのはBingbotで2,820件。ただしこれは通常の検索エンジンのクロールなので、AI検索とは別枠で扱う。AI関連で目立つのはCCBotとClaudeBotで、どちらも100件を超えている。一方でOpenAI系(GPTBot・OAI-SearchBot)は、52日間で合計7件しかない。
表にあるBytespider(34件)は、TikTokを運営する企業が学習データ収集のために動かしているクローラーだ。ヒット数だけ見ればGooglebot(41件)に近い水準だが、内訳を見ると200が16件、403が18件と、半分以上が地域制限に引っかかっている。「来ている件数」と「実際に中身を読めている件数」は別だ、という当たり前のことが、この1行だけでも確認できる。
ClaudeBotは、来る日と来ない日がはっきり分かれる
ClaudeBotの103件を日別に見ると、一様に分布しているわけではない。特定の日に集中し、多い日には30件を超える一方、それ以外の大半の日は0〜2件にとどまる。「52日間で103件」という総数だけを見ると、平均して毎日2件来ているように錯覚するが、実際は特定の日にまとめて来ている。
AnthropicのGPTBotはさらに極端だ。52日間のうち、実際にヒットが記録されたのはわずか5日間。残り47日間はゼロだった。
Applebotとfacebookexternalhitは、AI検索とは別の目的で来ている
表の中には689件のApplebotと92件のfacebookexternalhitもある。数字だけ見るとClaudeBot(103件)より多いが、これをそのまま「AI検索に読まれている数」に加えるのは誤りだ。Applebotは、AppleのSiriやSpotlightの検索機能のためのクロールを含む。facebookexternalhitは、Facebookでリンクがシェアされたときに、OGP(サムネイルやタイトル)を取得しに来るボットだ。どちらも「AI検索エンジンが回答を作るために読みに来ている」訪問とは目的が違う。同じ「クローラー」という括りでも、何のために来ているかまで見ないと、数字を足し算していい相手かどうかは判断できない。
52日間、1件も来ていない12種類
ここまでは「来ている」クローラーの話だった。逆に、同じ52日間・同じ条件(robots.txtが1,200件をきちんと記録できている状態)で、1件もヒットしなかったアクセス元が12種類ある。以下は、それぞれの提供元が公式ドキュメント等で明かしている名称と一致するものだけを挙げた。
- PerplexityBot
- Perplexity-User
- Google-Extended
- Claude-User
- Claude-SearchBot
- anthropic-ai
- ChatGPT-User
- meta-externalagent
- Applebot-Extended
- cohere-ai
- Diffbot
- DuckAssistBot
この「0件」が「見ていないから0件」なのか「そもそも記録の取り方が壊れているから0件」なのかは、区別しないと意味がない。区別するために置いてあるのが、robots.txtの1,200件だ。ログの取得は正しく動いている。その状態で0件なのだから、これは「この52日間、来ていない」という数字として読んでいい。
「来ていない」の中にも、種類がある
この12種類を、ひとまとめに「AIに無視された」と読むのは早い。たとえばGoogle-Extendedは、Googleの検索クロールとは別に、生成AIの学習用途にだけ使われる識別子であり、通常のクロールとは別枠で扱われている。anthropic-aiやcohere-aiは学習データ収集用で、リアルタイムでユーザーの質問に答えるための取得(ChatGPT-UserやClaude-Userのような「-User」系)とは役割が異なる。「学習用に来ていない」ことと「回答生成時のリアルタイム取得で来ていない」ことは、意味が違う。ひとつの表にまとめて並べたのは数える都合であって、対策や評価まで同じにしていいわけではない。
🔧 これから この12種類のうち、archives/123で紹介した、英語ページへの偏りが最も強いと報告されているChatGPT-Userについては、当サイトでは今日まで一度も来ていないことが分かった。バイアスがあるかどうかを測る以前に、まだ来ていない。翌月以降も同じ条件で継続観測する。
いちばん恥ずかしいところ ── 「集計する」と書いてから、15日間、一度も集計していなかった
ここまでの数字は、今日はじめて出したものだ。それ自体はよくある調査記事のひとつに見えるかもしれない。だが、この記事にはもうひとつ書かなければならないことがある。この集計を「やる」と、当サイトはすでに自分の記事の中で宣言していた。しかも1回ではなく、2回。
2回とも、宣言した内容は具体的だった。「いつか測る」ではなく「何を、どういう方法で測るか」まで書いてある。曖昧な決意表明ではなかった。それでも実行されなかった。むしろ具体的に書けていたことが、この記事を書く直前まで、俺自身に「もう対応済みのはず」という誤解を与えていた側面がある。
15日前に書いた「差が出れば、それはファイル名の差である」
archives/124(2026年8月12日公開)で、当サイトはこう書いていた。
guitars.txt・llms.txt・robots.txt の到達数を同一期間で集計し、本稿の続報として公開する。差が出れば、それはファイル名の差である。
今日は2026年8月27日。あの記事から15日が経っている。だが、この15日間、当サイトはその集計を一度もやっていなかった。今日、この記事のために52日分のログを開いて初めて、archives/124で「これから」と書いた集計を、実際に行った。
17日前に書いた「確認していない」
archives/123(2026年8月10日公開)にも、同じ形の記述がある。
Search Engine Landが最も強い英語バイアスを示したと報告しているChatGPT-Userの挙動を、当サイトでは確認していない。
この一文の直後には、GPTBot・OAI-SearchBot・ChatGPT-Userを分けて数えれば済むはずだ、という趣旨の記述も残っている。17日間、その「分けて数えるだけ」を、一度もやっていなかった。
データは最初から、そこにあった
ここが、この記事でいちばん正直に書いておきたい部分だ。集計するために新しく何かを用意する必要は無かった。access.logは52日分、宣言した日よりも前から、ずっとサーバーに残っていた。集計に使ったコマンドも特別なものではない。ログを開いて、アクセス元ごとに数えるだけだった。
それでも15日間、17日間、手を付けなかった。理由を探すと、はっきりした「忙しかったから」のような答えは出てこない。それよりも当てはまるのは、「これから測る」「確認していない」と一度書いた時点で、確認する側の頭の中では、もう対応したつもりになっていた、という方だ。
今日、この記事を書くにあたって過去記事を読み返さなければ、この2つの宣言は、おそらくさらに何週間も気づかれなかった。読み返すきっかけを作ったのは、冒頭に書いたチェックツールの一件だった。「まだ効いていません」という言葉に対して確認を怠った自分の姿を、そのまま自分の過去記事に当てはめてみたら、同じ形が出てきた。
✅ 当サイト実施済 今日、archives/124の宣言を実行し、この記事として公開した。ただし、これで終わりにしない。次の節で、その理由を書く。
「測定中」と「測定した」は、何が違うのか
「効かない」は確認を誘う。「測定中」は確認を止める
冒頭のチェックツールの話に戻る。手順書に「まだ効いていません」と書いてあったから、使う側は「今は動いていない」と思い込んだ。だが実際には動いていた。この場合、「効かない」という言葉は、本来なら確認を促すはずの言葉だ。「効かないなら、いつ効くようになるか確認しよう」という動機が働いてもいい。それでも今回は、動いていることに気づくのが遅れた。
この記事のタイトルは「『測定中』と書いてあると、誰も測らなくなる」だが、正確に言えば、当サイトが実際に書いていたのは「測定中」という言葉そのものではない。「これから測る」「まだ確認していない」という、未来形・否定形の言葉だった。それでも結果は同じだった。過去形でも現在進行形でもない、未来と否定の言葉は、読んだ人に「対応の予定は把握済み」という印象を与える。予定が把握されていることと、予定が実行されることは、まったく別の話だ。
archives/124やarchives/123に残っていた「これから」「確認していない」という言葉は、これよりもさらに始末が悪い形をしていた。「効かない」は否定形なので、まだ何かが足りないという含みが残る。だが「これから測る」「確認していない」は、対応の予定として読めてしまう言葉だ。書いた本人を含め、読んだ人はそこで安心して読み進めてしまう。確認を止める理由が、言葉そのものに埋め込まれている。
実際には、「宣言した」という行為と「対応した」という行為は、まったく別の作業だ。それでも同じ記事の中に並んでいると、宣言した瞬間に対応まで終わったかのような読後感が生まれる。それは書いた本人にとっても、同じように働く。
宣言と実行のあいだに、期限を挟む
今回の反省をそのまま次に活かすなら、変えるべきは「正直に書く」ことではない。当サイトはすでに正直に「これから測る」「確認していない」と書いていた。嘘は無い。足りなかったのは、宣言と実行のあいだに置く仕掛けの方だ。「いつまでに」という期限を書かず、「誰が確認したら宣言を消してよいか」も決めていなかった。宣言だけを書いて満足する形になっていた以上、次からは、宣言した項目を本文の外にも控えておき、期限が来たら本人以外の目で「まだ残っているか」を確かめる、という手順を挟む必要がある。
構造化データは大丈夫か。ついでに測った
集計を怠っていたのはllms.txtだけかもしれない、という可能性も残っていたので、別の項目もついでに確認した。公開中の記事から3本(archives/134・archives/120・archives/100)を選び、構造化データ(JSON-LD)が正しく出力されているかをHTTPで直接確認した。
| 確認項目 | 結果 |
|---|---|
| HTTPステータス | 3本とも200 |
| JSON-LDブロック数 | 3本とも3ブロック |
| @typeの構成 | 3本とも完全に同一(BlogPosting・BreadcrumbList・ImageObject・Organization等) |
| 公開日時と更新日時の順序 | 3本とも逆転なし |
✅ 当サイト実施済 こちらは3本のサンプル確認だが、崩れは見つからなかった。archives/128で扱った「値だけ違う穴」のような形は、少なくとも今回のサンプルには出ていない。ただし確認したのは3本だけで、確認対象としては小さい。定期確認の対象に加える。
この節を入れたのには理由がある。「llms.txtだけがたまたま止まっていた」のか「宣言したまま止まっている項目が他にもあるのか」を、少しでも切り分けたかったからだ。3本のサンプルで崩れが無かったことは、他の項目まで全部大丈夫という証明にはならない。それでも、少なくとも「宣言した項目のすべてが放置されているわけではない」ということは言える。
読者が今日、自分のサイトのログでできること
この記事で使った方法は、特別なツールを必要としない。自社のアクセスログが手元にあれば、今日から同じことができる。
まず5分でできること
- アクセスログから、アクセス元(UA)別のアクセス数を数える。ログの形式によっては、表計算ソフトのフィルタ機能だけでも足りる
- robots.txtへのアクセス数を、必ず一緒に数える。これが0件のログは、そもそも取得方法を疑う
- 自社が使っているAIクローラー向けファイル(llms.txt等)への到達数を、robots.txtと同じ期間・同じ物差しで数える。片方だけを見て安心しない
- アクセス元の一覧から、「来ているもの」と「同じ期間、1件も来ていないもの」を分ける
- 「見ていないから0件」なのか「記録の取り方が壊れているから0件」なのかを、robots.txtのような「必ず読まれているファイル」の数字と突き合わせて判定する
継続してやるなら
- Search Consoleと自社ログを突き合わせ、検索エンジン以外の到達経路を洗い出す
- 「これから測る」「確認していない」「調査中」と書いた記事・メモを、自社の中で全部リストアップする。1つの記事に埋もれていることが多いので、検索して拾い集める
- その宣言から何日経ったかを数える。宣言した日と、今日の日付を並べるだけでいい
- 実際に測ってあるかどうかを、宣言した本人以外の目で確認してもらう。書いた本人は「もう対応した気」になっているので、自分では気づけないことが多い
- 当サイトが公開しているリンク漏れ・チェックツール「🔧 リンク漏れ・チェックツール」のような点検に加えて、「到達はしているが役に立たない状態」の項目も点検リストに入れる
- サイト全体の状態をまとめて見たいときは、「🔧 WEBサイト総合分析・レポートツール」で一括確認する
10項目のうち、時間がかかるのは6番目だけだ。それ以外は、今日この記事を読み終えた5分後にでも始められる。難しいのは方法ではなく、「宣言したことを、宣言した本人が忘れる」という当たり前の現象を前提に、確認の仕組みを作れるかどうかの方だ。
ひとつだけ補足しておく。この記事で出した数字は、あくまで当サイトの52日間という限られた期間での結果だ。AIクローラーの巡回頻度は時期によって変わりうるし、ここで「来ていない」と書いた12種類が、来月も来ていないとは限らない。だからこそ、1回測って終わりにしないことが大事になる。今回の記事は「測っていなかった」ことへの反省として書いたが、反省だけで終わらせず、次の測定の予定を本文にはっきり残すところまでを、今回の対応とする。
📋 予告 今回の集計は1回きりの確認にとどめない。次は期間を空けて再計測し、guitars.txtへの到達に変化が出るか(=llms.txtという命名自体がAIクローラーに認識されているのか)を確認する。
🔧 これから 「これから測る」という書き方を記事の中でどう扱うかも、運用ルールとして決めていく。今回のように具体的な期限や再確認の予定を書いていない宣言は、宣言のままでは効果がないと分かった以上、書き方自体を変える必要がある。
AIクローラーがどのように構造化データを読んでいるか、そもそもの仕組みについては構造化データはAIに読まれているのか? ── ChatGPTの実験結果と、それでもマークアップを続ける理由で公式情報つきに整理している。あわせて確認してほしい。
「200が返る」ことと「実際に役に立っているか」は別だ、という話はarchives/134で自社ブログの内部リンクを対象に書いた。今回はその外側、AIクローラー向けのファイルという対象で、同じ形の見落としが起きていた。調べる対象が変わっても、見落とし方の形は変わらなかった、というのが今回の実質だ。
この記事自体も、いずれ同じ形で見落とされる側になりうる。上で書いた「宣言と実行のあいだに、期限を挟む」を、この記事自身にも当てはめる。再計測は2026年9月中に行い、その回にはこの記事番号(archives/135)と、今日出した数字を並べて突き合わせる。期限を書かずに「これから」とだけ残すと、今日確かめたのと同じことが、また起きる。
関連 archives(連載軸として読む)
- archives/124「猫のファイルが『効いている証拠』を無効化した日 ── llms.txtに足りなかったのは陰性対照だった」 ── guitars.txtを比較用に設置し、今回の集計を宣言した回(2026-08-12)
- archives/123「『+28%』と『+9%』は、同じ調査の、同じプラットフォームの数字だった ── 他人の実測を自分のサイトに当てはめる前に確かめる3点」 ── ChatGPT-Userの英語バイアスについて「確認していない」と書いた回(2026-08-10)
- archives/127「llms.txt に 59 本 積んでいた ── ただし『読まなくていい』と書いてある棚に」 ── llms.txtの中身そのものを検証した回
- archives/116「1サイトの実測は仮説、2サイトの一致は事実 ── llms.txtを8言語サイトでも測ったら、AIクローラーが1件も来ていなかった」 ── 複数サイトでAIクローラーの実際の挙動を確認した回
- archives/86「Cloudflareのデフォルト『AI bots ブロック』があなたのGEOを殺している — robots.txt無関係のインフラ層ブロックと、WEBディレクターが今すぐ確認すべき3つの設定」 ── インフラ層でのAIクローラー遮断を扱った回
WEBサイト