Welcome !! Now 2009.07.05 09:24 (JST)

SEO Strict URLs 1.0.1

[ プラグイン ]

SEO Strict URLs プラグインは、フレンドリURLを利用している場合にMODxがはき出してしまう複数のURLをひとつに統一します。複数のURLを持つページは、サーチエンジンなどからペナルティを課せられる場合があります。このプラグインはそれを避けることができるでしょう。

参照ページ:SEO Strict URLs

テスト環境

  • サーバ:さくらインターネット  
    • PHP 4.4.4
    • MYSQL 4.0.27
  • MODx:0.9.5 / 0.9.6
  • SEO Strict URLs 1.0.1

SEO Strict URLs を利用する価値

「フレンドリURL」 + 「接尾辞」 + 「エアリアス」利用時の問題

デフォルトでは、フレンドリURLを利用する場合、MODxは、接尾辞に「.html」をつけてURLを生成します。これは、クエリ形式のURL(例:/index.php?id=54)を静的なURL(例:54.html)などにしてくれます。

また、エイリアス(例:sample)を指定しているならば、URLは「sample.html」になり、動的生成でありながら、静的URLを実現できるのは大変魅力的です。

しかし、この時、実は1つのドキュメントに対し、実に9つものURLが発生しているのです(つまり、9つの異なったURLから1つのドキュメントにアクセスできると言うことです)。

同じコンテンツ(内容)でありながら、そのドキュメントに対し異なったURLを存在させることは、サーチエンジンから見て、サイトとしての評価を下げる対象となる可能性があります(たぶん)。

また、エイリアスを拡張子付きで設定した場合、デフォルトではMODxの生成URLは「feed.rss.html」などになってしまいますが、このプラグインを導入しますと、この現象も回避できます。

どんなURLでアクセスできるのか

では、実際、このプラグインを導入前の以下の条件下において、どんなURLが発生し、かつどうのようにアクセス可能な状態なのかを見てみましょう。

  • フレンドリURL ... YES
  • 接尾辞 ... .html
  • エアリアス ... sample
  • ドュキメントID ... 54
発生するURLとアクセス可能なURL
  • /index.php?id=54
  • /54
  • /54/
  • /54.html
  • /54.html/
  • /sample
  • /sample/
  • /sample.html
  • /sample.html/

テストは簡単です。実際にアクセスしてみるとよくわかると思います。

SEO Strict URLs プラグインでアクセスできるURLを統一

SEO Strict URLs プラグインは、サイトに訪問したフロントエンドユーザやサーチエンジンに対して、301 redirect を使い、単一のURLを提供します(日本語変かも)。

つまり、1つのドキュメントに対して1つのURLという環境(状態)を作ります。

301 redirect って何?

301 redirect に関しての詳細は、そちらの専門文献にゆずるとして(というか説明できるほど良くわかってないんですが)、おおまかに言うと、ブラウザや、サーチエンジンなどのユーザエージェント(UA)に対して、「キミがリクエストしたURLは恒久的に変更になったんだよ。今は、こっちのURLが正しいURLなんだ。だからそう理解しておいておくれ」。と、伝えます。

すると、サーチエンジンは「ふぅん。そぉなの?じゃ、クロール中にキミのところの以前のURLが見つかったら、新しいURLでインデックスしとけば良いんだね」と理解します(たぶんそうだとおもうんですけど。うちとこではそのように振る舞っているみたいなので)。

このことから考えますと、SEO Stirect URLs は、301 redirect によって強制的にURLを統一しているのではないかと思うんですが。。(でもよくわかりません...)。

どのようなリダイレクトを行うか

では、SEO Strict URLs プラグインが実際にどのようなリダイレクトを行うのかの例を記します。

  • http://yoursite.com/container.html -> http://yoursite.com/container/(ドキュメントがフォルダの場合)
  • http://yoursite.com/site_start.html -> http://yoursite.com/
  • http://yoursite.com/feed.rss.html -> http://yoursite.com/feed.rss (オプションで「basename」を指定した場合)
  • http://yoursite.com/container.html -> http://yoursite.com/container/ (オプションで「folders」を指定した場合)

インストール

プラグインの導入

リソースのインストール方法について:プラグインの導入を参照してください。

設定タブ
&editDocLinks=Edit document links;int;1 &makeFolders=Rewrite containers as folders;int;1 &emptyFolders=Check for empty container when rewriting;int;0 &override=Enable manual overrides;int;1 &overrideTV=Override TV name;string;seoOverride
システムイベントタブ
  • OnWebPageInit
  •  OnWebPagePrerender

テンプレート変数を作成する

SEO Strict URLs プラグインのオプションを実現するためにテンプレート変数を作成します。

変数名
seoOverride
見出し
seoOverride
説明
for TV of SEO Strict URLs
入力タイプ
DropDown List Menu
入力時のオプション値
Disabled==-1||Base Name==0||Append Extension==1||Folder==2
規定値
-1

blank代替えテンプレートを作る

RSS feed 用のドキュメントやCSS用のドキュメントは通常テンプレートに「blank」を利用しますが、「blank」は、テンプレート変数を持つことができません。ので、blank代替えテンプレートを作ります。

テンプレート コード (html)
[*content*]

その他テンプレート名などは任意です。先に作成したテンプレート変数「seoOverride」を開き、このテンプレートもアサインしておいてください。

運用

上記で設定したテンプレート変数は以下の意味を持ちます

  • Disabled ... プラグインに処理を任せる
  • Base Name ... エイリアスに入力された値をそのまま出力する
  • Appended Extension ... ドキュメントがフォルダであっても「接頭辞」をつけた形で出力する(例:/sample.html)
  • Folder ... ドキュメントがフォルダでなくてもディレクトリの形で出力する(例:/sample/)

インスタンス

通常のドキュメントの場合 ... Disabled

URLは、以下の通り

  • 親ドキュメントであれば、「/エイリアス/」...「/sample/」など
  • 子ドキュメントであれば「/エイリアス+ 接尾辞」...「/sample.html」

エイリアスに拡張子まで含める場合 ... Base Name

rss feed など、エイリアスに拡張子まで含める場合は、これになります

  • エイリアス「modx_index.xml」 ... URL 「modx_index.xml」

※CSSをドキュメントとして作成する場合の設定もこちらになります※

問題点

SEO Strict URLs プラグイン導入時、Ditto 2.x 系の「extenders」パラメータで「request」を指定し、Ditto パラメータ付きでURLを指定したとき、そのURLにアクセスすると不要にリダイレクトされます。

※回避策は「SEO Strict URLs プラグイン導入時の「extender=request`」での問題」をご参照下さい※

より厳密なサイトに近づけるために

URLはWWWつきか、なしかを決める

これは、SEO Stirict URLs プラグインの機能ではなく、またMODxの運用に限ったことではない、サイト運用全般に関わることですが、URLを「WWW付き」か、「なし」かのどちらで運用するかを決め、URLを統一した方通いでいょう。

どちらに統一するか決めたら「.htaccess」に以下のように書きます(これはMODx096の「.htaccess」に記述されていますので参照してみてください)。

wwwなし
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^yoursite\.com [NC]
RewriteRule (.*) http://yoursite.com/$1 [R=301,L]
wwwつき
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\.yoursite\.com [NC]
RewriteRule (.*) http://www.yoursite.com/$1 [R=301,L]

どちらかを指定します。

△ページトップ