友人のサイトをFacebook(以下FB)でシェアしようとしたら何もでなくて、
FBメッセージに書こうとしたらこんなんが出た。
このアイテムはシェアできません。
無効なURLのリンクです。
原因は
<html xmlns:fb="hogehoge"> <head> ・ ・ ・ </head> <body>
のこいつ!(かもしれない)
xmlns:fb="hogehoge"
とかみたい。
(詳しくは調査していません。)
Not well-grounded!!!!
ただ、問題はその後。
原因を判明させるために、前回問題ないと思っていた部分まで戻したけど、直らなかった。
その理由はFBが投稿時のURLプレビュー機能でのキャッシングを恐らく行なっているから。
※FBが投稿時のURLプレビュー機能とは↓
キャッシングしてるかどうかを試すために以下のことを行いました。
原因解明
- さくらVPSのサーバー(サーバーAとする)のURLを調べる。
サーバーAのURLとはさくらVPSから与えられるwwwなんとかかんとか.ne.jpってやつ - このURLをプレビューで見る。
- サーバーAのドキュメントルートのindex.html(のhead部分やらbodyやら原因をと思われる部分)を変更する(完全に全く違うファイルとかにするとかでもいい)
- もう一度2.でみたURLを見る。→これが恐らく変わっていない。
(変わってたらキャッシングされなてないかもしれないので、コメントとか欲しいです!←) - サーバーAのIPアドレスをFBのメッセージに打ってみて、プレビューしてみる。
→3.で変更したページが出ている。
簡単に言うと、
- 2つのURIを用意する。
- 片方で一度FBのプレビューを試す。
- URIで表されるページの構造を見てわかるレベルに変更する。
- もう一度プレビューを試す。→すると恐らく変更が反映されていない。
- もう片方のURIでFBのプレビューを試す。→なぜかちゃんと変更されている。
となるはず。
これによってキャッシングはアドレスをキーにして行なっていることがわかる。
おしまい!←
ってなると解決策はないのですが
対応策
じゃあこうなってしまったときどうするか。
- 待つ。
キャッシュなのでいつか期限が切れて、破棄されると思います← - なし!
(まだわかりません。ただ、クライアント側がFBに存在しているキャッシュを破棄させるという機能を実装すると思えないのです(´・ω・`))
じゃあ対策はどうするか。
ちゃんとテストしてからリリースする。ということしか無いのかなと思ってます。
具体的にはURLが存在していると思うので
リリース用が
http://www.hogehoge.com
だったとき、
http://dev1.hogehoge.com
みたいのをテスト環境としておき、
これをFBメッセージで試す
→上手く行った
→リリース
とすべきかなと思います。
だめなら
http://dev2.hogehoge.com
で試すとか。
かなーって思った酔っぱらいの春
今後調査したいもの
- 原因(このアイテムはシェアできません。 無効なURLのリンクです。と出てしまった原因。)
FBのプレビュー時のキャッシュ有効期限について- FBのプレビュー時のキャッシュのユーザー側から行う破棄について
2013/5/12追記
1週間たってもキャッシュの期限は切れていませんでした。
ただ、10日たったら期限は切れていました。
なので、キャッシュの有効期限は7~10日くらいだと思われます。
2013/06/16追記
色々合った結果スパム対策に引っかかってたそうです。
詳しくはスパム対策の内容なので言えないのですが、こうなった場合、問い合わせるのが一番みたいです。
風のうわさで聞いたのですが、知人にFBの人かいたりしたらその人に聞いたりするといいみたいです\(^o^)/w