かくてもあられけるよ

アーリーリタイアしてシェアハウスで暮らすノマドなミニマリストのライフハックブログ

トップページだけインデックス登録されない時は.htaccessを疑え

独自ドメインレンタルサーバWordPressで運用している別のブログで、開始から1か月経ってもインデックス登録されず、ウェブサイトがGoogle検索にかからないという問題に悩まされていた。あらゆる対策を打っても解決せずお手上げだったところ、サーバの上位ディレクトリに「.htaccess」ファイルがあるのに気がついた。この中に、「index.htmlを参照せよ」という記述があり、WordPressの生成するindex.phpと齟齬が生じていたのが原因とわかった。こんな間抜けな理由ではまる人は少ないと思うが、今後のために顛末を記しておく。

ブログ開始時から出ていたトラブルの兆候

ウェブサイトを開設してから「トップページがインデックスされていない」という状況に気づくまでに、いくか怪しい兆候が出ていた。

WordPressのログイン画面でリダイレクトループに陥る

WordPressをセットアップした際、「wp-login.php」のページでアカウントとパスワードを正しく入力しても、なぜか管理画面に遷移せず、リダイレクトループになってエラー画面が表示される現象があった。WordPressをサブディレクトリに入れたので、そのあたりが原因かと思ったが、とりあえずログイン後に直接URLを叩けば管理画面に入れたので、放置してあった。

AdSenseの審査にどうやっても受からない

1か月ほど記事を書きためて、満を期してGoogle AdSenseに審査を申し込んだが、「不十分なコンテンツ」を理由に落とされた。その後、拒絶の理由を推測しながら様々な対策を施したが、一向に受からず、結局別サイトで申請したらあっさり受かった。

kenko-san.hateblo.jp

 今となっては検証できないが、AdSenseに受からなかったのはコンテンツの中身が問題だったのではなく、単にGoogleクローラーがトップページにたどり着けなかったのが原因だったのかもしれない。

AdSense広告を配置してもデータが上がってこない

ようやく取得できたAdSenseアカウントを使って広告ユニットを生成し、ウェブサイトに配置してみた。問題なく広告は表示されているのだが、AdSenseのパフォーマンスレポートを詳しく見ると、このサイトの広告だけ、いつまでたっても「該当期間のデータはありません」と表示されている。ほかのサイトに配置した広告からは、わずからながら表示回数やクリック数のデータは上がってきているのに、画面上は広告が出ているにも関わらずAdSenseにカウントされていないのはおかしいと気づいた。

f:id:kenko-san:20160528135315j:plain

AdWordsでも広告が不承認

キーワードプランナーを使ってみたくてGoogle AdWordsに登録しようとしたところ、実際に予算を決めて広告キャンペーンを打たないと先に進めない仕様になっていた。仕方なく月10円とかの超低予算で広告を出稿してみたが、しばらくして見るとステータスが「不承認」になっていた。その理由に「無効なHTTP応答コード」とあったので、広告内の文言やサイトの内容がGoogleのポリシーに違反しているとか、そういうことはなさそうだ。

f:id:kenko-san:20160528134608j:plain

Search Consoleでクロールエラー

GoogleのSearch Consoleに管理しているサイトをいくつか登録してみたが、問題のサイトだけ、いつまで経ってもダッシュボードにスクリーンショットが表示されなかった。詳しく調べると、「URLエラー 1アクセスが拒否されました」というクロールエラーが出ていた。

f:id:kenko-san:20160528135247j:plain

一般的なインデックス対策は効果がなかった

状況を整理すると、以下の2点が問題だとわかった。

  1. サイト全体でなく、トップページだけインデックスされない
  2. ブラウザ上では正しく表示されているのに、クローラーが巡回できない

特に2は関係が逆であれば、作為的なクローラー対策としてGoogleからペナルティを受けてもおかしくない。一応、書籍やネットで調べて、一般的な「ウェブサイトがインデックスされないときの対策」として、次のようなものはすべて試したが、まったく効果がなかった。

成果を出し続けるための 王道SEO対策 実践講座

成果を出し続けるための 王道SEO対策 実践講座

 

WordPressの設定確認

ありがちだが、WordPressの設定>表示設定で「検索エンジンがサイトをインデックスしないようにする」にチェックがついていないかはまず確かめた。また、生成されたindex.phpにnoindexのメタタグがついていないのも確認した。

robots.txtをSearch Consoleから送信

robots.txtWordPressですでに自動生成されているもので問題なさそうだった。念のため、disallowをすべて外したダミーのrobots.txtをつくってサーバにアップし、そちらが優先的に参照されるようにした。

sitemap.xmlをSearch Consoleから送信

WordPressXML Sitemap Generatorというプラグインを入れてsitemap.xmlを生成し、robots.txtに追記するとともにSearch Consoleから送信した。「送信いただいたURL」は40個くらい出たが、いずれもインデックス登録されなかった。

Fetch as Googleでインデックスに送信

Search Console内のFetch as GoogleにサイトのURLを入れると、ステータスが「エラー」と出るだけで、詳細情報は得られなかった。また、トップページのindex.phpまで指定してみると、「リダイレクトされました」の表示が出た。ここで、サイト内の個別記事のURLを入れると、問題なく取得・レンダリングが完了して、インデックス送信もできた。しばらくすると、送信した個別記事だけはGoogleでかかるようになった。しかしsite:○○やinfo:○○でサイトのURLを入れても、トップページは出てこなかった。

WordPressやカスタムテーマの設定をデフォルトに戻す

クローラが内部リンクをたどれないのが原因かと推測して、デザイン上、カスタム設定で非表示にしたり、cssでdisplay:none;に設定していた項目を復活させた。なるべくWordPressとテーマのデフォルトに近い状態に戻した。

レンタルサーバのIP制限がないのを確認

サイトを設置してあるサーバの方で、IPアドレスをもとに海外からのアクセスを弾く設定がされていないか調べた。さくらインターネットでは「国外IPアドレスフィルタ」の設定があるらしいが、自分が借りているXREAでは、そのような制約はなさそうだった。今までも海外の旅先から自分のサイトはちゃんと見えていた。

Googleからペナルティを受けている可能性も?

日頃の行いが悪くて、なにかGoogleからアカウントもしくはIPアドレスに対して全体的なペナルティを課されているのだろうか。いろいろ心当たりがなくはないので、もう別のサイトやアカウントを作ってやり直すしかないかとか考えたが、トップページ以外はインデックスされるので、ペナルティが原因かどうかは怪しかった。

上位階層の.htaccessが原因と判明

Search Consoleの「クロールエラー」を見ると、「エラーのあるページ」のレスポンスコードが403と出ていた。HTTP 403 Forbideen、すなわちそのページがクローラーに対しては閲覧禁止されていて、何らかの認証制限がかかっているということだ。ここでようやく.htaccessの存在を思いついた。

f:id:kenko-san:20160528134538j:plain

WordPressを入れているディレクトリには.htaccessファイルがなかったので、これは原因でないと思っていたが、改めて調べると、なんと上位階層に設置してあった。しかもその中に「DirectoryIndex index.html」という記述があり、これがWordPressの生成するindex.phpとバッティングしてリダイレクトループが発生していたらしい。

上位ディレクトリのサイトを作ったのは10年くらい前だが、おそらくその際、index.htmlとindex.phpを併存させてデバッグでもしていたのか、弊害はないのでそのまま放置してあったようだ。これを外すと、あっさりFecth as Googleのリクエストも通り、トップページをインデックスに送信できた。しばらくするとGoogleの検索にもかかるようになった。


結局、昔の自分が行った下手な設定が原因だったが、意外と解決に時間がかかったので、同じようなトラブルで悩む人は参考にしてほしい。