ライブドアブログで特定のページをリダイレクトさせることについて考えてみる
what
タイトルのような要望があったので、やってみる。
実験ブログ
仕様
http://blog.livedoor.jp/japanrock_test/archives/50886795.html
こちらを
http://twitter.com/japanrock/statuses/918602936
へ 301 リダイレクトさせる。
.htaccessによる 301 リダイレクト
有料プランで Pro 以上を契約している場合、FTPで .htaccess ファイルがアップロードできる・・・とおもいきやできない・・・orz 禁止されている。
FTPで .htaccess ファイルをアップロードしようとすると、「553 Prohibted file name: /.htaccess」となる。
ということで、 .htaccess ファイルでのリダイレクトはあきらめる・・・。でも、ライブドアのヘルプには .htaccessが使えないなんて書いてないなぁ・・・。
Javascript、metaタグによる 301リダイレクト
Javascriptでのリダイレクトで注意しなければいけないのは、クローキング。
Why is my page missing from Google Search? - Search Console Help
Cloaking - Search Console Help
URLs not followed errors - Search Console Help
Meta tags that Google understands - Search Console Help
上記のページのポイントは、
- JavaScript に含まれるリンクをたどったりインデックスに登録することはできない
- 一般に、検索エンジンは JavaScript の内容にアクセスできない
- リンクは JavaScript の外部に配置するか、noscript タグ内に複製することができる
- Google は meta refresh をサポートしている(サーバサイドの 301を推奨しているが)
であるので、
- ユーザはJavascriptによってリダイレクト
- 検索エンジンは metaタグの refreshを認識して、対象のページへリダイレクト
すればよいということになる。
以下のようなコードを head 内に書くことになるだろうか。
<!-- リダイレクト設定ここから --> <script type="text/javascript"> <!-- if (location.href.search(/japanrock_test\/archives\/50886795\.html/i) != -1) { location.replace('http://twitter.com/japanrock/statuses/918602936'); } // --> </script> <noscript> <meta http-equiv="Refresh" content="0; URL=http://twitter.com/japanrock/statuses/918602936;" /> </noscript> <!-- リダイレクト設定ここまで -->
上記のスクリプトを、「個別記事ページ」のテンプレートに記述すれば、同じ個別記事ページでも、
http://blog.livedoor.jp/japanrock_test/archives/50886795.html では、期待どおりリダイレクトし、
http://blog.livedoor.jp/japanrock_test/archives/51583596.html ではリダイレクトしないという
期待どおりの結果が得られる。
がしかし、検索エンジンは、両方 meta Refresh タグをみてリダイレクトするはずだ・・・orz
うーむ・・・。ブログシステムでテンプレートに Javascriptを埋め込んでリダイレクトする方法だと、クローキングが起きる・・・。
meta Refresh は301か302か
リダイレクト元のデータは 200でサーバ側から受け取るわけだが、その後 meta タグによってリダイレクトした場合、検索エンジンはどのような認識をするのだろう。
Yahoo!
http://help.yahoo.com/l/us/yahoo/search/webcrawler/slurp-11.html
Yahoo!は リダイレクトに遅れがある場合は、302 そうでない場合は、 301 と認識するようです。
Meta tags that Google understands - Search Console Helpにはとくに記述はない。
Google グループ
301リダイレクトが使えないときの転送方法 | 海外SEO情報ブログ
上記のURLを見ると、 一応 301 リダイレクトとして処理してくれているような感じだが・・・。
まとめ
ライブドアブログでAというパーマリンクページでリダイレクトをさせたい場合、Bというパーマリンクページなどでクローキングの問題が起きてしまうので、あまり好ましくないとは思う・・・。
うーむ、もっとスッキリリダイレクトさせる方法はないかなぁ・・・ってそもそもブログで特定のページをリダイレクトさせるという要望がそもそも少ないから、この問題は発展しなさそうだなぁ・・・。
クローキング被害の少なさを考えるなら、
<noscript> <meta http-equiv="Refresh" content="0; URL=http://twitter.com/japanrock/statuses/918602936;" /> </noscript>
の記述はない方がいいと思う。なぜなら、検索エンジンはJavascriptのリダイレクトは認識しないので、以下の表のようにメタタグがない方がクローキングする範囲は狭いためだ。
http://blog.livedoor.jp/japanrock_test/archives/50886795.html | http://blog.livedoor.jp/japanrock_test/archives/51583596.html | その他リダイレクトのスクリプトを含むページ(月別アーカイブなど) | |||||
メタタグあり | クローキングなし | クローキングあり | クローキングあり | ||||
メタタグなし | クローキングあり | クローキングなし | クローキングなし |