← ブログ一覧

AdSense落ちた。じんべいラボが実際にやった対策

Google AdSenseに「有用性の低いコンテンツ」で却下されたじんべいラボの実際の対策記録。noindex化・重複統合・E-E-A-T強化のbefore/afterを解説。


登場人物

  • リナ社長 … 高校生なのに会社経営するやり手ギャル。テックにも強くてAI活用が得意。
  • タクヤ … 入社3年目の男性社員。真面目で少しだけコードが書ける。

「タクヤ、AdSense落ちたんだけど。2回目」

「……2回目ですか。理由は同じ『有用性の低いコンテンツ』ですか?」

「そう。6月6日にまた通知来てさ。さすがにちょっとへこんだわ。でも原因は薄々わかってたんだよね。ロトの解析ページとか、記事ゼロのコンテンツ一覧とか、ガチで『薄い』ページがサイトに残ったままだったし」

「確かに。ユーザーが訪れても情報量がほとんどないページが複数あった状態でしたよね」

「だから6月20日に一気にやっつけた。今日はその記録をそのまま書く。捏造なし、実際にやった変更だけ」


AdSenseが「有用性の低いコンテンツ」と判断する理由

Googleが見ているのはサイト全体の品質スコアだ。1記事が良くてもサイト内に「薄いページ」が散在していれば、サイト全体を低品質と判断する。じんべいラボの場合、具体的に問題になっていたのは以下の点だった。

  • ナビに載っているのに内容が薄いページ: ロト解析ページはヘッダーにリンクがあり、Googleのクロールが当然通る。しかし統計データの羅列のみで独自の解説テキストがほとんどなかった
  • 記事ゼロのコレクションページ: ダイビングログ一覧ページはコンテンツが一件もない状態で公開されていた
  • sitemapに含まれている薄いページ: sitemap.xml/loto/ 系のURLが全部入っていたため、Googlebotが優先的にクロールしていた
  • 重複ぎみの記事: Tailwind v4の記事が2本あり、内容が重なっていた

「薄いページが1ページでもあると全体の評価が下がるって、わかってはいたんですけど後回しにしてましたね」とタクヤ。

「そうそう。気づいてたけど『まあいっか』って放置してたやつ。AdSenseに2回落ちてようやく本気になったやつ、それが私です」


判断基準: 削除・noindex・充実化の3択

薄いページに気づいたとき、やることは3択しかない。

ページの状態対処理由
将来的にも充実させる見込みがない削除サイトの評価を引き下げるだけ。URLを残す意味がない
今は薄いが、いずれコンテンツを追加したいnoindexクロール対象から外しつつURLは保持できる。後で noindex を外せば復活できる
今すぐ充実させられる充実化解説・使い方・独自テキストを追加してインデックス維持
ナビ・sitemapに載っているリンクもセットで外すnoindexだけでなくナビとsitemapからも除去しないと意味が薄い

「削除とnoindexって何が違うんですか?」

「noindexはGoogleへの『見なくていいよ』というシグナルで、URLとコンテンツはそのまま残るじゃん。後でコンテンツ充実したら noindex={true} を外すだけで復活できる。削除したら戻すのにURL設計からやり直しになるから、迷ったらnoindexが安全だよ」


実際にやった8つの変更

1. Headerのロト解析リンクを削除

ヘッダーにリンクがある = Googleが「重要ページ」と認識してクロールする。薄いページへのナビリンクは外すのが先決。

<!-- src/components/Header.astro -->
<HeaderLink href="/">ホーム</HeaderLink>
<HeaderLink href="/blog">ブログ</HeaderLink>
- <HeaderLink href="/loto/miniloto">ロト解析</HeaderLink>
  <HeaderLink href="/tools">ツール</HeaderLink>
<HeaderLink href="/about">について</HeaderLink>

「たった1行の削除ですけど、これが一番効いてそうですよね」

「そう。Googleがヘッダーのリンクをどう評価してるかって、サイト全体のナビゲーション構造として読んでるから、薄いページへのリンクがトップナビにあるのは普通にまずい」

2. ロトページにnoindex追加

ロト解析ページ自体は残しつつ、インデックスから外した。noindex={true}BaseHead コンポーネントに渡すだけで完了する。

<!-- ❌ Before -->
<BaseHead title="ミニロト解析 | jinbei-lab" description="ミニロト全当選番号の出現頻度・傾向を分析" />

<!-- ✅ After -->
<BaseHead title="ミニロト解析 | jinbei-lab" description="ミニロト全当選番号の出現頻度・傾向を分析" noindex={true} />

3. トップページのロトカードを宇宙時計に差し替え

トップページのカードは「このサイトで何ができるか」をGoogleに伝える重要なシグナル。薄いコンテンツへのリンクはここからも除去した。

<!-- src/pages/index.astro -->
- <a href="/loto/miniloto" class="exp-card">
-   <span class="exp-icon">🎯</span>
-   <h3>ミニロト解析</h3>
-   <p>出現頻度・傾向分析・予測</p>
+ <a href="/tools/cosmic-clock" class="exp-card">
+   <span class="exp-icon">🌌</span>
+   <h3>宇宙時計</h3>
+   <p>138億年を1年に圧縮したコスモスカレンダー</p>

「宇宙時計、実際に使ってて面白いコンテンツなので、こっちをトップに出すほうが自然ですね」

「えぐくない?138億年を1年に圧縮するっていう発想、普通に好きだし。コンテンツの密度も全然違うから、トップに出すならこっちが正解だわ」

4. sitemapから /loto/ と /admin/ を除外

ヘッダーのリンクを外しても、sitemap.xml に残ったままだとGooglebotは引き続きクロールする。フィルターを追加して完全にクロール対象から外した。

// astro.config.mjs

// ❌ Before
integrations: [mdx(), sitemap()],

// ✅ After
integrations: [
  mdx(),
  sitemap({
    filter: (page) => !['/loto/', '/admin/'].some((p) => page.includes(p)),
  }),
],

filter 関数の中で Array.some() を使っていますね。除外パターンが増えても配列に追加するだけで対応できる」

「そう。最初は /loto/ だけ書いてたんだけど、/admin/ も絶対に外すべきだったし、こういう書き方にしておくと後から楽じゃん」

5. ダイビングログ一覧を動的noindex化

記事が0件の状態で一覧ページを公開するのは最悪のパターン。コレクション件数を取得して動的にnoindexを切り替えることで、コンテンツが揃ったタイミングで自動的にインデックス対象に戻せる。

---
// src/pages/diving/index.astro
// D1からpublished状態のログを取得(Cloudflare Pages環境)
const db = (env as CloudflareEnv).DB as D1Database | undefined;
let logs: DiveLog[] = [];
if (db) {
  const result = await db.prepare(
    "SELECT ... FROM dive_logs WHERE status='published'"
  ).all();
  logs = result.results as DiveLog[];
}
---
<BaseHead
  description="ダイビングの記録と海中写真"
  noindex={logs.length === 0}
/>

「これ、記事を書いたら自動でインデックス対象になるのが賢い設計ですね」

「そう。わざわざコードを触り直す必要がないし、書き続ければ自然にSEO対象になっていく。ダイビングログはちゃんと書いていくつもりだから、このまま待っておく」

6. Tailwind v4記事の重複統合

tailwind-v4-config-css-zero.md(内容が薄い方)を削除し、tailwind-v4-css-first.md(メイン記事)にLightning CSS・コンテナクエリ等の内容を集約した。

「重複記事って、Googleからすると『どちらを評価すべきかわからない』状態になるんですよね」

「そう。薄い方を消して厚い方に全部まとめた。記事本数が減るのはちょっと心理的に嫌だったけど、1本が充実してる方が断然いい」

7 & 8. 既存コンテンツの充実化とAboutの刷新

ミニロトのトラブル記事3本には、「ロト関連の問題に限らず、Astroで外部APIと連携する際の汎用的なデバッグ手順」を追加した。E-E-A-T(経験・専門性・権威性・信頼性)の観点からは、実際に経験したトラブルと解決策をコンテキスト付きで書くことが重要で、統計データの羅列とは全く別物だ。

aboutページは特に刷新が大きかった。運営者の実体験・サイトの編集方針・キャラクター(リナ社長・タクヤ)の背景をしっかり書き足した。

「aboutって地味に軽視しがちですけど、審査で絶対見られますよね」

「Googleの審査担当者(人間かAIかはともかく)がサイトの信頼性を判断するとき、aboutは最初に見るページの一つ。『このサイトは誰が何のために運営してるの?』が見えない状態だと、コンテンツがいくら良くてもE-E-A-Tスコアが低くなる。半ページの自己紹介じゃダメで、実体験と方針が見えることが必要」


対策後の状態と再申請

「8つの変更を全部pushしてから再申請したのが6月20日。結果待ちのところではあるんですけど、今回は自信あります?」とタクヤが聞いた。

「自信はある。前回との違いは、問題のあるページを表面的にいじるんじゃなくて、ヘッダー・トップ・sitemap・ページ本体を全部セットで対処したこと。Googleのクロールパスをちゃんとふさいだのが今回のポイント」

「noindexだけつけてもナビに残ってたら意味ないですもんね」

「そうそう。Googlebotはナビからリンクをたどってくるから、ページのmetaタグだけ変えてもリンクが残ってたら普通にクロールしてくる。ヘッダー・トップページ・sitemapの3点セットで外すのがセットで対策の意味になる」

なお、じんべいラボのロト解析機能は確率論・統計学の学習を目的としたツールであり、当選を保証するものではない。


持ち帰り

薄いページが1枚あるとサイト全体の評価が下がる。対処の基本は「削除・noindex・充実化の3択で振り分けてから申請する」。

重要なのは noindex は削除と違う という点だ。noindex={true} はGoogleへの「見なくていい」シグナルで、URLとコンテンツはそのまま保持される。コンテンツが充実したらフラグを外すだけで復活する。削除してしまうとURLの再設計が必要になる。迷ったらnoindexを選ぶ理由がここにある。

そして noindex だけでは不十分。ナビとsitemapからリンクも外すことを必ずセットでやる。Googlebotはナビリンクをたどってクロールするため、ページのmetaタグだけ変えても効果が半減する。

薄いページ → 削除 or noindex or 充実化(3択)

         noindex・削除を選んだ場合

         ヘッダー・トップ・sitemap からもリンクを除去

         AdSense申請

AdSenseに通ったらまた記事にする。

コメント