記事を置いているサイトに Google Search Console と AdSense を 1 日で設置した。手順自体は単純だが、途中で「これ失敗した?」と不安になる表示がいくつかある。

実際にやった順番と、不安になったポイントの正体、Next.js 固有のハマりどころを書く。

なお AdSense はこの時点ではまだ審査待ちで、広告は 1 円も表示されていない。そこも含めて実録。

記事を置いているサイトに Google Search Console と AdSense を 1 日で設置した。実際にやった順番と、途中で不安になった表示の正体、Next.js 固有のハマりどころを書く。

Search Console: ドメインプロパティ + DNS TXT

ドメイン全体を測りたいので URL プレフィックスでなくドメインプロパティで登録した。検証は DNS の TXT レコード。Vercel でドメインを管理しているなら 1 コマンド:

vercel dns add example.com '@' TXT 'google-site-verification=xxxx'

数分で「所有権を証明しました」が出た。この TXT レコードは消すと所有権が失効するので、掃除のつもりで消さないこと。

「サイトマップを取得できませんでした」は慌てない

sitemap.xml を送信した直後、ステータスが「取得できませんでした」と出た。実体を curl すると 200 で正しい XML。これは送信直後の表示の遅れで、数日すると「成功しました」に変わる。送った直後の赤表示で sitemap を作り直し始めると無駄足になる。

AdSense: 審査リクエストまで

流れは、サイトを追加 → head にスニペット設置 → ads.txt 設置 → サイト上でコードを確認 → 審査をリクエスト。終わるとステータスが「準備中 / 審査待ち」になる。

押さえておく点:

  • 広告は審査承認後にしか出ない。 スニペットを置いた時点では何も表示されないのが正常
  • 審査は数日〜数週間かかる
  • ads.txt は public/ads.txt に 1 行置くだけ (内容は AdSense の画面からコピー)

Next.js 固有の罠: head に素の script を書くと hydration 警告

App Router の layout の head に素の <script async src="...adsbygoogle.js"> を書いたら、開発サーバーで React の hydration mismatch 警告が出た。AdSense のローダーが hydration 前に head を書き換えるのが原因。

直しは next/script:

<Script
  id="adsbygoogle-loader"
  strategy="afterInteractive"
  src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXX"
  crossOrigin="anonymous"
/>

afterInteractive なら hydration 後に読み込まれるので警告が出ない。console に「data-nscript 属性は非対応」という警告が 1 本出るが、これは無害。

まとめ

  • Search Console はドメインプロパティ + DNS TXT。TXT は永久に残す
  • sitemap 送信直後の「取得できませんでした」は表示の遅れ。実体が 200 なら待つ
  • AdSense の広告は承認後にしか出ない。審査待ちで数日〜数週間
  • Next.js では広告スニペットを next/script (afterInteractive) で入れる