Top > Home > Template > 技術資料:JSON_LOADテンプレートについて

技術資料:JSON_LOADテンプレートについて

  • Posted by: HashiM
  • Template

なんか,先日メインドメインで更新した.htaccessが悪かったようで,サブドメインのhtmlファイル(主にエントリー)の方に軒並みアクセスできない状況になってました(^^;

今はちゃんと直しましたので,改めて情報展開します.

JSON-LDによる構造化マークアップとは?

簡単に書いてしまうと,「schema.org」での構造化マークアップの種類のうちの一つ.scriptタグで記述されることで分かると思うがJavaScriptでの表記.

HTMLタグに埋め込む必要がなく,しかもhead内でまとめて書くことができるので,Movable Typeだとモジュールテンプレートでまとめて書くことも可能(mt.Vicuna HTML5でもモジュールで記述しています).

モジュールテンプレート内での記述ポリシー(何)

最初はblog単独での記述で書いていたのだが,よくよく考えるとWebsite内にblogがあって...という階層構造になっていることを念頭に置いていなかったので,途中から方針転換してしまった(^^;

そんなこんなで,テンプレートの頭でWebsiteなのか,Website内のblogなのかの判定を入れることとなったが,BreadcrumbListの勉強にもなった(怪我の功名(^^;)ので今は満足している(ぉ

参考としたのは...

...なんだけど,正直,text.Baldanders.infoの書き方を殆どのところで使わせてもらっているといったほうが良いかもしれない(^^;

特に,BreadcrumbList内での@idによる紐付け(しかもnameが不要となる)は目から鱗だった.

Qiitaさんのサイトについては,テンプレートのBreadcrumbList部分のベースとして参考にしたんだけど,結局全般設定テンプレートも絡めつつ配列変数を使った記述にしてしまった(詳しくは後述).


前置きが長くなってしまったけど,JSON_LOADテンプレートの大まかな資料(というのか)を書いておく.

Website(兼ブログ)かWebsite内のblogかによる分岐

冒頭に記述のある通り,親WebsiteのIDを取りに行って,それを$blog_idと比較することで判定.一致していればWebsite(兼ブログ)なので,blogURLがそのままWebsiteURLとなるのと,管理者名を「ウェブサイト管理者」で変数として取得している.

$blog_idと一致しない場合は,Websiteにぶら下がっているblogなので,管理者名を「ブログ管理者」で変数取得し,更にblogURLとWebsiteURLとを比較しつつ,BreadcrumbListでの第2階層目の@id部分を自動で決定し変数取得している.

MTSetVarTemplateを使い変数として格納

変数なのに分岐もできて非常に便利なMTタグなのであちこちで使っている(^^;

$JSON_paurl

publisherとauthorを@idで紐付けできるようにしたもので,最終的にはpublisherがOrganizationに,authorがPerson部分に変換される.

$_JSON_LD_index

インデックスとして必ず表記しなければならない部分として,WebSite(と,Websiteにぶら下がっているblogの場合のみBlog),Organization,Personを記述している.

WebSite,Blogに@idって必要か?と最初は思っていたが,BreadcrumbListの@id(1階層目,2階層目)と紐付けしているため実は必須だったりする(^^;

なお,Personの名前部分は,ブログ記事またはウェブページの場合には投稿者の名前を,それ以外の場合には最初の分岐時に変数化した管理者名を使っている.

また,Personのurl部分は,全般設定テンプレートでの$JSON_plofileをそのまま持ってきている(ない場合はblogURL等となる).

$_JSON_LD_Bread

ブログ記事,ウェブページ,カテゴリーリストの場合には必須のBreadcrumbListの階層表示部分を変数化している.

ただし,Websiteにぶら下がっているblogの場合にのみ,メインインデックステンプレートにも使用される.

  • 1階層目:WebSite(@idで紐付け)
  • 2階層目:Websiteにぶら下がっているblogの場合にのみBlog(@idで紐付け),そうでない場合には親カテゴリーまたはメインカテゴリー
  • 3階層目・4階層目:Websiteにぶら下がっているblogの場合にのみ親カテゴリーまたはメインカテゴリー,そうでない場合には親カテゴリーがある場合の子カテゴリー

なお,ウェブページの場合は,全般設定テンプレート内でBreadcrumbListスイッチ($jsonbr)を1にして表示するようにしている.

また,ブログ記事,カテゴリーリストの場合には,全般設定テンプレート内で$jsonbrを2以上にして,配列変数を使用し親・子カテゴリーを変数化している.MTForでループしている部分がカテゴリー階層の記述部分となる.

position(階層)の記述をチコっといじってしまっているが,これはWebsiteにぶら下がっているblogの場合にのみ,カテゴリー階層のスタートが1階層下からとなるのでその辺の対処だったりする(^^;

JSON-LDの記述部分

script全体を[ ] (大括弧)で囲むと一回のscriptで複数のスキームをまとめて記述することが可能だったりします.ただし,最後のスキームを除いてカンマが抜けていたりするとバリデータエラーとなるので注意.

  1. $_JSON_LD_indexを記述
  2. ブログ記事・ウェブページの場合はBlogPosting及びArticleを記述
  3. Websiteにぶら下がっているblogの場合,及びWebsite(兼ブログ)の場合でかつ$jsonbrが1以上の場合のみ$_JSON_LD_Breadを記述

テンプレートの解説については以上となります.

テクニックとして最後に書いておきますけど,全般設定モジュールの先頭部分(変数をいっぱい指定している部分)で独自に変数化したものを,そのままこのテンプレート内で使用することができるので,例えばPerson部分にアバターイメージURLを追加したい場合とか,どうしても空白になりがちなOrganizationのname部分を強制的に変数で指定してしまうとかもできたりします.

弄ってしまった結果,おかしくなってしまった場合には,掲示板とか,HashiM-Git / mt-theme-mtVicuna-HTML5(GitHub)のissuesで叫ぶとかしてもらえれば,こっちでもサポートしますので,気後れせずに弄って頂ければ,長々と記述した苦労も報われます(は?

Comments:0

コメントする

Top > Home > Template > 技術資料:JSON_LOADテンプレートについて

Search

OpenID accepted here

Accepted OpenID

CC Licence

Creative Commons License

このブログはクリエイティブ・コモンズでライセンスされています。

Feeds

Return to page top