AdSenseに5回落ちて、サイトの点検を手でやるのをやめた

不承認のメールが3通、文面が完全に一致していました。 キャンペーンIDまで同じです。

これで5回目になります。 2回目の記事を書いたあと、3回目が8月17日、4回目が8月26日、5回目が8月31日。

審査の状態はこちらから見えない

不承認の状態だと、管理画面の「サイト」タブとポリシーセンターに入れません。 URLを直接叩いても初期設定の画面に飛ばされます。通知も0件です。

サイトの一覧に出ている行も動きません。 再申請してもリクエスト日時も更新されないので、その行を見ても申請回数も審査の状態も分かりませんでした。

向こうが何を見て落としているかは分からず、こちらの申請がどう扱われているかも分からない。 手元で確かめられるのは、自分のサイトの中身だけです。

チェックをツールで実施するように

ドメイン配下は、ルートと11のサブドメインで200ページを超えています。 ツールごとにサイトがあって、それぞれに解説コラムが6本ずつ、加えて利用規約とプライバシーポリシーと運営者情報。

毎回Claudeに審査はじかれる原因になりそうなところ洗い出して、と指示していましたが埒が明かないので、 sitemapを辿って全ページのHTMLを取得し、審査でNGになりそうな要因を洗い出すスクリプトを用意してもらいました。 sitemapに載っている213ページと、内部リンクを辿って見つかった173ページが対象です。

出てきたものを上から潰していきます。

存在しないURLが200を返していた

ツール系の10サブドメインで、存在しないURLにアクセスすると、トップページと同じ内容が200で返っていました。 広告も1枚出ています。

wrangler.jsoncassets.not_found_handling"single-page-application" になっているためでした。 SPAとして配信する設定なので、未知のパスは全部トップに落ちます。 設定どおりの動作ではあるのですが、外から見ると同じ中身のページがいくらでも生えていることになります。

10リポジトリとも "404-page" に変えて、広告なし・noindexの404ページを置きました。

http:// が301されていなかった

httpでアクセスすると、リダイレクトされずにそのまま本文が返っていました。 Cloudflareの「Always Use HTTPS」が未設定だったためです。 ゾーン単位の設定なので、有効にすれば全サブドメインに効きます。

※ HSTSは入れていません。一度入れると取り消せないので、そこまでは踏み込まないことにしました。

h1が無いページと、OGPが出ていないページ

h1が0個のページが5本ありました。 共通のヘッダーコンポーネントがh1を出す作りで、サブページはそのヘッダーを描画しない構造だったためです。

og:urlが出ていないページは、まとまった数がありました。 MojiRescueが18ページ、LiteMDが12ページ、ルートが4ページ。 LiteMDはトップ以外の11ページで、og:title・og:description・og:image・og:typeも出ていません。

React Router v7では、子ルートが meta() を定義すると、rootで定義した配列は継承されずに置き換わります。 トップページだけ home.tsxmeta() が無く、rootの定義がそのまま出ていたので、トップを見ているかぎり気づけませんでした。

似たことが、Next.jsで作っている日本語AIテックまとめの側でも起きていました。 こちらは metadata がキー単位で親を継承するので、canonicalを共通レイアウトに置くと、自分で定義していない子ページが親のURLを引き継ぎます。 トップ用の metadata を別に作って、そこにcanonicalだけ書く形にしました。

広告を置いてよいページの基準を決めた

点検のついでに、広告の方も測りました。 sitemapを辿って、各ページのスロットIDの有無と、実際に表示される文字数を数えるスクリプトです。

そのうえで、広告を置いてよいページの下限を本文904字にしました。 すでに広告を載せているコラムのうち、いちばん短いものがその文字数だったからです。 自分で線を引かないと判断がぶれるので、実測値をそのまま基準にしました。

この基準で、薄いページ9件から広告ユニットを外しました。 逆に、本文が足りていなかったツールページ9本は文章を足して、1,371〜1,697字になったところで広告を戻しています。

カテゴリページの方は、記事が5本に満たないカテゴリを自動でnoindexにする形にしました。 記事が2本しかないカテゴリページが索引に載っても、出るのは一覧だけで価値のないページと判断されてしまうので。

現状

修正したあともう一度213ページを走査して、自己チェックでの指摘は0件になりました。

日本語AIテックまとめは、サイト全体をnoindexにしています。 外部の記事を集めるのが主体で独自の文章が薄いサイトなので、審査の対象から外れるまで待つ形です。 承認されたら設定を戻すだけで済むようにしてあります。

6回目の申請は、そのサイトのURLが検索インデックスから落ちるのを待っているところです。 URL検査で3つのURLを見ていて、9月2日時点で1つが「Google に登録されていません」に変わりました。残り2つはまだです。

収益出るかの肝なので、次で通って欲しいところですね。