2007年04月22日

Operaのhistory.backでJavascriptが動かない

Internet ExplorerやFirefoxの場合、ブラウザの戻る、もしくは、Javascriptのhistory.backで前のページに戻ったとしても、前のページでJavascriptを正常に読み込むようなのですが、Operaだけ、前のページに戻ったときにJavascriptが読み込まれませんでした。

これはクライアント側で設定するしかないのかはよく分かりませんが、opera:configでHistory Navigation Modeの値をデフォルトの1から2へ変更してやると、ブラウザの戻る、もしくは、Javascriptのhistory.backで前のページに戻ったとしても正常にJavascriptが実行されるようになりました。2にするとどうやらキャッシュを使わなくなるみたいです。

どうしてもOperaを使いたい環境(全画面表示をした時に、余分なものが一切表示されない。Internet ExplorerやFirefoxだとマウスを上のほうへ持っていくとメニューが表示されてしまう。)があったので、とりあえずはこれで乗り切ろうかな、と。

2006年12月08日

301 Moved Permanentlyでウェブサイトを転送する方法

ウェブサイトのアドレス(URL)を変更すると、古いサイトから新しいサイトへ転送(リダイレクト)する必要があります。人間に対してはURLが変わったことを表示して移動を促せばいいわけですが、検索ロボットには正しく認識してもらわないと、古いサイトと新しいサイトがどちらも検索結果に表示されたり、検索エンジンの評価が低くなったりしてしまいます。

検索ロボットがどうやって転送されているかを判断するかというとHTTPレスポンスヘッダのHTTP Status Codeを見ます。転送用のStatus Codeには大きく二つあり、

  • 301 Moved Permanently
  • 302 Found (Moved Temporarily)

があります。どちらを使用すべきか、ということですが、古いサイトから新しいサイトへ転送したいなら301 Moved Permanentlyの方です。302にしておくと、一時的なアドレスとみなされてしまうからです。301 Moved Permanentlyで転送するには大きく2つの方法があります。

■ .htaccess(httpd.conf)に301 Moved Permanentlyを設定する方法
Redirectを使用する

Redirect permanent / http://www.example.com/

mod_rewriteを使用する
RewriteEngine on
RewriteRule ^/(.*)$ http://www.example.com/$1 [R=301,L]

■ 各種プログラム言語において設定する方法
PerlでHTTP 301 Redirect

#!/usr/local/bin/perl
use strict;
print "Status: 301 Moved Permanantly\n";
print "Location: http://www.example/com/\n\n"
exit;

PHPでHTTP 301 Redirect
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.example.com/");
exit();
?>

さて、.htaccessもサーバーサイドスクリプトも使用できない場合はどうすればいいのでしょうか。HTMLだけで転送させようと思うと、メタリフレッシュをするかJavascriptで転送するかしかありません。Javascriptは検索ロボットは読み込まないので、メタリフレッシュで

<meta http-equiv="refresh" content="0;url=http://www.example.com/">

とするしかないわけですが、これだと301 Moved Permanentlyで送ることはできません。この場合、通常は200 OKを返すと思います。

ここで重要になるのが、検索エンジンがこの転送をどのように解釈するかです。一般的に、リダイレクト時間が0または1の時は301 Moved Permanentlyとして扱われ、2以上の時は302 Found (Moved Temporarily)と判断されると言われています。この件についてはYahooのヘルプに書かれています。
Yahoo! ヘルプ - サイト管理者向け

ウェブサイトを移転した時に、古いサイトから新しいサイトへ301 Moved Permanentlyで転送するのが一番ですが、できない場合でもメタリフレッシュで転送するようにしたほうが、何もしないよりはましでしょう。

参考ウェブサイト