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.jsonc の assets.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.tsx に meta() が無く、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つはまだです。
収益出るかの肝なので、次で通って欲しいところですね。