Twitterカードについて

Twitterカードの設定、確認の方法について書いていきます。

#Twitterカードとは
Twitterカードとは、Twitterにてツイート内容に含まれるリンクを画像や説明付きでカードのような見た目で表示する機能です。
リンク先ページにTwitterカード用のmetaタグ埋め込みを行うことで、本機能を適用することができます。
![twittercard.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217523/813bb68b-a203-6911-2205-ddee1f686453.jpeg)
[画像はTwitter公式より引用](https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/summary-card-with-large-image)

#Twitterカードのメリット
Twitterカードのメリットはクリック率の向上が期待できることです。
タイムライン上で、ただ単にリンクが載っているよりも画像等がある方が興味を惹かれますよね。
カード形式で表示されることで、リンクのみの場合と比べてクリックできる範囲が大きくなるという利点もあります。

**Twitterカード設定なし**
![設定なし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217523/1f4b3605-0ba2-ce72-acf9-e833dfe9e26a.png)
**Twitterカード設定あり**
![設定あり.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217523/90d636a0-f67e-1e75-d036-caa56f065bdc.png)

#Twitterカードの設定
Twitterカードを表示させるための設定は簡単です。
カード形式で表示させたいリンク先ページのheadタグに、下記のようなmetaタグを埋め込むだけです。

```html
<head>
    ・・・
    <meta name="twitter:card" content="カードの種類">
    <meta name="twitter:title" content="ページのタイトル">
    <meta name="twitter:description" content="ページの説明文">
    <meta name="twitter:image" content="画像のURL">
    ・・・
</head>
```

###twitter:card

```html
<meta name="twitter:card" content="カードの種類">
```
`twitter:card`には、Twitterカードの種類(表示形式)を設定します。
カード種類には「summary」「summary_large_image」「app」「player」の4種類があります。アプリ配布用の「app」と動画配信用の「player」については、この記事では割愛します。

**・summaryを指定した場合**
`twitter:image`に設定した画像が左側に小さく表示され、
`twitter:title`、`twitter:description`に設定したタイトル及び説明が右側に表示されます。
![summary.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217523/213db8a8-d5c7-fc91-1831-8a07fdf19a15.png)

**・summary_large_imageを指定した場合**
`twitter:image`に設定した画像が上側に大きく表示され、
`twitter:title`、`twitter:description`に設定したタイトル及び説明が下側に表示されます。
![summary_large_image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217523/7d4977a2-8639-f665-a814-6849b6e30784.png)

`twitter:card`省略時は、カード形式で表示されなくなるようです。

```html
<meta name="twitter:title" content="Twitterカードのサンプル">
<meta name="twitter:description" content="Twitterカードの種類を省略した場合のサンプルです。">
<meta name="twitter:image" content="https://dl.dropboxusercontent.com/s/xxxxxxxxxxxxxxx/sample.jpg?dl=0">
```
![カード種類省略.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217523/e4f3ef96-db6b-9f83-0abd-9d5517336d8f.png)


###twitter:title

```html
<meta name="twitter:title" content="ページのタイトル">
```
`twitter:title`には、ページのタイトルを設定します。
基本的にはページ内のtitleタグと同じ内容を設定します。
70文字まで設定可能ですが、Twitterカード上では文字数が多いと末尾が「…」表示で省略されます。

`twitter:title`省略時も、カード形式で表示されなくなるようです。

```html
<meta name="twitter:card" content="summary">
<meta name="twitter:description" content="Twitterカードのタイトルを省略した場合のサンプルです。">
<meta name="twitter:image" content="https://dl.dropboxusercontent.com/s/xxxxxxxxxxxxxxx/sample.jpg?dl=0">
```
![タイトル省略.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217523/5020eeb8-4b9e-832d-07c9-b0abc423c656.png)


###twitter:description

```html
<meta name="twitter:description" content="ページの説明文">
```
`twitter:description`には、ページの説明文を設定します。
基本的にはページ内のdescriptionタグと同じ内容を設定します。
200文字まで設定可能ですが、Twitterカード上では文字数が多いと末尾が「…」表示で省略されます。

また、説明文はPCなどの画面幅が大きい場合には表示されますが、スマホのように画面幅が小さい場合には表示されないので注意が必要です。

**・PCで表示**
![文字数.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217523/d319ed4f-c8f2-811a-5563-9f9aeb91ed6a.png)
**・スマホで表示**
![sp.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217523/0ddeb136-6c0b-db28-a77b-6cf03ac57ed5.jpeg)

`twitter:description`省略時は、カード形式の表示は可能で、説明文が表示されなくなります。

```html
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Twitterカードのサンプル">
<meta name="twitter:image" content="https://dl.dropboxusercontent.com/s/xxxxxxxxxxxxxxx/sample.jpg?dl=0">
```
![説明文省略.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217523/dac4ef85-d170-1332-a358-f9e9e18da078.png)


###twitter:image

```html
<meta name="twitter:image" content="画像のURL">
```
`twitter:image`には、画像のURLを設定します。(絶対パス)
カード種類ごとの画像の規定は下表の通りです。

|  カード種類  |  横縦比  | 最小(px)  |  最大(px)  |  容量  |
| :----: | :----: | :----: | :----: | :----: | :----: |
|  [summary](https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/summary) |  1:1  |  144×144 |  4096×4096 |  5MB以下  |
|  [summary_large_image](https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/summary-card-with-large-image) |  2:1  |  300×157 |  4096×4096 |  5MB以下  |
また、画像ファイルの拡張子としては、JPG、PNG、WEBP、GIF(静止画として表示)に対応しています。SVGには対応していません。
規定のサイズを超えていたり、比率が異なる場合には自動で中央寄せでトリミングされます。
例えば、下図のようにカード種類が「summary」で、元画像が縦長の場合は1:1の正方形でトリミングされます。
![トリミング.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217523/b54a93e8-bd95-9a9d-aa44-10d0fc853aff.png)
`twitter:image`省略時は、デフォルト画像が表示されます。

```html
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Twitterカードのサンプル">
<meta name="twitter:description" content="Twitterカードの画像を省略した場合のサンプルです。">
```
![画像省略.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217523/e1019355-3b96-c028-32e6-5a0c5a7d8444.png)

###OGPタグによる置き換え
Twitterカードを表示するにはTwitterカード用のmetaタグを埋め込むと書きましたが、下表のように一部のmetaタグはOGP(Open Graph Protcol)タグで置き換えることが可能です。

|  Twitterタグ  |  OGPタグ  |
| :----: | :----: | 
| name="twitter:title" | property="og:title" |
| name="twitter:description" | property="og:description" |
| name="twitter:image" | property="og:image" |

Twitterカードを表示する際の仕組みとして、まずTwitterタグが存在するかチェックされます。Twitterタグが存在しない場合はOGPタグが存在するかチェックされ、設定されている場合はその値が使用されます。
そのため、↓のようにTwitterタグとOGPタグを混在させることが可能です。

```html
<head prefix="og: http://ogp.me/ns#">
    ・・・
    <meta name="twitter:card" content="カードの種類">
    <meta property="og:title" content="ページのタイトル">
    <meta property="og:description" content="ページの説明文">
    <meta property="og:image" content="画像のURL">
    ・・・
</head>
```
TwitterタグはTwitter固有のmetaタグで、OGPタグはFaceBookなどの他のSNSでも適用される共通的なmetaタグという感じです。
将来的に他のSNSでのシェアを検討している場合や、既にOGPタグを使用している場合はこちらの書き方にしましょう。

Twitterタグのみの場合と異なり、headタグに`prefix="og: http://ogp.me/ns#"`を追加していますが、これはOGPタグを使用する際の宣言として記述するようです。記述しなかった場合にどうなるか試したのですがTwitterカード上は特に影響がなさそうでした。
[Twitter公式ドキュメント](https://developer.twitter.com/ja/docs/tweets/optimize-with-cards/guides/getting-started)でも下記のように書かれていますが、OGPタグを利用する場合は記述しておいた方が無難だと思います。
>Open Graphは\<html prefix="og: http\://ogp.me/ns#">を介して“og” RDFa Core 1.1 CURIEプレフィックスマッピングを指定することを推奨していますが、Twitterカードや、HTMLメタ要素のname属性のtwitter:プレフィックスでの使用には、そのようなマークアップは必要ありません。


#Twitterカードの表示確認
Twitterの公式で提供されているテスト用ツールで、Twitterカード設定したページのリンクがツイート時にどう見えるのか確認することができます。
https://cards-dev.twitter.com/validator
※Twitterへのログインが必要となります。
![cardValidator手順.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217523/cd44deae-d692-224e-4012-53b1b5132988.png)


本ツールでTwitterカード設定したページのURLを入力して、プレビュー表示で確認できます。
注意点として、対象とするページが公開されている必要があり、localhostでは確認することができません。また、Basic認証やIP制限などを行っているページについても確認できません。
仕組みとして、クローラーが対象ページにアクセスすることで情報を読み込んでいるため、アクセス制限のあるページなどではできないようです。

####CardValidatorで確認(ローカルのページ)
ローカルのページでも簡単に確認できる方法がないかと調べた結果、DropBoxの共有URLを利用した方法があるようです。
https://qiita.com/kai-ono/items/a5be158c627935b301ff
こちらの記事を参考に、ローカルで作成したhtmlファイルに対して共有URLを生成して、生成したURLをCardValidatorで入力することで確認することができました。

```html:index.html
<html>
    <head>
        <meta name="twitter:card" content="summary">
        <meta name="twitter:title" content="Twitterカードのサンプル">
        <meta name="twitter:description" content="Twitterカードの種類に「summary」を指定した場合のサンプルです。">
        <meta name="twitter:image" content="https://dl.dropboxusercontent.com/s/xxxxxxxxxxxxxxx/sample.jpg?dl=0">
    </head>
    <body>
        <span>Twitterカード確認用ページ</span>
    </body>
</html>
```
![cardvalidator3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217523/e96d51a4-ebdd-6c84-3b6e-1c820d6634d2.jpeg)
その他に「Localhost OGP チェッカー」というChromeの拡張機能を利用する方法も見つけたのですが、こちらについては私の環境では残念ながら正常に動きませんでした。

https://chrome.google.com/webstore/detail/localhost-open-graph-chec/gcbnmkhkglonipggglncobhklaegphgn

**ツイート時のプレビュー**
実際にツイートする際にもプレビューが表示されるようです。
CardValidatorのプレビューは、ドメインの表示位置が異なる、タイトルが太字など、実際のTwitterカードとは微妙に異なるみたいなので最終的にはここで確認しましょう。
![ツイート画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217523/7d07b3d2-0388-0f5f-ba41-a0588f10a21b.png)
ツイート時に確認できるのであれば、CardValidatorで確認する必要がないと思うかもしれませんが、CardValidatorでの確認はTwitterカードのキャッシュ削除の役割も持っているようです。
metaタグの内容を変更した際にTwitter側のキャッシュが残っているために、Twitterカードの内容が更新されないということがあるみたいなので、内容を変更した場合にはツイート前に一度通しておいた方が良いと思います。

#まとめ
本記事で記述した内容の要点です。

- Twitterカードを表示させるには、対象ページのheadタグにTwitterカード用のmetaタグを埋め込む。
- FaceBookなどの他のSNSを考慮する場合はOGPタグも利用する。
- 公式ツールのCardValidatorでTwitterカードのプレビュー表示ができる。
- CardValidatorはTwitterカードのキャッシュ削除の役割も担っている。

Twitterカードは、HTMLの編集だけで利用できる意外と簡単な機能です。
この記事を参考に是非設定してみてください！