ads.txt / crawl

ads.txtが無いサイトで、クロールの2割が404に消えていた実測と直した手順

広告を1つも入れていないサイトでも、Googlebotは/ads.txtを毎日取りに来ます。無ければ404。ページ数の少ないサイトでは、これがクロールの大きな割合を占めます。24ページのサイトで測ったら、Googlebotの取得229件のうち、ads.txt関連が45件、19.7%でした。この面は、サーバーのアクセスログでその割合を測る手順と、塞いだ記録、そして自分の巡回が同じページを二度取っていた別の無駄の記録です。

このサイトはAnthropicの公式サイトではありません。Claude Codeの機能・料金・提供範囲は変わる可能性があるため、重要な判断の前には公式のドキュメントと自分のアカウント設定を確認してください。

先に結論:ログを読めば、無駄打ちは数字で見える

Search Consoleの画面だけでは、クロールの使い道は見えません。見えるのはサーバーのアクセスログです。2026年9月19日、24ページのサイトでログを集計すると、次の内訳でした。

応答件数割合
/ads.txt が404(https)3013.1%
/ads.txt が301(http)156.6%
ads.txt関連の合計4519.7%
200以外の応答の合計6528.4%

Googlebot全体で229件(その月)のうち、200以外が28.4%。同じ期間に、6ページが一度も取られていませんでした。このサイトにAdSenseの読み込みは0件です。広告の有無と関係なく、叩かれます。

直し方は単純で、ads.txtを置くことです。ただし置き場所に落とし穴があります。詳しくは後述します。広告を実際に入れる側の点検は審査前の点検表にあります。

確かめる手順:自分のサイトのログで測る

  1. レンタルサーバーのログ置き場から、月次のアーカイブ(ドメイン-Sep-2026.gzのような名前)を取得する。httpsとhttpで別ファイルのことがあり、実質httpsだけ見ればよい。
  2. gzipを解凍し、各行から日時、パス、応答コード、User-Agent、接続元IPを取り出す。
  3. Googlebotは、User-Agentの名乗りではなくIPで判定する。名乗りは偽装できるので、Googleが公開している範囲に入るIPだけを数える。
  4. パス別、応答コード別に集計する。/ads.txt、/robots.txt、削除済みのURLの410、301の行を探す。
  5. 日付の比較は文字列でやらない。[27/Aug/2026を文字列で並べ替えると、「31/Jul」が「27/Aug」より後になる。月名を数値に直してから比べる。
  6. 取られなかったページの数も出す。sitemapにあるのに、期間内に一度もGooglebotが来ていないURLの一覧です。

当日分はログに無いことに注意してください。現行のログ(.gzでないもの)は置かれておらず、月次のアーカイブは書き出された時刻までしか入っていません。押した直後の確認はURL検査の最終クロール日時で行います。

記録1:GSCが「認識されていない」と言うページを、Googlebotは取っていた

2026年8月28日、別のサイトで、Search ConsoleのURL検査は26URLのうちクロール済みが1本(トップのみ)と言っていました。しかしサーバーのログには、トップが11回、別のページが200で取得された記録がありました。GSCが「URLが認識されていません」と言うページを、Googlebotはすでに取っていたのです。Search Consoleの索引のパイプラインは数日遅れるので、「未クロール」と報告する前にログを見ます。

ログからは、GSCでは分からないことが分かりました。同じ日にGooglebotが16回来たうち14回が、同じ削除済みURLの410でした。410は正しく返っていても、Googleは繰り返し確認しに来ます。内部リンクとsitemapから消えているなら、それ以上できることは無く、無関係なページへ301で飛ばすのは利用者にとって嘘の転送になります。

他のクローラーの動きも見えました。GPTBotは271回のうち191回が429(叩きすぎて断られている)でした。クロール予算が何に使われているかを、施策の前に見ます。

記録2:ads.txtを置く場所で、手で置くと次のビルドで消える

置き場所は、サイトを書き出す生成元です。静的サイトの書き出し先は、ビルドのたびにいったん消されます。手で置いても次のビルドで消えます。robots.txtを書き出している行の隣に、ads.txtを書き出す行を足すのが定位置でした。

  • 中身は宣言だけでよい。有効なレコードが無いads.txtは、IABの仕様で「販売を許可している事業者はいない」という正しい宣言になる。広告を入れるときに、ドメイン、発行者ID、DIRECTまたはRESELLERの行を足す。
  • sitemapには入れない。robots.txtと同じ扱い。
  • lastmodも動かないので、既存ページの評価に影響しない。
  • httpの301は直せない。内部リンクもsitemapもcanonicalもhttpsなら、それはGoogle側の古い記録で、放置でよい。

注意点があります。ads.txtを置いたからといって、未クロールのページが読まれるようになるとは限りません。無駄を止めるだけで、配分そのものはGoogleが決めます。期待を上げすぎない点が、実測で確かめた範囲です。

記録3:自前の巡回が、同じページを二度取っていた

無駄打ちは自分の側にもありました。本番を読む自作の道具が、対象のURLを複数の表から集めるとき、出どころで同じページの綴りが違っていました。検索実績から集めた側は末尾スラッシュ付き、sitemapから集めた側はスラッシュ無し。文字列としては別なので重複に見えません。実際は、スラッシュ無しは301でスラッシュ付きへ飛ぶので、1本につきログが2行(301と200)になります。

1回の走査で、網全体16,071本のうち3,795本、23.6%が同じページの二度取りでした。ある1サイトでは862ページに対して1,362本を投げていました。ログの行数では2,082行が1,082行へ、約48%減りました。canonicalは両方ともスラッシュ付きを指していて、Googleから見た問題はなく、損していたのは自分のサーバーの負荷だけです。

見つけたきっかけは、アクセスログのUser-Agent別の集計で、1位が自分の巡回(11,097ヒット、22%)だったことでした。直し方は、対象URLの重複キーを正規化することです。末尾スラッシュを落とし、%エンコードを解く。ただし大文字小文字は揃えません。Linuxでは別ファイルになりうるからです。本番を叩かずに対象数だけ数える口も付けました。そうしないと、減ったことを確かめるために本番を1周することになります。この巡回の量が別の問題を起こした話は自分の巡回でサーバーに止められた記録にあります。

よくある質問

広告を入れないサイトにもads.txtは必要ですか。

Googlebotは広告の有無に関係なく取りに来るので、置いておくと404の無駄を止められます。中身は宣言だけで構いません。有効な行が無いads.txtは、販売を許可している事業者がいないという正しい宣言になります。

ads.txtを置けば、未クロールのページが読まれますか。

保証はありません。実測で言えるのは、クロールの無駄を止めることまでです。配分そのものはGoogleが決めるので、置いた効果を、ページが読まれた数で語らないようにしています。

Googlebotかどうかは、どう見分けますか。

User-Agentの名乗りではなく、接続元のIPで判定します。名乗りは誰でも書けるので、名乗りで数えると偽装や別のクローラーが混ざります。

次に読むページ