仕事で構造化マークアップについて学び直す必要があったので、再度学ぶついでにスライドにまとめてみました。
いわゆるHTMLコーディングにおけるマークアップとは違うものですので、初心者の方はご注意ください。
スライド
スライドをまとめる際のメモ
以下は情報をインプットしていた際のメモです。
読み易くなってはいませんが、スライドよりも端的かもしれないため、掲載しておきますが、できればスライドを読んで欲しいです。
だいたいのことは、ここを読めばわかる
https://www.suzukikenichi.com/blog/definitive-guide-of-schema-org-using-jsonld/
構造化マークアップは通常のマークアップとは別に「『これ』は『あれ』である」というのをコンピューターに知らせる役目
『これ』とか『あれ』というのは、
- 『わがはい』は『猫』である
- 『名前』は『まだない』
- 『この店の名前』は『注文の多いレストラン』
みたいな感じ。
これらの、主語や目的語に入り得る言葉を定義しているのが、schema.org (W3Cかな?と思ったら違った。Bing、Google、Yahoo!のコラボレーションとのことで正式な標準化団体ではありません。)
同様のものとしては data-vocabulary.org があるが、こちらは開発が終了している。
(schema.orgの方が後発。Googleもschema.orgを推奨)
通常のマークアップでは「見出し」とか「リスト」であることは示せるが
「夏目漱石」が「人名」であるのか「地名」であるのか、「夏目漱石」が「どういった人物」であるのかを示すことはできない。
これを明確に指定できるのが構造化マークアップ。
マークアップ方法の概要というか結論
JSON-LD を使えばいい。W3C勧告になったのは2014年の1月。
JavaScript Object Notation Linked Data の略。
同列に扱われるのは、RDFa や microdata と呼ばれるもの。
どんな「書式」で書けばいいのかということ。
schema.orgはデータの決まり(ボキャブラリー)のことで、こちらはデータベースに近い位置付け。
概ね、JSON-LD はこんな感じのフォーマット
HTMLに直接書けるものは、Microdata でもいいが、書けない場合、無駄にdivやspanを追加することになるので、JSON-LD は有用。
ただし、HTMLに存在しないものも書けるのでスパムも可能になってしまう。
これから始める人はJSON-LDでいい。
JSON-LDフォーマットの宣言
scriptタグでいい。type属性の意味などはいつか調べるけれど、JSON-LDを指定しているだけ。
なぜ scriptタグ なのかは少し気になる。他に適切なタグがなかったからか、scriptタグが適しているのかは不明。
schema.org(で定義されているボキャブラリー) を JSON-LD のフォーマットで指定しているという感じ
- schema.orgで表現する1つのモノは 「{」で始まり「}」で閉じる。
- JSONオブジェクトは、1つまたは複数のKey(キー) とValue(バリュー) のペアで構成されます。
- キーとバリューは「:」(コロン)で区切ります。
- そして、「”」(ダブルクォーテーション)でともに囲みます。
まぁ…普通のJSON。
配置
パフォーマンスのことを考えるのであれば、body の閉じタグの直前が良いでしょう。
キーワード?
JSON-LDでは、keyに@Context、@type、@idといったキーワードが定義できる。
キーワードは10種類以上存在するが、schema.orgで利用することになるのは、@Context、@type、@idぐらい
- schema.orgで @id が使われているのは Periodical くらい。
└パンくずで @id を使うみたいだ - つまり基本的には @Context、@type しか使わない
- @graph、@language、@reverse なんかもあるけれど、schema.orgでは使わない様子
@context
構造化マークアップの場合、@context のバリューには http://schema.org を指定。
「http://schema.org の定義に従って記述しますよ」という宣言のようなもの。
HTMLではよくあること
※というこはほぼ100% “@context”: “http://schema.org”, を最初に指定かな。
※おっと、http? https?
https://schema.org/docs/faq.html#19
これによるとどっちでもいいとのこと。文脈的には https にするのがよさそう。
@type
これで、何について表現するのかを指定する。一番肝の部分。
schema.orgで定義されているモノ(アイテム)がバリューにはいる。
“@type”:”表現するもの”
「表現するもの」に入るのは、
- 人物なら Person
- イベントなら、 Event
- 製品やサービスなら Product
という感じのものが入る。
普通は、
“@type”:”Person”
と指定するけれど、
“@type”:”http://schema.org/Person”
という指定もあり。
@context で指定済みなので省略できるという感じ。
@typeの値は勝手に自分で入れていい訳ではなく、schema.orgで定義されているということ。
その一覧は、
http://schema-ja.appspot.com/docs/full.html
ここが日本語でわかりやすいけど・・・・・膨大!!!!(&載っていないのもありそう。例えば logo とか)
大元はここ。1620個!??
https://schema.org/docs/full.html
https://schema.org/version/3.4/schema.jsonld
具体的な数はわからないけれど、後者のJSONは1620個ある。前者のリストは800個くらい。
よく使われるのはこの辺りって書いてあるけど、そうでもないと思う
https://schema.org/docs/schemas.html
一般的に使われそう(=Googleが利用している)なものはここに載っている
https://developers.google.com/search/docs/data-types/article
https://developers.google.com/search/docs/guides/mark-up-content
https://developers.google.com/search/docs/guides/search-gallery
※意外と Person が一番親で使われることはなく、 Article、NewsArticle、BlogPosting などの authorプロパティのバリューなどとして使われる様子。
※もちろんその人の紹介ページであれば Person が使われるけれど、Google的には使う場所がないっぽい。(人名検索した時に大きく出るやつは違うのかな?)
プロパティ
@type で指定したアイテムに応じて、使用できるプロパティが決まっていて、それをキーに持てる。
Person なら、「nameプロパティ」とか「urlプロパティ」とか。
“name”:”竹内直人”,
“name”:”https://capybara-design.com/”,
という感じ。(順不同)
他にも、
- 生年月日を表す birthDate
- 写真を表す image
- 勤務先を表す worksFor
などがある。
これらは、http://schema.org/Person に載っている・・・けど・・・膨大!!!!
同じプロパティを別個に複数記述すると検証ツール(後述)ではエラーが出なかったとしても、通常は最初しか認識されない。
複数の値を同じプロパティで指定したいときは配列で1つにまとめる。
これらは埋め込み・もしくは入れ子にすることができる
イベントの中の「講演者」や「会場」などを更に構造化マークアップすることが可能
具体的にどのページに書けばいいの?
といった疑問を少し解消してくれるかもしれないリンク。
https://developers.google.com/search/docs/guides/sd-policies
https://webtan.impress.co.jp/e/2017/12/18/27557