『FancyURL-2』で404ページを補う
- 投稿日 : 2009-01-18, 15:00
- 最終更新日時 : 2010-12-21 17:33:30(履歴)
- タグ(Nucleus)
- カテゴリ(Nucleus)
- 記し人(luvsic)[PDF]
- 閲覧数(1554)
実験段階のものなので、仮にご利用される場合は注意してください。。
Nucleusに標準でついてくる、URL正規化の『FancyURL-2』は、存在しないページ・ファイルにアクセスするとトップページを表示し、HTTPレスポンス(ステータスコード?)で200を返す。これがすごく昔から気になってた。下記のサイトでも問題に触れられている。
fancyurls-2 の mod_rewrite 記述の意味には注意しましょう : The Trap of Web Design
これによって問題になるのは、SEO的な諸所の事情。Google ウェブマスター ツールでの、htmlファイルアップロードによる「サイトの確認」が行えない(metaタグ利用はok)、404用のページが準備できない、そもそものURL正規化によるメリットが逆にデメリットになる、など。
そこで、とりあえずスペシャルスキンパーツを表示させる実験をしてみた。
まずFancyURL-2用に記述してあった、.htaccessのmod_rewrite.cの部分を書き換え。古いコードは#でエスケープしてある。なお、このコードは本家フォーラム記事、[SOLVED] NP_FancierURL2 error - no 404s on invalid urlを参考に作成。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(item).*$ [NC]
RewriteCond %{REQUEST_URI} !^/(blog).*$ [NC]
RewriteCond %{REQUEST_URI} !^/(member).*$ [NC]
RewriteCond %{REQUEST_URI} !^/(archives).*$ [NC]
RewriteCond %{REQUEST_URI} !^/(archive).*$ [NC]
RewriteCond %{REQUEST_URI} !^/(category).*$ [NC]
RewriteCond %{REQUEST_URI} !^/(search).*$ [NC]
RewriteCond %{REQUEST_URI} !^/(special).*$ [NC]
RewriteCond %{REQUEST_URI} !^/(sitemap).*$ [NC]
RewriteCond %{REQUEST_URI} !^/(msitemap).*$ [NC]
RewriteRule . - [L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^((item|blog|member|archives|archive|category|search|special|sitemap|msitemap).*)$ index.php?virtualpath=$1 [L,QSA]
RewriteRule ^(item/[^/]+)/.*$ /$1 [R=301,L]
</IfModule>
#<IfModule mod_rewrite.c>
# RewriteEngine on
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule ^(.*)$ index.php?virtualpath=$1 [L,QSA]
#</IfModule>
### 404
ErrorDocument 404 /special/notfound/
「[R=301,L]」とか、もう何がなにやらよくわからない。
「blog」、「item」などと一緒に「sitemap」があるが、これはNP_SEOSitemaps(NP_SearchenginesSitemapsGenerator?)用。「ErrorDocument 404 /special/notfound/」で、ファイルが存在しない場合に表示するページを「notfound」という名前のスペシャルスキンパーツに指定している。
これで、下記のようなアドレスにアクセスするなら、404を返すようになってくれる。
しかし、下記のように、itemやblogなどの文字を含めてアクセスすると、トップページを表示してしまう。なんと中途半端な・・・。
https://luvsic.net/item/99999のような存在しないアイテムへアクセスすると、Nucleusは「そのようなアイテムは存在しません」とエラーページのスキンで返してくれるのだが、そもそもこのページこそ404であるべきじゃないだろうかと思ったり。
FancyURL-2で、完全な404のコントロールは仕様上むずかしいんじゃないかな、とぼんやり感じる。無茶でもNP_CustomURLにしておけば全部解決できたのかもしれないなぁ・・・。
とりあえず独自404ページはユーザビリティ上にも制作上でも必要なので、FancyURL-2はこのページの半端な解決方法を利用するか、更に考えるか、もしくはNP_CustomURL利用、っていうことにしよう。。
追記 2009-2-09
200をかえせばいいとは思うけど、metaに注意すること。
追記 2009-2-12
NP_SEOSitemaps.phpでのモバイル用サイトマップ『msitemap.xml』を追記
No comments yet