【解決】EC-CUBEサイトでブラウザでは表示されるのにGoogleにインデックスされない件

新規の案件で、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にインデックスされないを解決した

でした。

 
 

↓拡散のお手伝いお願いします