『FancyURL-2』で404ページを補う

実験段階のものなので、仮にご利用される場合は注意してください。。

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などの文字を含めてアクセスすると、トップページを表示してしまう。なんと中途半端な・・・。

http://luvsic.net/item/99999のような存在しないアイテムへアクセスすると、Nucleusは「そのようなアイテムは存在しません」とエラーページのスキンで返してくれるのだが、そもそもこのページこそ404であるべきじゃないだろうかと思ったり。

画像:エラーページは200が返される

FancyURL-2で、完全な404のコントロールは仕様上むずかしいんじゃないかな、とぼんやり感じる。無茶でもNP_CustomURLにしておけば全部解決できたのかもしれないなぁ・・・。

とりあえず独自404ページはユーザビリティ上にも制作上でも必要なので、FancyURL-2はこのページの半端な解決方法を利用するか、更に考えるか、もしくはNP_CustomURL利用、っていうことにしよう。。

追記 2009-2-09

200をかえせばいいとは思うけど、metaに注意すること。

<%if(skintype,error)%><meta name="robots" content="NOINDEX,NOFOLLOW" /><%endif%>
<%if(skintype,notfound)%><meta name="robots" content="NOINDEX,NOFOLLOW" /><%endif%>

追記 2009-2-12

NP_SEOSitemaps.phpでのモバイル用サイトマップ『msitemap.xml』を追記

Skooler Records

No comments yet

%3c%69%6e%70%75%74%20%74%79%70%65%3d%22%68%69%64%64%65%6e%22%20%6e%61%6d%65%3d%22%6e%70%5f%70%72%6f%74%65%63%74%62%79%6d%64%35%22%20%76%61%6c%75%65%3d%22%31%64%63%33%36%32%33%63%63%36%36%64%33%38%35%36%62%63%62%66%61%33%39%64%65%61%38%34%61%39%33%33%22%3e %3c%69%6e%70%75%74%20%74%79%70%65%3d%22%68%69%64%64%65%6e%22%20%6e%61%6d%65%3d%22%6e%70%5f%70%72%6f%74%65%63%74%62%79%6d%64%35%5f%68%61%73%68%22%20%76%61%6c%75%65%3d%22%38%38%32%38%36%63%63%31%32%32%31%33%62%38%30%63%62%66%37%38%38%34%61%65%34%36%34%64%62%39%63%61%22%3e
© 2006 – 2014 by Luvsic. Some rights reserved.