Twitter Card 対応しました。og:Imageの絶対パス設定で平凡なミス!ContentfulのMediaにアップロードした画像の file > src をよく見てみると…

Twitterでシェアしてもらうときにわかりやすいように、Twitter Cardを設定してます。

TOP画面はsummaryカードを利用しています

記事ページはsummary_largeカードを利用しています

HeroImageを目立たせて、内容をキャッチしていこうという形です。

何回も試しても、記事ページのog:imageが効かず… 

以下のような形でのog:imageの管理をしています。

項目 TOP  記事ページ
画像の場所 リポジトリ(Netlifyにアップ) ContentfulのMedia
場所 https://ordinary-person.work/main-icon.png  以下記述

で、Contentfulで以下のクエリの「url」部分をそのままog:imageに設定していました。

GraphQLのクエリ
query MyQuery {
  contentfulBlogPost{
    title
    slug
    heroImage {
      file {
        url
      }
    }
  }
}
GraphQLの結果
{
  "data": {
    "contentfulBlogPost": {
      "title": "友人とスポーツ観戦へ。あなたはチケットを2枚購入! しかし、友人が残業で遅刻… あなたならどうする?? LINEチケットとLINE Payを利用したチケット購入は便利!",
      "slug": "recommended-line-ticket-and-line-pay",
      "heroImage": {
        "file": {
          "url": "//images.ctfassets.net/9vxvxcp5vdqz/4vM3YgdKEy2LjOSVBS9cac/418177ddbae1a12a84888e4dd376a08e/_______________10.png"
        }
      }
    }
  }
}

...ん?中身をみてみると「//images.」から始まりますね!

結果、Contentful の Media の file > url で返却される値の頭に「html:」を追加すれば、画像の絶対パスが手に入る!

  //images. から始まりますね。GraphQLから返却されている中身。

heroImage > file > url  の部分の頭に「html:」を追加すれば、絶対パスが手に入ることに気が付きましたよ! (エンジニアの対応だと思えない程の、スーパー"ロー"テクノロジー)

ということで、gatsby-plugin-react-helmetを利用して、動的にmetaタグを埋める箇所の条件分岐は以下のようなソースコードになっています。

TOPと記事ページのogImage条件分岐
  ogpImage(): string {
    if (this.isTop === true) { // TOPページだったら
      return this.ogpImageSrc
    }
    else { // 記事ページだったら
      return 'http:' + this.ogpImageSrc
    }
  }

あとは、コンソール開いて私のサイトのheadタグの中身なんぞを見てみてください!

投稿日:2019-07-22
更新日:2019-09-17

© ordinary-person.work / プライバシーポリシー / お問い合わせ