質問: webサイト()を運用しているのですが、twitter cardを設定することができません。 以下のようにhtmlに必要な項目を設定しているのですが、 ``` ``` twitter card validator()でサイト(https://scuba-monsters.com/spot )を確認すると以下のようなログが表示され設定されていません。 ``` INFO: Page fetched successfully INFO: 2 metatags were found ERROR: No card found (Card error) ``` html上では``を設定しているのですが、設定の仕方に誤り、設定の項目が不足などあるのでしょうか? サイトはrailsで運用しておりバージョンは以下の通りです。 Ruby 2.6.3 Rails 6.0.3.4 どうしたらtwitter cardを設定できるでしょうか?ご教示お願いいたします! また、さらに必要な情報などもあれば教えていただけると幸いです。
回答: 原因 == サーバ側の実装で、`Accept` ヘッダによって返すリクエストが変わっているようです。 通常、ブラウザは以下の `Accept` ヘッダを付けてリクエストします。 **この場合、該当のページからは HTML が返ってきます。** ``` Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 ``` 一方で、Twitter Card の情報を取得する Twitterbot は以下の `Accept` ヘッダを付けてリクエストします。 **この場合、該当のページからは JavaScript が返ってきます。** ``` accept: */* ``` これは「ツイートの続きを見る」ボタンを押したとき用の の Ajax レスポンスではないでしょうか。 これにより、Twitter Card のメタ情報が取得できず、エラーとなっているようです。 解決策 === 以下のいずれかの方法が考えられます。 * `Accept` ヘッダによってレスポンスを変えるのをやめて、URL にパラメータが付与されていない場合は HTML を返す * Ajax レスポンスとURLを分けて、`/spot` からは常にHTMLを返す * `User-agent` が `Twitterbot/1.0` のときは、HTMLを返す