Google AdSenseの審査を受けるためには、まず「そのサイトが自分のものであること」をGoogleに証明する必要があります。

Astroで構築したブログを審査に出すにあたり、所有権の確認を完了させた一連の手順を記録します。これは審査通過の報ではなく、ようやく審査のリングに上がるための準備が整ったという、最初の一歩の記録です。

技術的な要件

Google AdSenseから提示される確認方法はいくつかありますが、今回は確実性を期すために以下の2つを併用しました。

  1. AdSense コード スニペット: 全ページの <head> 内に専用のJavaScriptを埋め込む。
  2. ads.txt スニペット: サイトのルート(/ads.txt)に特定の認証コードを含むファイルを設置する。

実装1:共通レイアウトへのスクリプト埋め込み

まずは、サイトのすべてのページにAdSenseの認証用スクリプトを埋め込みます。Astroでは共通のレイアウトコンポーネントで管理するのが効率的です。

src/layouts/BaseLayout.astro<head> セクションに、取得したコードを追加します。

<!-- web/src/layouts/BaseLayout.astro -->
<head>
  <!-- ...他のメタタグなど... -->

  {/* Google AdSense */}
  <script
    async
    src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-xxxxxxxxxxxxxxxx"
    crossorigin="anonymous"
  ></script>
</head>

環境変数で管理することも検討しましたが、審査用の共通コードであることを踏まえ、今回は直接記述しました。

実装2:ads.txt の設置

次に ads.txt です。通常は public/ ディレクトリに静的なファイルを置くだけで十分ですが、今回はAstroのエンドポイント機能を利用して、動的にファイルを生成する形式を採用しました。

環境変数化も考えましたが、静的サイトであるがゆえ管理すべき環境変数はほとんどないからハードコードで十分と考えた結果です。

src/pages/ads.txt.ts を作成し、以下のように記述します。

// web/src/pages/ads.txt.ts
import type { APIRoute } from 'astro';

export const GET: APIRoute = async () => {
  // 認証機関のID(f08c47fec0942fa0)はGoogle AdSenseで固定
  const content = `google.com, pub-xxxxxxxxxxxxxxxx, DIRECT, f08c47fec0942fa0`;

  return new Response(content, {
    headers: { 'Content-Type': 'text/plain' },
  });
};

ビルド時に dist/ads.txt が自動的に生成されます。

デプロイと検証

実装が完了したら、Cloudflare Pagesなどの環境へデプロイし、実際に外部からアクセスできることを確認します。

  1. 自分のサイトのドメイン(https://example.com/ など)のソースを表示し、<head> 内にスクリプトが存在するか。
  2. https://example.com/ads.txt に直接アクセスし、認証コードが表示されるか。

ブラウザで正しく表示されていることが確認できれば、AdSense管理画面に戻り「確認」ボタンを押します。

所有権の確認完了

私の場合、実装をデプロイしてから数分で「お客様のサイトは確認されました」というメッセージが表示されました。

所有権確認完了

AdSense管理画面での所有権確認完了

これでようやく審査が開始されます。

おわりに

「サイトが確認された」というのは、あくまでGoogleがこのサイトの持ち主を認識したというだけで、コンテンツの中身が審査に通ったわけではありません。

やれることはすべてやりました。あとは静かに結果を待つのみです。