積み上げログ技術ブログ記事一覧へ

自主執筆記事

AdSenseに「有用性の低いコンテンツ」で落ちた原因を、記事340本の文字数を測って特定した

自動生成した記事340本を抱えた技術ブログが、AdSenseの審査に落ちた。理由は「有用性の低いコンテンツ」。感覚で直すのではなく、全記事の文字数と見出し構成を実測して原因を切り分けた。何が薄かったのか、どこを直したのかを数字で記録する。

サイト運営公開: 2026/08/24更新: 2026/08/24
AdSenseSEO自動生成noindexサイトマップ

01 / 本文

結論:薄い自動生成ページが340本あり、実質的な記事は5本だった

審査に落ちた通知には「有用性の低いコンテンツ」としか書かれていない。どのページが問題なのかは教えてくれない。

そこで、サイトマップに載っている全ページの本文を取得して、文字数を測った。結果はこうだった。

動画ページ168本:本文450〜530字

リポジトリ記事172本:本文1,200〜1,500字

手書き記事5本:本文1,440〜8,932字

自動生成の340本が、サイト全体の評価を引き下げていた。

02 / 本文

測り方

サイトマップからURLを集め、それぞれ取得してタグを落とし、文字数を数えるだけだ。スクリプトを書けば数分で終わる。

本文だけでなく、タイトルと見出しの並びも一緒に出すのが重要だった。文字数だけ見ていたら「1,500字あるなら十分では」と判断を誤っていた。

import re, urllib.request, statistics

sm = urllib.request.urlopen('https://example.com/sitemap.xml').read().decode()
urls = re.findall(r'<loc>([^<]+)</loc>', sm)

for u in urls[:20]:
    html = urllib.request.urlopen(u).read().decode('utf-8', 'replace')
    body = re.sub(r'<script.*?</script>|<style.*?</style>', '', html, flags=re.S)
    text = re.sub(r'\s+', ' ', re.sub(r'<[^>]+>', ' ', body)).strip()
    title = re.search(r'<title>([^<]*)</title>', html)
    print(f'{len(text):>6}字  {title.group(1) if title else ""}')

03 / 本文

何が薄かったのか

文字数以上に問題だったのは、340本すべてが同じ雛形だったことだ。

タイトルは「◯◯の設計・技術選定・コミット履歴を解説」「◯◯ 技術解説動画|△△の構成と改善」。リポジトリ名と言語名を差し替えただけで、340本が並んでいた。

見出しの構成も全記事で同一。本文も「主に Blade を使用し、公開コミットから機能追加と改善を積み重ねた過程を確認できます」のように、どのリポジトリに当てはめても成立する文章だった。

Googleの品質ガイドラインが言う「自動生成された、独自の価値がないコンテンツ」そのものだった。記事数が多いほど評価が下がる。

04 / 本文

直し方:消さずに、検索から外す

自動生成のページにも、制作物の記録としての価値はある。自分で見返すし、ポートフォリオとしても使う。だから削除はしなかった。

したことは3つ。

1. noindex にする。 follow は残すので、リンクは辿られる。評価の対象から外れるだけだ。

2. サイトマップから外す。 356件 → 18件になった。手書き記事5本と主要ページ13件だけが残った。

3. 何であるかを明示する。 記事一覧を「読み物」と「制作物の記録」に分け、自動生成ページの冒頭にも「自動でまとめた記録です」と書いた。読者に誤解させないためであり、同時に自分への戒めでもある。

// Next.js の App Router
export async function generateMetadata(): Promise<Metadata> {
  return {
    title: "...",
    description: "...",
    robots: { index: false, follow: true },
  }
}

05 / 本文

サイトマップは「出したいページ」だけ載せる

サイトマップに全ページを載せるものだと思い込んでいた。そうではない。検索結果に出したいページだけを載せるものだ。

356件のうち338件は、出したくないページだった。それを申告し続けていたのだから、評価が下がるのは当然だった。

06 / 本文

残る課題:実質5本では足りない

noindexとサイトマップの整理で、薄いページは評価対象から外れた。しかし残ったのは手書き5本だけだ。

AdSenseは「独自性のある質の高いコンテンツ」を求めている。5本で再審査を通すのは厳しい。

だから、この記事を含めて書き足している。実際に踏んだ問題と、その解き方なら、雛形では書けない。今回の調査そのものが題材になった。

07 / 本文

まとめ

「有用性の低いコンテンツ」と言われたら、感覚で直す前に測る。全ページの文字数、タイトル、見出し構成を出せば、どこが薄いかは数字で分かる。

自動生成のページは、消さなくてよい。noindex とサイトマップからの除外で、評価対象から外せる。

サイトマップは全ページを載せる場所ではない。検索結果に出したいページだけを載せる。

そして、記事数を増やすことと、内容を増やすことは違う。同じ雛形を340本並べても、1本分の価値にしかならない。

08 / 本文

AdSense対策シリーズ

審査に落ちてから、申請の準備が整うまでの記録です。

/articles/manual/adsense-low-value-content-measured/ — 落ちた原因を、記事340本の文字数を測って特定した(この記事)

/articles/manual/noindex-does-not-hide-from-adsense/ — noindex は審査には効かない。検索から消しても審査員には見えている

/articles/manual/adsense-required-pages-checklist/ — 申請に必要なページ一式。プライバシーポリシーに何を書くか

/articles/manual/whois-rdap-expired-domain-check/ — 登録したまま放置したドメインの生死を調べる(whois と RDAP)

コメント

この記事へのコメント

お名前だけで投稿できます。アカウント登録やログインは不要です。 いただいたコメントは確認のうえ公開します。