GoogleにAjaxページをインデックスしてもらう方法

WEBサイトを運営していて、Ajaxページを作成した場合、そのページは、Ajaxの未適用の状態でGoogleにインデックスされることがあります。

しかし、サイト運営者としては、Ajaxを適用した状態でインデックスして欲しい場合もあります。

そこで、GoogleにAjaxページをインデックスしてもらう方法について覚書しておきます。(お約束ですが、以下の方法の採用は自己責任でお願いします。)

まずは、Googleの公式ページをよく読む必要があります。あまり難しくはないので必読です。

【AJAX クロール: ウェブマスターおよびデベロッパー向けガイド】
https://support.google.com/webmasters/answer/174992

上記ページでは、主に2つの方法が述べられていますが、ここでは、3.の「ハッシュ フラグメントを使用せずに処理する」を採用します。

まずは、コンテンツとなるページに、次のmetaタグを含ませます。

<meta name="fragment" content="!">

次に、URLをフラグメントに対応するようにします。

www.example.com?_escaped_fragment_=

?以降がAjaxページであることのパラメーターとなります。

そして、?_escaped_fragment_=がある場合には、PHPなどで、Ajax適用状態のページをレスポンスとして返すようにします。

ここまでは、とても簡単です。

ここで問題となるのが、動的にURLを構成するページではどうするかです。

たとえば、一見、次のURLは、静的に見えます。

www.example.com/foo/bar

しかし、実際は、次のように動的にURLを処理している場合もあるでしょう。

www.example.com?category=foo&page=bar

こうした場合には、mod_rewrite などを使って処理しているはずなので、「?_escaped_fragment_=」についても動的に処理します。

.htaccess に次のように記述します。最後の2行は実質1行です。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=$ 
RewriteRule ^([a-z]{10})/([a-z]{10})$  
page.php?category=$1&page=$2&_escaped_fragment_= [L]

上記の.htaccessの肝は、次の条件文です。クエリに、「_escaped_fragment_=」を含む場合のみRewriteRuleを実行します。

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=$

そして、次行で実行するRewriteRuleでは、&_escaped_fragment_= を末尾に付けるようにします。

なお、RewriteRule については、ご自身のサイト構成にあわせて適切に変更してください。

これで、「きれいな URL を対応する汚い URL に一時的にマッピングします」ということを、mod_rewriteを使って動的に処理することができるようになります。

(注意点)

1.mod_rewriteの条件文(RewriteCond)は、続く1行にのみ作用します。そのため、その後の行には影響しません。

2.RewriteRuleのみを使って処理できるようにも思えますが、RewriteRuleは、?以降のパラメーターを無視するため、RewriteCondで条件を判定しないと処理ができません。

今回は、この2番でつまづいて、大変でしたが、何とか作業が終了しました。

【追記】

一応、上記の設定をした後には、サイトのアクセスログを分析してロボットがAjaxページをきちんと取得したかを確認した方が良いと思います。

ちなみに、自分の場合には、設定後、数時間ほどで、botがきて、
「?_escaped_fragment_=」付きのページを取得していきました。
下は、そのときのログの一部です。(一部伏字及び改変)

**.249.77.** – – [14/Dec/2013:19:17:48 +0900] “GET /abc/xyz?_escaped_fragment_= HTTP/1.1″ 200 3117 “-” “Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)”

なお、googlebot以外に、Bingのボットも確認できました。

以上です。

カテゴリー: Ajax パーマリンク

コメントを残す

メールアドレスが公開されることはありません。