[ウェブ収益化 #2] 静的サイトのGoogle AdSense審査自動化: ads.txt 404クロールエラー解決とHeadTags連携
· 約5分

📌 重要ポイント (TL;DR)
- 課題 (Problem): 動的CMS (WordPress) と異なり、GitHub Pagesで運用されるDocusaurusやNext.jsなどの静的サイトジェネレーター (SSG) では、**「要注意 - 収益に重大な影響が出ないよう、ads.txt ファイルの問題を修正してください」**という警告やクローラーのブロックが頻発します。
- 解決策 (Solution): Docusaurusの
headTags設定でパフォーマンスを損なわずに所有権確認メタタグを注入し、static/ads.txtによりルートディレクトリへ完全配信し、Cloudflare WAFでGooglebot-AdsTxtクローラーを例外許可します。- 成果 (Result): クローラーアクセス成功率100%、
/ads.txtの404エラーゼロを達成し、Lighthouseパフォーマンススコア95点以上を維持しながらAdSense審査要件を満たしました。
1. 静的サイトにおける AdSense 導入の壁
開発ブログをカスタムドメイン (https://globaldevlog.com) に移行すると、次のステップは Google AdSense による収益化 です。しかし、静的サイトジェネレーター (SSG) では特有の技術的配慮が必要です:
- プラグインや動的バックエンドの不在: プラグインが自動でメタタグや
ads.txtを設定してくれるわけではないため、ビルド設定で明示的に定義する必要があります。 - クライアント側ハイドレーション vs 静的Head注入: Reactコンポーネント内で遅れてスクリプトを読み込むと、クローラーが判定する前に検証が失敗する恐れがあります。
ads.txt404 クロールトラップ: クローラーがhttps://ドメイン/ads.txtに正常にアクセスできないと、審査却下や収益制限が発生します。
2. Step 1: Docusaurus に所有権確認メタタグを挿入
AdSenseコンソール (サイト > サイトを追加) でドメインを登録する際、所有権の確認が求められます。静的サイトでは headTags オプションによるメタタグ挿入 が最も軽量で確実です。
📐 設定コード (docusaurus.config.ts)
import type {Config} from '@docusaurus/types';
const config: Config = {
title: 'Global Dev Blog',
url: 'https://globaldevlog.com',
baseUrl: '/',
// Google AdSense 所有権確認メタタグの注入
headTags: [
{
tagName: 'meta',
attributes: {
name: 'google-adsense-account',
content: 'ca-pub-XXXXXXXXXXXXXXXX', // 自身のパブリッシャーID
},
},
],
// ... その他の設定
};
export default config;
3. Step 2: ads.txt のルート配置と404エラー防止
AdSense審査後によく発生する警告を防ぐため、ファイルを静的アセットディレクトリに配置します:
static/ads.txtを作成:google.com, pub-XXXXXXXXXXXXXXXX, DIRECT, f08c47fec0942fa0- デプロイの実行:
npm run deploy
curlによる確認:curl -I https://globaldevlog.com/ads.txtHTTP/2 200およびcontent-type: text/plainが返ることを確認します。
4. Step 3: Cloudflare WAF によるクローラー許可設定
Cloudflareのプロキシ経由で配信している場合、Bot Fight ModeがGoogleのクローラーを誤検知してブロックすることがあります。
flowchart LR
Bot["Googlebot-AdsTxt クローラー"] --> Edge["Cloudflare 엣지 WAF"]
Edge -->|"User-Agent と ASN を検証"| Rule{"WAF セキュリティルール"}
Rule -->|"Bot Fight Mode (誤検知)"| Drop["403 Forbidden / チャレンジ"]
Rule -->|"バイパスルール"| Origin["GitHub Pages (/ads.txt)"]
Cloudflare WAF カスタムルールの作成
- 式:
(http.user_agent contains "Googlebot-AdsTxt") or (http.user_agent contains "Mediapartners-Google")
- アクション: スキップ (Skip) — WAFやBot検証をバイパスしてオリジンへ直接リクエストを通します。
5. AdSense 一発合格のための4大チェックリスト
| 審査項目 | 必須基準 | 不足時の却下理由 |
|---|---|---|
| 1. 必須ポリシーページ | /privacy-policy (プライバシーポリシー)、/about、/contact の完備 | ナビゲーション違反 |
| 2. オリジナルコンテンツ量 | 20〜30本以上の質の高い独自技術記事 (各1,500字以上) | 価値の低いコンテンツ |
| 3. リンク切れゼロ | 404エラーや未解決アンカータグが存在しないこと | サイト機能不全 |
| 4. モバイルレスポンシブ | スマートフォン表示での横スクロールやレイアウト崩れなし | モバイルユーザビリティ不足 |
6. まとめと今後の展開
これで、headTags によるメタタグ検証、static/ads.txt の完全配信、Cloudflare WAFによるクローラー例外設定が整い、AdSense審査への万全の体制が整いました。
- 次回の 第3回 では、Google Search Console、Naver Search Advisor、Bing Webmaster Toolsへの6言語マルチサイトマップ登録とSEO自動化について解説します!
📌 Global Dev Blog の関連記事:
• Global Dev Blog - GitHub Pages カスタムドメイン & Cloudflare DNS 設定ガイド
• Global Dev Blog - 静的サイトのセキュリティ強化と npm audit 脆弱性の真実
• 6言語で展開中の Global Dev Blog ホームはこちら
