スポンサードリンク

EC CUBE ロゴ
EC CUBE ロゴ

重複ページの対応の記事でも書いたのですが、

EC-CUBEを使っていると

かなりの重複ページが出てきます。

【http://~】と【https://~】のあるなしとか

商品一覧と商品詳細ページで

URLが同じだと一緒のページと認識されて

重複判定される事があるんですよね。

Googleさん的にはあまりよろしくない事なので

重複ページの対応をしました。

スポンサードリンク

重複ページをcanonicalを使って統一する

seo
seo

EC-CUBEは【tansactionid】というものをパラメーターがありまして、

この仕様でページの遷移をチェックしています。

なのでURLがたくさん出てきてしまうんですよね。

おかげで、Google先生のウェブマスターツールでは

重複ページのエラーが出るわ出るわ・・・

一応、tilteタグとdescription&gタグで

対応していますが、

正規のやり方に挑戦してみました。

重複ページの対応方法

【/data/Smarty/templates/default/site_frame.tpl】に以下を追加

<!--{php}-->
if (preg_match("/contact/",$_SERVER["REQUEST_URI"])){
 $this->assign('var','1');
}elseif(preg_match("/cart/",$_SERVER["REQUEST_URI"])){
 $this->assign('var','1');
}elseif(preg_match("/mypage/",$_SERVER["REQUEST_URI"])){
 $this->assign('var','1');
}elseif(preg_match("/shopping/",$_SERVER["REQUEST_URI"])){
 $this->assign('var','1');
}elseif(preg_match("/products/",$_SERVER["REQUEST_URI"])){
 $this->assign('var','2');
}else{
 $this->assign('var','0');
}
<!--{/php}-->
<!--{* $var = 0 は後の rel="canonical" で必要 *}-->
<!--{if ($var == 1)}-->
<meta name="robots" content="noindex,follow" />
<!--{/if}-->

<!--{* 重複ページの設定 *}-->
<!--{if $var == 2 && $tpl_title == "商品一覧ページ"}--><!--商品一覧ページの時-->
<link rel="canonical" href="<!--{$smarty.const.HTTP_URL}-->products/list.php?category_id=$c_id" />
<!--{elseif $var == 2 && $tpl_title == "商品詳細ページ"}--><!--商品詳細ページの時-->
<link rel="canonical" href="<!--{$smarty.const.HTTP_URL}-->products/detail.php?product_id=$p_id" />
<!--{elseif $var == 0}--><!--{* noindex条件分岐のときに値を決める *}-->
<link rel="canonical" href="http://○○○○○○.com<!--{$smarty.server.PHP_SELF}-->" />
<!--{/if}-->

URLを元のPHP側でうまく処理できなかったのでSmartyでPHPを使います。

内容は、正規表現を使ってhttpsアクセスしたいものを取得します。(変数varが1)

こちらの仕様ではhttpsでアクセスするものは基本的にインデックスされなくていいので

noindexを記述しています。

followを付けておくとインデックスはしないけどリンクジュースは渡すので

こちらも記述しておきました。

変数varが1か2のものにはrel=”canonical”を付ける。

という形で対応してみました。

スポンサードリンク

商品カテゴリーIDと商品IDの取得方法

商品カテゴリーIDと商品IDは

phpファイル側で取得できます。

【/data/class/pages/products/LC_Page_Products_List.php】のactionメソッドの最後に


$this->c_id = $_GET['category_id'];

同じように

【/data/class/pages/products/LC_Page_Products_Detail.php】のactionメソッドの最後に


$this->c_id = $_GET['product_id'];

とGETでパラメータを取得します。

とりあえず、これで様子を見てみます。

【追記】ページ番号の取得方法

商品リストのページはページ番号を追加で載せる事にしました。

【/data/class/pages/products/LC_Page_Products_List.php】のactionメソッドの最後に


$this->page = $_GET['pageno'];

上記のようにページ番号をURLから取得します。

そして、/data/Smarty/templates/default/site_frame.tplの商品一覧の

canonical設定の部分に

・・・
<link rel="canonical" href="<!--{$smarty.const.HTTP_URL}-->products/list.php?category_id=<!--{$c_id}-->&pageno=<!--{$page}-->" />
・・・

上記のようカテゴリーIDの後ろにページ番号を追加しました。

重複ページの対応はこれでいいかと思います。

あとはGoogleさんがどのようにインデックスしてくれるか待ってみましょう。

スポンサードリンク

今回この設定をするのに参考にしたサイト

ホームページのネタ帳
【SEO】rel=”canonical”で重複コンテンツを防ぐ

海外SEO情報ブログ
ページネーションにおけるrel=“canonical”タグの正しい使い方 at SMX West 2011

スポンサードリンク