新規の案件で、Fetch as Google掛けてもグーグルにインデックスされない件があり、色々調べた結果、解決できたので、記録しておきます。
うちEC-CUBEは初めてだったんでよく判らないのですが、お客さんが普通にプラグイン入れただけ(?)で、こんな状態になってた模様なので、注意喚起の意味もあります。
あんまり大した事無いですが、同様の状態でお困りの方、お心当たりのある方は、拡散して頂けますと幸いです。
※お客様のサーバーやSEOのことですので、要点以外は、多々フェイク入っておりますので予めご了承下さい。
ご依頼時、Fetch as Googleをやっても「アクセスできません」でエラーの状態
2ヶ月も前(6月頃)にEC-CUBEでサイトを構築されたサイトなのですが、一向にGoogleにインデックスされない、Fetch as Googleをやっても「アクセスできません」でエラーになる、という状態でした。
一応、上位表示案件でご依頼だったのですが、インデックスされない(siteコマンドで「ありません」状態)ので、何もできない、という段階で、ご依頼ありました。
ただ、ブラウザでみるとサイトは表示されるので、何だろうな?という感じです。
確認したこと
こちらでも、各種確認しました。
・siteコマンドでやっても検索結果がでない
・ウェブマスターツールの管理者権限頂いて、こちらでFetch as Googleやっても同じく「アクセスできません」
・でも、ブラウザでは表示できる
でした。
ウェブマスターツールで色々試してみると、
・Fetch as Googleのモバイル系の処理は通る
・「robots.txt テスター」ではテスト可能
だったので、本当にアクセス自体が禁止されているようではない、と判断しました。
Fetch as Googleのモバイル系の処理の中で、「Googlebot タイプ: モバイル: cHTML」でFetch as Googleやってみると、「リダイレクトされました」という結果になったので、当初は、「リダイレクト(.htaccess)の設定?」と思って、お客様にサーバーへの接続情報をいただきました。
エラーログを確認するとPHP Fatal errorの連発
サーバー上のエラーログを見てみると、EC-CUBEのプラグインのPHP Fatal errorが連発されていました。
PHP Fatal error: Call to undefined method LC_Page_FrontParts_Bloc::destroy() in /xxx/hogehoge/fugafuga/data/downloads/plugin/NewItems/LC_Page_FrontParts_Bloc_NewItems.php on line 45
という感じです。
で、多分、「NewItems」というのは、「新着商品ブロック」というプラグインで、これを無効にするだけでもOKかもしれませんね。
うちでは、とりあえず、LC_Page_FrontParts_Bloc_NewItems.php の45行目を覗いてみました。
すると、
function destroy() {
parent::destroy();
}
という感じで、親クラスの「destroy()」という関数を呼んでるのですが、クラスの継承を辿ってみると、元のクラスに「destroy()」の関数が定義されていません・・・。
(それが、「Call to undefined method 」なんでしょうけど)
というわけで、
parent::destroy();
を
// parent::destroy();
とコメントアウトしてみました。
検索したら、結構他にも類似な事例があるようですね、EC-CUBEの本体のアップデートとプラグインのアップデートの差かな?
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=13849&forum=8&post_id=62278
修正後、Fetch as Googleを実行するも、またPHP Fatal error
Fetch as Googleを実行しても、再び「アクセスできません」。
サーバーのエラーログを確認すると、今度は、
PHP Fatal error: Call to undefined method LC_Page_FrontParts_Bloc::destroy() in /xxx/hogehoge/fugafuga/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Ranking.php on line 63
で、同様のエラー。
これも確認してみると、親クラスに存在しない「destroy()」を実行していました。
(これは「売れている商品ブロック追加プラグイン」ですかね?)
これも先ほどと同じく、parent::destroy();をコメントアウトしました。
Fetch as Googleを実行すと数秒でインデックス!
修正後、Fetch as Googleを実行すると、今度は通常通りうまくいき、数秒後には、インデックスされました。
順位も一応、100位前後ではついたので、一安心です。
2ヶ月間の間に、何度も更新されていたし、それらが全部グーグル的には評価されない、というのはちょっと勿体無いですが、インデックスすらされない、というのは、致命的なので、解消できてよかったです。
しかし、プラグイン一つで、Googleにとっては致命的なエラーを起こす、というのは、怖いですね・・・。
(PHPのSmarty関係だとよくある話なんですかね?)
インデックスされない、とかありましたら、GoogleBotだけサーバー上でエラーでてないか確認してみてください。
以上、
EC-CUBEサイトでブラウザでは表示されるのにGoogleにインデックスされないを解決した
でした。