ここにはかなりのジレンマがあり、コミュニティからの提案をお願いします。これが私の問題です:
動的なコンテンツがたくさんあるWebサイトを作成しました。すべてのコンテンツは、AJAXを介して取得され、JSを介して表示されます。現在、コンテンツへの直接リンクを許可している方法は、JSを使用してフラグメント識別子をその場で変更することです。例を次に示します。
http://www.mysite.com/home#/123
ここで、123はコンテンツのIDです。コンテンツが閉じられると、フラグメント識別子が再び削除されます。
これは素晴らしく機能し、人々がページをロードすると、私のAJAXリクエストは「123」の記事を正常にリクエストしています。しかし、私はすべての記事にFacebookのようなボタンを実装したばかりで、今はレンガの壁にぶつかっています。
基本的に、Facebookが「いいね」コンテンツに関連付けるサムネイルとタイトルおよびURLを見つける方法は、iframeのようにfbに渡されたURLのメタタグをチェックすることです。これを行うには、URLでGETリクエストを実行し、メタタグのコンテンツを確認してから、それらをFacebookに表示します。
問題は、フラグメント識別子がサーバーに渡されないことです。そのため、PHP(私が知っている)では、特に要求された記事のコンテンツを使用してこれらのメタタグを動的に生成する方法がありません。
たとえば、私は次のようなことができるようにしたかったのです。
$id_vals = get_id_values($hash_fragment);
echo '<meta property="og:title" content="'.$id_vals['title'].'" />';
あなたの最初の考えはおそらく:GETリクエストまたはクエリ文字列を使用しないのはなぜですか?すなわち:
http://www.mysite.com/home?id=123
ただし、このアプローチの問題は、JavascriptがURLのこの部分を動的に変更できず、フラグメント識別子のみを変更できることです。これは、記事へのすべての直接リンクでページの更新が必要になることを意味します。これは、私たちが行っている「動的」アプローチ全体に反します-私が追加するかもしれませんが、これは本当に素晴らしいです:)
だから私は今ちょっと困惑しています。私が考えることができる唯一の半解決策は、両方のアプローチを使用することです。
fbのようなリクエストではgetパラメータを使用し、直接リンクの場合はフラグメント識別子を使用します。
しかし、これには次の問題があります。
- ユーザーから直接リンクがFacebookに貼り付けられた場合、フラグメントIDが含まれ、正しいメタデータがFacebookに表示されません。
- URLの形式を修正してIDを削除するために、奇妙なリダイレクトの魔法を実行する必要があります(つまり、GETパラメーターが渡されたかどうかを検出し、同等のフラグメント識別子にリダイレクトします)。しかし、FBがリダイレクトに従い、最初のページではなくリダイレクトされたページからメタタグをフェッチするかどうかはわかりません。これにより、このソリューションは効果的に役に立たなくなります。
テキストの壁でごめんなさい!あなたが提供できるどんな入力にも感謝します。
編集:私は両方の組み合わせを含む提案されたソリューションをテストしましたが、Facebookがリダイレクトに従うことを確認できるため、このソリューションはまったく機能しません。これは気のめいるようです!
編集編集:私の「ミックス」のアイデアを実装する1つの可能な方法は、PHPのheader()呼び出しリダイレクトの代わりにwindow.locationリダイレクトを使用することです。これにより、Facebookは、同様の問題を抱えている人のために、元のページからメタタグをフェッチします。 。
ありがとう。