問題:TwitterCardが表示されない
Card Validator | Twitter Developers
ブログを作ってみたはいいんですが、投稿があるたびにTwitterで共有しようにもTwitterCard(OGP画像)が表示されずに困っていました.
そこで今回はこのエラーの原因を突き止め、TwitterCardが表示されるようにしてみました。
TL:DR;
- プラグイン
gatsby-react-helmet
が追加・設定されていなかったことが原因 - Developer Toolで確認するとmetaタグがあるように見えても、実際にビルドされたHTMLを確認して、必要なmetaタグが追加されているか確認することが大事
調査
まずは次のような調査方針で進めてみました。
- TwitterCardが表示される仕組みを調べる
- 1と現状のサイトを比較し、足りていない要素を調べ、追加する
- 2で表示されなければ、調査方針再検討
TwitterCardが表示される仕組み
【2020年版】Twitterカードとは?使い方と設定方法まとめ
これらの記事を確認する限り、TwitterCardを表示するために必要なことは、以下のmetaデータを設定することのようです。
現状のサイトと比較
確認したところ、エラー発生時には、次の3つのmetaデータがありませんでした。
Twitter特有のmetaとしては、twitter:site
がもっとも怪しそうなので、まずはこちらを追加してみます。
なおも失敗してしまったので、og:url
を追加してみます。
またもや失敗してしまいました。エラーメッセージが変わらないのが気になるところです🤔
最後に、まだ不足しているog:image
を追加します。
エラーメッセージ含めて、何も解消されません。
方針再設定
設定をしたにもかかわらず、Card Validatorが表示するメッセージが変わらないことを考慮すると、どうやら別のところに原因がありそうです。
しかも登録しているmetaタグはいくつもあるのに4 metatags were found
としか表示されないことを考えると、次の2つの可能性が考えられます。
- metaタグが実際には生成されていない
- metaタグが生成されてはいるが、読み取られていない
まずは1つ目について確認してみることにしました。
生成されたmetaタグを確認する
ここまではChrome Developer Toolで確認してきましたが、実際にgatsby build
によって生成されたhtmlがどうなっているかを確認してみます。
すると、metaタグに相当するのは4件のみで、Twitter関連で設定した内容は全く反映されていません。
どうやらここが怪しそうです。
gatsby-react-helmetが正しく機能しているかを確認
メタデータを追加するために、react-helmet
を使用しているのですが、Gatsbyjsで使用するためにはgatsby-react-helmet
も必要です。
つまり、以下のような実際にmetaタグを定義するコンポーネントだけではNGで
それを使用する前提として、プラグインを追加し、
それをgatsby-config.js
で宣言しておく必要があるのです。
…確認してみたところ、プラグインの追加と宣言が漏れていました。
そのため上記設定を施し、再度gatsby build
を実行すると、ビルド結果のHTMLにmetaタグが追加されていました。
Developer Toolでの確認結果も、metaタグが上位に表示されるようになり、
metaタグも読み取られ、Twitter Cardが表示されるようになりました。
ついでに各記事ページごとにヒーローイメージを取得するように設定して、本件は任務完了です🥷