リダイレクト方式によるFacebookのOGP取得の違いについてまとめ

10.28
2013

Web surfing concept vector illustration with pixel hand pointer.

仕事で調べる必要があったのでまとめ。
なお、それぞれのリダイレクト自体の設定など詳しいやり方は、ググってください。

リダイレクト方法ごとの挙動

どうやら、リダイレクト元のページ(ファイル)のヘッダを読むかどうか、が分かれ道みたいですね。

.htaccessによるリダイレクト

.htaccessにリダイレクトの処理を記載。

Redirect permanent /***.html http://***.jp/***.html

ht_ogp

ht_ogp2

・リダイレクト元、リダイレクト先の両方にOGPがある場合
 リダイレクト先のOGPを取得する。

・リダイレクト元にのみ、OGPがある場合
 リダイレクト先のOGPを取得しようとするが、記述が無いので取得できない。

・リダイレクト先にのみ、OGPがある場合
 リダイレクト先のOGPを取得する。

METAタグによるリダイレクト

head内にMETAタグによるリダイレクト処理を記載。

<meta http-equiv="refresh" content="0 ; URL=http://***.jp/***.html">

meta_ogp

・リダイレクト元、リダイレクト先の両方にOGPがある場合
 リダイレクト元のOGPを取得する。

・リダイレクト元にのみ、OGPがある場合
 リダイレクト元のOGPを取得する。

・リダイレクト先にのみ、OGPがある場合
 リダイレクト元のOGPを取得しようとするが、記述が無いので取得できない。

なお、refreshタイムを0から1に変えても、結果は同じ。

JavaScriptによるリダイレクト

head内にJSのリダイレクト処理を記載。

<script type="text/javascript"><!--
   location.href = "http://***.jp/***.html";
// --></script>

js_ogp

・リダイレクト元、リダイレクト先の両方にOGPがある場合
 リダイレクト元のOGPを取得する。

・リダイレクト元にのみ、OGPがある場合
 リダイレクト元のOGPを取得する。

・リダイレクト先にのみ、OGPがある場合
 リダイレクト元のOGPを取得しようとするが、記述が無いので取得できない。

PHPによるリダイレクト

PHPでリダイレクト処理を記述。

<?php
  header('Location: http://***.jp/***.html');
  exit();
?>

ph_ogp

ph_ogp2

・リダイレクト元、リダイレクト先の両方にOGPがある場合
 リダイレクト先のOGPを取得する。

・リダイレクト元にのみ、OGPがある場合
 リダイレクト先のOGPを取得しようとするが、記述が無いので取得できない。

・リダイレクト先にのみ、OGPがある場合
 リダイレクト先のOGPを取得する。

古いコンテンツから新しいコンテンツにリダイレクトさせたい場合

引っ越した場合とか。この場合は、リダイレクト元の情報が出ては困るので、.htaccessもしくはPHPによるリダイレクトを行う必要があります。
そうでないと、古い情報がOGPで表示されてしまいます。
まあ、このケースはたいてい.htaccessで実施すると思いますけど。

短いURLからリダイレクトさせたい場合

同じサーバー(ドメイン)内であれば、リダイレクトというかエイリアスといった方が正しいんですかね。よくわかりませんけど。
販促物への告知用URLなどを設定しているようなケースでは、ドメインが異なる場合もあるかと思います。

http://abc.jp/short → http://xyz.jp/***/***.html

この場合、リダイレクト元のURLにはページ(ファイル)が存在しないケースが多いと思いますが、そうなると.htaccessを使うことになります。
で、まあ元の方にファイルが無いんだから当たり前ですが、リダイレクト先の「http://xyz.jp/***/***.html」の情報がOGPとして表示されますよね。

ここで問題になるのが「og:url」です。
このケースの場合は、当然「http://abc.jp/short」というURLを出したいわけですが、読み込まれているのは「http://xyz.jp/***/***.html」のOGPなわけで、それができません。

「http://xyz.jp/***/***.html」のOGPの中でog:urlを「http://abc.jp/short」と設定しておけばいい気もするのですが、そうするとFacebookのデバッガーではエラーになります。
og:urlで設定されているURLと、ページの最終URLが異なる、と。
で、勝手にページのURLに書き換えられてしまいます。

ht_ogp3

※短縮URLなんかの場合は、むしろこれが好都合なんですけどね。

ですので、このケースのような場合で、元のURLが告知用URLだからOGPに表示させたい、というようなときにはMETAタグによる記述を使うのが良いでしょう。
(JavaScriptでもいいですけど、JS使えない環境では動作しません。)
つまり、リダイレクト元にそれらの記述が可能なページ(ファイル)を置く必要が出てきます。