「SEOはコンテンツがすべて」
──そう言われて10年。だが現実は、Apacheの設定ひとつで Google Search Console(以下GSC)の評価は真逆になる。
sitemap.xml が “HTMLで返る” だけでクロールが止まり、
no-store の一行で Discover に再浮上する。
本稿では「GSCが静かになるまで」実際にサーバーで行った設定と、確認コマンドを紹介する。
対象環境は WordPress+Apache(mod_headers, mod_cache, mod_deflate 有効)。
「本記事は“Search Consoleが黙る構成”シリーズ第1回です」
🧭 1. sitemap.xml は “XML+no-store” が唯一の正解
curl -sI https://example.com/sitemap.xml | egrep -i 'HTTP/|content-type|cache-control|vary|set-cookie'
理想的な出力:
HTTP/2 200
content-type: application/xml; charset=UTF-8
cache-control: no-store, max-age=0
vary: Accept-Encoding
(Set-Cookie なし)
💡 ポイント: sitemap.xml に
Set-Cookie が付くと Googlebot がキャッシュを回避し、 毎回オリジンにアクセスするためインデックス更新が遅くなる。 また text/html MIME は即「エラー」扱い。 ⚙️ 2. HTMLページは “no-store” で安定クロールさせる
curl -sI https://example.com/ | egrep -i 'cache-control|pragma|expires'
理想的な出力:
cache-control: private, no-store, no-cache, must-revalidate, max-age=0
pragma: no-cache
expires: Wed, 11 Jan 1984 05:00:00 GMT
🧩 なぜ必要? WordPress標準では
public, max-age=600 のように中途半端にキャッシュされることがあり、 Googlebotが「古いHTML」を再評価 → Soft404扱いになるケースがある。 🧱 3. CSS・JS・画像は逆に “immutable” で固定
curl -sI https://example.com/wp-content/uploads/sample.jpg | grep cache-control
理想的な出力:
Cache-Control: public, max-age=2592000, immutable
💡 解説: 静的リソースはキャッシュされてこそ性能が出る。 特に
immutable 指定は Lighthouse / PageSpeed での LCP 改善に直結。 📡 4. REST / Feed は Cookie が残っていてもOK
curl -sI https://example.com/wp-json/wp/v2/posts?per_page=1 | egrep -i 'cache-control|vary|content-type'
curl -sI https://example.com/feed/ | egrep -i 'content-type|vary'
期待される状態:
cache-control: private, no-store, no-cache, must-revalidate, max-age=0
vary: Cookie,Accept-Encoding
content-type: application/json; charset=UTF-8
🧠 豆知識: WordPressのRESTやRSSは「ログイン状態」で内容が変わるため、
Vary: Cookie が付くのは仕様上正しい。ここを無理に削るとWP-APIのキャッシュ事故が起きる。 🔐 5. ログイン画面は noindex + noarchive が必須
curl -sI https://example.com/wp-login.php | grep x-robots-tag
理想的な出力:
x-robots-tag: noindex, nofollow, noarchive
⚠️ 重要: これが無いと
wp-login.php がインデックス候補に入り、 「アクセス可能なログインURL」としてGoogleに晒される。 SEO以前にセキュリティリスク。 🧰 6. Apache モジュール整合性チェック
sudo apachectl -M | egrep 'cache|headers|deflate'
💡 理想状態:
mod_headers ✅ / mod_deflate ✅ / mod_cache_disk ❌(OFFまたはCacheDisable済)
mod_headers ✅ / mod_deflate ✅ / mod_cache_disk ❌(OFFまたはCacheDisable済)
# 例: vhost内でmod_cacheを確実に除外
CacheDisable /wp-admin
CacheDisable /sitemap.xml
CacheDisable /wp-login.php
🚀 7. 最低限のcurlチェックコマンドまとめ
# HTML(トップページ)
curl -sI https://example.com/ | egrep -i 'cache-control|pragma|expires' # Sitemap
curl -sI https://example.com/sitemap.xml | egrep -i 'content-type|set-cookie|vary|cache-control' # CSS/画像
curl -sI https://example.com/wp-content/themes/child/style.css | grep cache-control
curl -sI https://example.com/wp-content/uploads/2022/sample.jpg | grep cache-control # RSS/REST
curl -sI https://example.com/feed/ | egrep -i 'content-type|vary'
curl -sI https://example.com/wp-json/wp/v2/posts?per_page=1 | egrep -i 'vary|cache-control' # Login
curl -sI https://example.com/wp-login.php | grep x-robots-tag
🎯 結論:「SEOは中身ではなく応答ヘッダで決まる」
SEOを語るなら、まず
curl -Iを打て。Googlebotが最初に読むのはHTML本文ではない。
最初の200バイト──HTTPヘッダこそが評価の分かれ目。sitemap.xmlに
Set-Cookieが残っている限り、
どんな記事も “届かない”。
次回予告
次回:Soft404の実体をApache設定で真っ二つにします(Rewrite/Headersの実コード付)
関係記事
不合格じゃない!郵便局で理解するGoogle Search Consoleとnoindexの関係
Search Consoleからの挑戦状。この難問にこたえてみろ
Google Search Console徹底解説:インデックス不安定の原因と対策
【体験談】GSCで「wp-login.php」がインデックス候補に!? WordPressログインURLの落とし穴と対策


コメント