オープンソースCMSのMODxでは、一つのドキュメントに対して非常に多くのURIでアクセスすることが可能ですが、SEO Strict URLsプラグインを導入することによって、これらのURIを一意化することができます。SEO Strict URLsプラグインには大きく分けて二つの機能があります。一つは、MODxが出力するドキュメント中にあるURIを設定に従って書き換える機能です。もう一つは、標準の状態でアクセスできる複数のURIにアクセスがあった場合に、設定に従って一意のURIに301リダイレクトする機能です。
SEO Strict URLsプラグイン導入のメリットは大きいですが、MODx本体のフレンドリーURLやその設定、.htaccessによるmod_rewrite等と組み合わせると複雑になりがちです。ここでは、SEO Strict URLsプラグインの設定とその挙動の一部をまとめています。
後述の表を見てわかるように、設定によってはSEO Strict URLsプラグインが直感的ではない挙動(バグを含む)をする場合があります。個人的には、URI構成を通常のサイト風にする方法 で紹介している設定が不具合が出にくく、管理もしやすいのでおすすめです。
ここでは、いくつかの不具合を修正したSEO Strict URLsプラグイン(Phize版)を前提としている。本家版を使用する場合には、ここで記載している挙動とは異なる可能性がある。
SEO Strict URLsプラグインにはいくつかの設定項目があり、これらの設定によって、ドキュメント中のURIの書き換え機能やリダイレクト機能の挙動が変わります。
| パラメータ名 | 説明 |
|---|---|
| editDocLinks | ドキュメント中のURIの書き換えに関する設定。「0」、空文字を指定すると、ドキュメント中のURIは書き換えない。それ以外を指定すると、ドキュメント中のURIも設定に従って書き換える。 |
| makeFolders | 子ドキュメントを持つフォルダドキュメントに関する設定。「0」、空文字を指定すると、通常のドキュメントと同様に扱われる。それ以外を指定すると、ディレクトリのように扱われる。 |
| emptyFolders | 子ドキュメントを持たないフォルダドキュメントに関する設定。「0」、空文字を指定すると、通常のドキュメントと同様に扱われる。それ以外を指定すると、ディレクトリのように扱われる。makeFoldersが「0」、空文字の場合には設定は無視される。 |
| override | 個別のドキュメントに関する設定。「0」、空文字を指定すると、全てのドキュメントはeditDocLinks、makeFolders、memptyFoldersの設定に従って扱われる。それ以外を指定すると、ドキュメントにテンプレート変数overrideTVが設定されている場合は、その設定に従って扱われる。 |
| overrideTV | 個別のドキュメントの設定に使用するテンプレート変数。overrideが「0」、空文字以外で、ドキュメントにこのテンプレート変数が設定されている場合のみ、ドキュメントのURIはこの設定に従って扱われる。 |
一般的と思われるフレンドリーURLの設定(次の表を参照)での運用を想定して、SEO Strict URLsプラグインによるURIの書き換え機能・リダイレクト機能の挙動の一部をまとめています。
| 設定名 | 値 |
|---|---|
| フレンドリーURLの使用 | Yes |
| フレンドリーエイリアス | Yes |
| エイリアスパスを使用 | Yes |
以下が、上記のフレンドリーURLの設定に基づいたSEO Strict URLsプラグインの挙動をまとめた表です。
editDocLinks=0の場合はドキュメント中のURIは書き換えられないが、リダイレクトは下記の表の通り行われる。
| エイリアス | 接頭辞 | 接尾辞 | フォルダ? | 書き換え前 | 書き換え後 | リダイレクト先 |
|---|---|---|---|---|---|---|
| エイリアス | 接頭辞 | 接尾辞 | フォルダ? | 書き換え前 | 書き換え後 | リダイレクト先 |
| alias | なし | なし | No/Yes | alias | 同じ | alias |
| alias/ | ||||||
| .html | No/Yes | alias | alias.html | |||
| alias/ | ||||||
| alias.html | ||||||
| alias.html/ | ||||||
| entry- | なし | No/Yes | alias | entry-alias | ||
| alias/ | ||||||
| entry-alias | ||||||
| entry-alias/ | ||||||
| .html | No/Yes | alias | entry-alias.html | |||
| alias/ | ||||||
| alias.html | ||||||
| alias.html/ | ||||||
| entry-alias | ||||||
| entry-alias/ | ||||||
| entry-alias.html | ||||||
| entry-alias.html/ |
| エイリアス | 接頭辞 | 接尾辞 | フォルダ? | 書き換え前 | 書き換え後 | リダイレクト先 |
|---|---|---|---|---|---|---|
| エイリアス | 接頭辞 | 接尾辞 | フォルダ? | 書き換え前 | 書き換え後 | リダイレクト先 |
| alias | なし | なし | No | alias | 同じ | alias |
| alias/ | ||||||
| Yes(子ドキュメントあり) | alias | alias/ | alias/ | |||
| alias/ | 同じ | |||||
| Yes(子ドキュメントなし) | alias | 同じ | alias | |||
| alias/ | ||||||
| .html | No | alias | 同じ | alias.html | ||
| alias/ | ||||||
| alias.html | ||||||
| alias.html/ | ||||||
| Yes(子ドキュメントあり) | alias | 同じ | alias/ | |||
| alias/ | ||||||
| alias.html | alias/ | |||||
| alias.html/ | ||||||
| Yes(子ドキュメントなし) | alias | 同じ | alias.html | |||
| alias/ | ||||||
| alias.html | ||||||
| alias.html/ | ||||||
| entry- | なし | No | alias | 同じ | entry-alias | |
| alias/ | ||||||
| entry-alias | ||||||
| entry-alias/ | ||||||
| Yes(子ドキュメントあり) | alias | alias/ | alias/ | |||
| alias/ | 同じ | |||||
| entry-alias | ||||||
| entry-alias/ | ||||||
| Yes(子ドキュメントなし) | alias | 同じ | entry-alias | |||
| alias/ | ||||||
| entry-alias | ||||||
| entry-alias/ | ||||||
| .html | No | alias | 同じ | entry-alias.html | ||
| alias/ | ||||||
| alias.html | ||||||
| alias.html/ | ||||||
| entry-alias | ||||||
| entry-alias/ | ||||||
| entry-alias.html | ||||||
| entry-alias.html/ | ||||||
| Yes(子ドキュメントあり) | alias | 同じ | alias/ | |||
| alias/ | ||||||
| alias.html | alias/ | |||||
| alias.html/ | ||||||
| entry-alias | 同じ | |||||
| entry-alias/ | ||||||
| entry-alias.html | ||||||
| entry-alias.html/ | ||||||
| Yes(子ドキュメントなし) | alias | 同じ | entry-alias.html | |||
| alias/ | ||||||
| alias.html | ||||||
| alias.html/ | ||||||
| entry-alias | ||||||
| entry-alias/ | ||||||
| entry-alias.html | ||||||
| entry-alias.html/ |
| エイリアス | 接頭辞 | 接尾辞 | フォルダ? | 書き換え前 | 書き換え後 | リダイレクト先 |
|---|---|---|---|---|---|---|
| エイリアス | 接頭辞 | 接尾辞 | フォルダ? | 書き換え前 | 書き換え後 | リダイレクト先 |
| alias | なし | なし | No | alias | 同じ | alias |
| alias/ | ||||||
| Yes | alias | alias/ | alias/ | |||
| alias/ | 同じ | |||||
| .html | No | alias | 同じ | alias.html | ||
| alias/ | ||||||
| alias.html | ||||||
| alias.html/ | ||||||
| Yes | alias | 同じ | alias/ | |||
| alias/ | ||||||
| alias.html | alias/ | |||||
| alias.html/ | ||||||
| entry- | なし | No | alias | 同じ | entry-alias | |
| alias/ | ||||||
| entry-alias | ||||||
| entry-alias/ | ||||||
| Yes | alias | alias/ | alias/ | |||
| alias/ | 同じ | |||||
| entry-alias | ||||||
| entry-alias/ | ||||||
| .html | No | alias | 同じ | entry-alias.html | ||
| alias/ | ||||||
| alias.html | ||||||
| alias.html/ | ||||||
| entry-alias | ||||||
| entry-alias/ | ||||||
| entry-alias.html | ||||||
| entry-alias.html/ | ||||||
| Yes | alias | 同じ | alias/ | |||
| alias/ | ||||||
| alias.html | alias/ | |||||
| alias.html/ | ||||||
| entry-alias | 同じ | |||||
| entry-alias/ | ||||||
| entry-alias.html | ||||||
| entry-alias.html/ |