すたすた式
Blogger QooQ SearchConsole
JSON-LDでgraphを使って構造化データを書いてみました。
データタグ(こういうやつ→<deta:.../>)を使っているので、ある程度はコピペでいけるはずです。(画像のurlなどは各自で用意してください。)
<deta:.../>
あくまでも一例なのでプロパティの追加、削除、位置の変更などいろいろ試してみてください。
現在使っているテンプレート(テーマ)はQooQなので、データタグはウィジェットバージョン1のものを使用しています。
ウィジェットバージョン2のテンプレート(テーマ)を使っている方は、Les équivalents des données des gadgets version 1 dans la version 2 - Blogger Code PE を参照して、該当するデータタグを置き換えることで使用可能です。
ウィジェットバージョンの確認方法は、[テーマ] > [カスタマイズ] > [HTMLの編集]の画面でhtmlタグのなかにb:defaultwidgetversion='2'とあったらバージョン2。
html
b:defaultwidgetversion='2'
または、ブログ上で右クリック、「ページのソースを表示」などをクリック。Blog1でページ内検索すると確認できます。
Blog1
バージョン1 <div class='widget Blog' data-version='1' id='Blog1'> バージョン2 <div class='widget Blog' data-version='2' id='Blog1'>
主に下記サイトを参考にしながら書いてみました。
素人が書いたものです、正確性は担保できないので留意してください。
HTMLを編集します。必ずバックアップを取ってから作業してください。
投稿(記事)・ページ(固定ページ)の構造化データです。
<script type='application/ld+json'> { "@context": "https://schema.org", "@graph": [ { "@type": "WebSite", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#website", "url": "<data:blog.homepageUrl.canonical.jsonEscaped/>", "name": "<data:blog.title/>", "publisher": { "@type": "Organization", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#organization", "url": "<data:blog.homepageUrl.canonical.jsonEscaped/>", "name": "<data:blog.title.jsonEscaped/>", "logo": { "@type": "ImageObject", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#logo", "url": "ロゴ画像のurl", "width": "数値", "height": "数値" } } }, { "@type": "WebPage", "@id": "<data:blog.url.canonical.jsonEscaped/>#webpage", "url": "<data:blog.url.canonical.jsonEscaped/>", "inLanguage": "ja-JP", "name": "<data:blog.title.jsonEscaped/>", "description": "<data:description/>", "primaryImageOfPage": { "@type": "ImageObject", "@id": "<data:post.url.canonical.jsonEscaped/>#primaryimage" }, "potentialAction": { "@type": "SearchAction", "target": "<data:blog.homepageUrl.canonical.jsonEscaped/>search?q={search_term_string}&max-results=10", "query-input": "required name=search_term_string" }, "isPartOf": { "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#website" } }, { "@type": "Article", "@id": "<data:post.url.canonical.jsonEscaped/>#article", "mainEntityOfPage": { "@type": "WebPage", "@id": "<data:post.url.canonical.jsonEscaped/>" }, "author": { "@type": "Person", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#author", "name": "<data:post.author.jsonEscaped/>", "url": "著者プロフィールのurl", "image": { "@type": "ImageObject", "url": "著者の画像url", "width": "数値", "height": "数値" }, "sameAs": "Twitterのurlなど" }, "publisher": { "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#organization" }, "headline": "<data:post.title.jsonEscaped/>", "description": "<data:post.longSnippet.jsonEscaped/>", "image": { "@type": "ImageObject", "url": "<data:view.featuredImage.jsonEscaped/>", "width": "数値", "height": "数値" }, "datePublished": "<data:post.timestampISO8601.jsonEscaped/>", "dateModified": "<data:post.lastUpdatedISO8601.jsonEscaped/>", "isPartOf": { "@id": "<data:blog.url.canonical.jsonEscaped/>#webpage" } } ] } </script>
BreadcrumbList(パンくずリスト)付きのバージョンも一応作ってみました。
(Bloggerはパンくずリストというようりラベル(タグ)の集まりなので、扱い方は好みがあると思います)
<script type='application/ld+json'> { "@context": "https://schema.org", "@graph": [ { "@type": "WebSite", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#website", "url": "<data:blog.homepageUrl.canonical.jsonEscaped/>", "name": "<data:blog.title/>", "publisher": { "@type": "Organization", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#organization", "url": "<data:blog.homepageUrl.canonical.jsonEscaped/>", "name": "<data:blog.title.jsonEscaped/>", "logo": { "@type": "ImageObject", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#logo", "url": "ロゴ画像のurl", "width": "数値", "height": "数値" } } }, { "@type": "WebPage", "@id": "<data:blog.url.canonical.jsonEscaped/>#webpage", "url": "<data:blog.url.canonical.jsonEscaped/>", "inLanguage": "ja-JP", "name": "<data:blog.title.jsonEscaped/>", "description": "<data:description/>", "primaryImageOfPage": { "@type": "ImageObject", "@id": "<data:post.url.canonical.jsonEscaped/>#primaryimage" }, "potentialAction": { "@type": "SearchAction", "target": "<data:blog.homepageUrl.canonical.jsonEscaped/>search?q={search_term_string}&max-results=10", "query-input": "required name=search_term_string" }, "breadcrumb":{ "@id":"<data:blog.url.canonical.jsonEscaped/>#breadcrumb" }, "isPartOf": { "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#website" } }, { "@type": "Article", "@id": "<data:post.url.canonical.jsonEscaped/>#article", "mainEntityOfPage": { "@type": "WebPage", "@id": "<data:post.url.canonical.jsonEscaped/>" }, "author": { "@type": "Person", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#author", "name": "<data:post.author.jsonEscaped/>", "url": "著者プロフィールのurl", "image": { "@type": "ImageObject", "url": "著者の画像url", "width": "数値", "height": "数値" }, "sameAs": "Twitterのurlなど" }, "publisher": { "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#organization" }, "headline": "<data:post.title.jsonEscaped/>", "description": "<data:post.longSnippet.jsonEscaped/>", "image": { "@type": "ImageObject", "url": "<data:view.featuredImage.jsonEscaped/>", "width": "数値", "height": "数値" }, "datePublished": "<data:post.timestampISO8601.jsonEscaped/>", "dateModified": "<data:post.lastUpdatedISO8601.jsonEscaped/>", "isPartOf": { "@id": "<data:blog.url.canonical.jsonEscaped/>#webpage" } }, { "@type": "BreadcrumbList", "@id": "<data:blog.url.canonical.jsonEscaped/>#breadcrumb", "itemListElement": [ { "@type": "ListItem", "position": 1, "item": { "@type": "WebPage", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>", "url": "<data:blog.homepageUrl.canonical.jsonEscaped/>", "name": "<data:messages.home.jsonEscaped/>" } }, { "@type": "ListItem", "position": 2, "item": { "@type": "WebPage", "@id": "<b:eval expr='data:post.labels ? data:post.labels.last.url.jsonEscaped : data:post.url.jsonEscaped'/>", "url": "<b:eval expr='data:post.labels ? data:post.labels.last.url.jsonEscaped : data:post.url.jsonEscaped'/>", "name": "<b:if cond='data:blog.pageType == "item"'><b:eval expr='data:post.labels ? data:post.labels.last.name.jsonEscaped : "その他"'/><b:else/><data:blog.pageName.jsonEscaped/></b:if>" } } ] } ] } </script>
head内やbody内のどこに設置してもいいらしいのですが、データタグを使って情報を取得している関係上、Blogウィジェット内に設置しました。
具体的な設置場所ですが、以前書いた[Blogger]ほぼコピペでOK サーチコンソール 構造化データのエラーを消す!JSON-LDでマークアップに挑戦[Search Console] [Vaster 1.9 & 2 ]-すたすた式
で参照したschema.org構造化データBlogPosting対応 with JSON+LD in blogger – Weizlogy(リンクが切れていたのでWayback Machineのリンクです)にならって
<b:loop values='data:posts' var='post'>直下に設置。
<b:loop values='data:posts' var='post'>
<b:loop values='data:posts' var='post'>は複数あると思いますが、<data:post.body/>の近くにあるやつでいけると思います。
<data:post.body/>
(もしくは<data:post.body/>の前後に設置してもいいかもしれません。)
設置したらスキーマ マークアップ検証ツールやリッチリザルト テスト - Google Search Consoleで動作を確認します。
publisher > logo > url
運営が会社組織の場合、会社のロゴ画像のurlだと思いますが、個人の運営だとプロフィール画像のurlとかでしょうか。
プロフィール画像のurlは<data:post.authorPhoto.url/>(<data:post.authorPhoto.url.canonical.jsonEscaped/>で取得できます。
<data:post.authorPhoto.url/>
<data:post.authorPhoto.url.canonical.jsonEscaped/>
"logo": { "@type": "ImageObject", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#logo", "url": "<data:post.authorPhoto.url.canonical.jsonEscaped/>", "width": "数値", "height": "数値" }
widthは画像の横のサイズ、heightは縦のサイズです。
例 "width": "150", "height": "150"
primaryImageOfPageはページのメイン画像
Indicates the main image on the page.
特定の画像があればurlなどを追加
"primaryImageOfPage": { "@type": "ImageObject", "@id": "<data:post.url.canonical.jsonEscaped/>#primaryimage", "url": "画像のurl", "width": "数値", "height": "数値" },
もし、記事内の画像を使う場合は後述のArticleのimageに使えそうなデータタグを参照してください。
author > url, image
プロフィール(プロファイル)のurlは<data:post.authorProfileUrl/>(<data:post.authorProfileUrl.canonical.jsonEscaped/>)で取得できます。
<data:post.authorProfileUrl/>
<data:post.authorProfileUrl.canonical.jsonEscaped/>
また、プロフィール画像がロゴ画像と同じであれば、"image"に"@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#logo"が使えます。
"image"
"@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#logo"
"author": { "@type": "Person", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#author", "name": "<data:post.author.jsonEscaped/>", "url": "<data:post.authorProfileUrl.canonical.jsonEscaped/>", "image": { "@type": "ImageObject", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#logo" } }
author > description
<data:post.longSnippet.jsonEscaped/>を使っているので文章が長いです。
<data:post.longSnippet.jsonEscaped/>
短いほうが良ければ
<data:post.snippet.jsonEscaped/>
<data:view.description.jsonEscaped/>
などを検討してください。
<data:view.featuredImage/>, <data:post.firstImageUrl/>, <data:blog.postImageUrl/>あたりが使えそうです。(widthとheightの値は一例。)
<data:view.featuredImage/>
<data:post.firstImageUrl/>
<data:blog.postImageUrl/>
width
height
"image": { "@type": "ImageObject", "url": "<data:view.featuredImage.jsonEscaped/>", "width": "1200", "height": "675" },
記事に画像がない場合リッチリザルト テスト - Google Search Consoleで警告がでたので、なるべく代替画像を用意したほうがいいと思います。
代替画像を指定した例
"image": { "@type": "ImageObject", "url": "<b:eval expr='data:view.featuredImage ? data:view.featuredImage.jsonEscaped : "代替画像のurl".jsonEscaped'/>", "width": "1200", "height": "675" },
画像のサイズに関しては記事 | Google Developersの非AMPを見ると画像の幅は696ピクセル以上必要。
記事を表す画像の URL。記事に直接属するマークアップされた画像のみを指定する必要があります。画像の幅は 696 ピクセル以上にする必要があります。 記事 | Google Developers
記事を表す画像の URL。記事に直接属するマークアップされた画像のみを指定する必要があります。画像の幅は 696 ピクセル以上にする必要があります。
記事 | Google Developers
要件に合わせるため、画像をリサイズする場合は下記の通り。
例:幅1200ピクセルでアスペクト比16:9の場合。(16:9のところは1200:675でもOK)
"image": { "@type": "ImageObject", "url": "<b:eval expr='resizeImage(data:view.featuredImage,1200,"16:9").jsonEscaped'/>", "width": "1200", "height": "675" },
代替画像がある場合は
"image": { "@type": "ImageObject", "url": "<b:eval expr='(data:view.featuredImage ? resizeImage(data:view.featuredImage, 1200, "16:9") : "代替画像のurl").jsonEscaped'/>", "width": "1200", "height": "675" },
また、画像のサイズは複数指定が推奨されていました。
適切な画像が選択されるようにするために、アスペクト比が 16x9、4x3、1x1 の高解像度画像(幅と高さをかけて 300,000 ピクセル以上の画像)を複数指定してください。 記事 | Google Developers
{ "@context": "https://schema.org", "@type": "NewsArticle", "image": [ "https://example.com/photos/1x1/photo.jpg", "https://example.com/photos/4x3/photo.jpg", "https://example.com/photos/16x9/photo.jpg" ] } 記事 | Google Developers
{ "@context": "https://schema.org", "@type": "NewsArticle", "image": [ "https://example.com/photos/1x1/photo.jpg", "https://example.com/photos/4x3/photo.jpg", "https://example.com/photos/16x9/photo.jpg" ] }
author > sameAs
TwitterやFacebookなどのurlを記入
例 "sameAs": "https://twitter.com/sutajpOnTw" 複数だったら "sameAs":[ "https://www.facebook.com/***", "https://www.instagram.com/***/", "https://twitter.com/***" ]
"position": 2のitemはテンプレートQooQのロジックを参考にしました。
"position": 2
item
{ "@type": "ListItem", "position": 2, "item": { "@type": "WebPage", "@id": "<b:eval expr='data:post.labels ? data:post.labels.last.url.jsonEscaped : data:post.url.jsonEscaped'/>", "url": "<b:eval expr='data:post.labels ? data:post.labels.last.url.jsonEscaped : data:post.url.jsonEscaped'/>", "name": "<b:if cond='data:blog.pageType == "item"'><b:eval expr='data:post.labels ? data:post.labels.last.name.jsonEscaped : "その他"'/><b:else/><data:blog.pageName.jsonEscaped/></b:if>" } }
トップページ用が必要ならこんな感じに。
設置場所は使用しているテンプレートによって異なります。
<b:if cond='data:view.isHomepage'> <script type='application/ld+json'> { "@context": "https://schema.org", "@graph": [ { "@type": "WebSite", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#website", "url": "<data:blog.homepageUrl.canonical.jsonEscaped/>", "name": "<data:blog.title/>", "publisher": { "@type": "Organization", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#organization", "url": "<data:blog.homepageUrl.canonical.jsonEscaped/>", "name": "<data:blog.title.jsonEscaped/>", "logo": { "@type": "ImageObject", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#logo", "url": "ロゴ画像のurl", "width": "数値", "height": "数値" } } }, { "@type": "WebPage", "@id": "<data:blog.url.canonical.jsonEscaped/>#webpage", "url": "<data:blog.url.canonical.jsonEscaped/>", "inLanguage": "ja-JP", "name": "<data:blog.title.jsonEscaped/>", "description": "<data:description/>", "primaryImageOfPage": { "@type": "ImageObject", "@id": "<data:post.url.canonical.jsonEscaped/>#primaryimage" }, "potentialAction": { "@type": "SearchAction", "target": "<data:blog.homepageUrl.canonical.jsonEscaped/>search?q={search_term_string}&max-results=10", "query-input": "required name=search_term_string" }, "isPartOf": { "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#website" } } ] } </script> </b:if>
試行錯誤中なので個人的なメモです。
記事公開時点では下記のような運用をしています。(テンプレートはQooQ list v1.27)
テンプレート内最初の<b:loop values='data:posts' var='post'>直下に投稿(記事)・ページ(固定ページ)用の構造化データを設置。
投稿(記事)・ページ(固定ページ)用の構造化データ
<script type='application/ld+json'> { "@context": "https://schema.org", "@graph": [ { "@type": "WebSite", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#website", "url": "<data:blog.homepageUrl.canonical.jsonEscaped/>", "name": "<data:blog.title/>", "publisher": { "@type": "Organization", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#organization", "url": "<data:blog.homepageUrl.canonical.jsonEscaped/>", "name": "<data:blog.title.jsonEscaped/>", "logo": { "@type": "ImageObject", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#logo", "url": "<data:post.authorPhoto.url.jsonEscaped/>", "width": "150", "height": "150" } }, "copyrightYear": "2015", "copyrightHolder": { "@type": "Person", "name": "sutajp", "url": "<data:post.authorProfileUrl.jsonEscaped/>" }, "sdDatePublished": "2021-12-28", "sdPublisher": { "@type": "Person", "name": "sutajp", "url": "<data:post.authorProfileUrl.jsonEscaped/>" } }, { "@type": "WebPage", "@id": "<data:blog.url.canonical.jsonEscaped/>#webpage", "url": "<data:blog.url.canonical.jsonEscaped/>", "inLanguage": "ja-JP", "name": "<data:blog.title.jsonEscaped/>", "description": "<data:description/>", "primaryImageOfPage": { "@type": "ImageObject", "@id": "<data:post.url.canonical.jsonEscaped/>#primaryimage" }, "potentialAction": { "@type": "SearchAction", "target": "<data:blog.homepageUrl.canonical.jsonEscaped/>search?q={search_term_string}&max-results=10", "query-input": "required name=search_term_string" }, "breadcrumb": { "@id": "<data:blog.url.canonical.jsonEscaped/>#breadcrumb" }, "isPartOf": { "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#website" } }, { "@type": "Article", "@id": "<data:post.url.canonical.jsonEscaped/>#article", "mainEntityOfPage": { "@type": "WebPage", "@id": "<data:post.url.canonical.jsonEscaped/>" }, "author": { "@type": "Person", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#author", "name": "<data:post.author.jsonEscaped/>", "url": "<data:post.authorProfileUrl.jsonEscaped/>", "image": { "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#logo" }, "nationality": "Japanese", "sameAs": "https://twitter.com/sutajpOnTw" }, "publisher": { "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#organization" }, "headline": "<data:post.title.jsonEscaped/>", "description": "<data:post.longSnippet.jsonEscaped/>", "image": { "@type": "ImageObject", "url": [ "<b:eval expr='(data:view.featuredImage ? resizeImage(data:view.featuredImage, 1200, "1:1") : "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2hvyV79XVfVOqgv6tmeN23EcL2TZOvt8PJ_t85biF-RHh-N88If5_7P8GRzhpstmAfCvhMO9EAkGMxEkn78sGpOpbW7ylQK7wYmfX5IzcblwCh0tLGOFQuqwLJonyqBDxN2ERhf3sDDWT/s128/?authuser=0").jsonEscaped'/>", "<b:eval expr='(data:view.featuredImage ? resizeImage(data:view.featuredImage, 1200, "4:3") : "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2hvyV79XVfVOqgv6tmeN23EcL2TZOvt8PJ_t85biF-RHh-N88If5_7P8GRzhpstmAfCvhMO9EAkGMxEkn78sGpOpbW7ylQK7wYmfX5IzcblwCh0tLGOFQuqwLJonyqBDxN2ERhf3sDDWT/s128/?authuser=0").jsonEscaped'/>", "<b:eval expr='(data:view.featuredImage ? resizeImage(data:view.featuredImage, 1200, "16:9") : "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2hvyV79XVfVOqgv6tmeN23EcL2TZOvt8PJ_t85biF-RHh-N88If5_7P8GRzhpstmAfCvhMO9EAkGMxEkn78sGpOpbW7ylQK7wYmfX5IzcblwCh0tLGOFQuqwLJonyqBDxN2ERhf3sDDWT/s128/?authuser=0").jsonEscaped'/>" ] }, "datePublished": "<data:post.timestampISO8601.jsonEscaped/>", /* "dateModified": "<data:post.lastUpdatedISO8601.jsonEscaped/>", */ <b:if cond='data:view.isPost'>"keywords": "<b:loop index='i' values='data:post.labels' var='label'><data:label.name.jsonEscaped/><b:if cond='data:post.labels.length gte data:i + 2'>, </b:if></b:loop>",</b:if> "isPartOf": { "@id": "<data:blog.url.canonical.jsonEscaped/>#webpage" } }, { "@type": "BreadcrumbList", "@id": "<data:blog.url.canonical.jsonEscaped/>#breadcrumb", "itemListElement": [ { "@type": "ListItem", "position": 1, "item": { "@type": "WebPage", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>", "url": "<data:blog.homepageUrl.canonical.jsonEscaped/>", "name": "<data:messages.home.jsonEscaped/>" } }, { "@type": "ListItem", "position": 2, "item": { "@type": "WebPage", "@id": "<b:eval expr='data:post.labels ? data:post.labels.last.url.jsonEscaped : data:post.url.jsonEscaped'/>", "url": "<b:eval expr='data:post.labels ? data:post.labels.last.url.jsonEscaped : data:post.url.jsonEscaped'/>", "name": "<b:if cond='data:blog.pageType == "item"'><b:eval expr='data:post.labels ? data:post.labels.last.name.jsonEscaped : "その他"'/><b:else/><data:blog.pageName.jsonEscaped/></b:if>" } } ] } ] } </script>
<data:post.lastUpdatedISO8601/>について。
<data:post.lastUpdatedISO8601/>
更新日を取得する<data:post.lastUpdatedISO8601/>(<data:post.lastUpdatedISO8601.jsonEscaped/>)は日時が協定世界時(UTC)っぽく、タイムゾーンも異なるのでとりあえずコメントアウトした。
<data:post.lastUpdatedISO8601.jsonEscaped/>
【みんなの知識 ちょっと便利帳】協定世界時(UTC)と日本標準時(JST)の比較対照と変換 - 協定世界時(UTC)・日本標準時(JST)対照表
画像を複数指定してみました。また、widthとheightはとりあえず排しました。
"image": { "@type": "ImageObject", "url": [ "<b:eval expr='(data:view.featuredImage ? resizeImage(data:view.featuredImage, 1200, "1:1") : "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2hvyV79XVfVOqgv6tmeN23EcL2TZOvt8PJ_t85biF-RHh-N88If5_7P8GRzhpstmAfCvhMO9EAkGMxEkn78sGpOpbW7ylQK7wYmfX5IzcblwCh0tLGOFQuqwLJonyqBDxN2ERhf3sDDWT/s128/?authuser=0").jsonEscaped'/>", "<b:eval expr='(data:view.featuredImage ? resizeImage(data:view.featuredImage, 1200, "4:3") : "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2hvyV79XVfVOqgv6tmeN23EcL2TZOvt8PJ_t85biF-RHh-N88If5_7P8GRzhpstmAfCvhMO9EAkGMxEkn78sGpOpbW7ylQK7wYmfX5IzcblwCh0tLGOFQuqwLJonyqBDxN2ERhf3sDDWT/s128/?authuser=0").jsonEscaped'/>", "<b:eval expr='(data:view.featuredImage ? resizeImage(data:view.featuredImage, 1200, "16:9") : "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2hvyV79XVfVOqgv6tmeN23EcL2TZOvt8PJ_t85biF-RHh-N88If5_7P8GRzhpstmAfCvhMO9EAkGMxEkn78sGpOpbW7ylQK7wYmfX5IzcblwCh0tLGOFQuqwLJonyqBDxN2ERhf3sDDWT/s128/?authuser=0").jsonEscaped'/>" ] },
QooQ list v1.27の例。
トップページ、ラベルページ、アーカイブページ用の構造化データについては2つに分けてみました。
<div id='list'>直下に@WebSite, @WebPage, @BreadcrumbList。
<div id='list'>
@WebSite
@WebPage
@BreadcrumbList
<b:loop values='data:posts' var='post'> </b:loop>の間に@Articleを置いてみました。
</b:loop>
@Article
<div id='list'> @WebSite, @WebPage, @BreadcrumbList <b:loop values='data:posts' var='post'> @Article <b:include data='post' name='post'/> </b:loop> </div>
@WebSite, @WebPage, @BreadcrumbListの構造化データ
{/* トップページ用 構造化データ */ "@context": "https://schema.org", "@graph": [ { "@type": "WebSite", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#website", "url": "<data:blog.homepageUrl.canonical.jsonEscaped/>", "name": "<data:blog.title/>", "publisher": { "@type": "Organization", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#organization", "url": "<data:blog.homepageUrl.canonical.jsonEscaped/>", "name": "<data:blog.title.jsonEscaped/>", "logo": { "@type": "ImageObject", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#logo", "url": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyViA6w_7K33zI9I48zApSrZVCZ-3izC8Px7dfcSwjc26vOloICVccgxpQ1A3ITma2pyvNkTHOlNw-YDPUS5OqdksuSWc_HyE1x0M2TTcYxC2f1NcOtlN6meNT-NNjPnkLbztCayNDDN0/s80/Blogger%25E3%2583%25AD%25E3%2582%25B4150_150_Compressed.png", /* "url": "<data:post.authorPhoto.url.canonical.jsonEscaped/>", */ "width": "150", "height": "150" } }, "copyrightYear": "2015", "copyrightHolder": { "@type": "Person", "name": "sutajp", /* "name": "<data:post.author.jsonEscaped/>", */ "url": "https://www.blogger.com/profile/03177892347424974206" /*"url": "<data:post.authorProfileUrl.canonical.jsonEscaped/>" */ }, "sdDatePublished": "2021-12-28", "sdPublisher": { "@type": "Person", "name": "sutajp", /* "name": "<data:post.author.jsonEscaped/>", */ "url": "https://www.blogger.com/profile/03177892347424974206" /*"url": "<data:post.authorProfileUrl.canonical.jsonEscaped/>" */ } }, { "@type": "WebPage", "@id": "<data:blog.url.canonical.jsonEscaped/>#webpage", "url": "<data:blog.url.canonical.jsonEscaped/>", "inLanguage": "ja-JP", "name": "<data:blog.title.jsonEscaped/>", "description": "<data:description/>", "primaryImageOfPage": { "@type": "ImageObject", "@id": "<data:blog.url.canonical.jsonEscaped/>#primaryimage" }, "potentialAction": { "@type": "SearchAction", "target": "<data:blog.homepageUrl.canonical.jsonEscaped/>search?q={search_term_string}&max-results=10", "query-input": "required name=search_term_string" }, "breadcrumb": { "@id": "<data:blog.url.canonical.jsonEscaped/>#breadcrumb" }, "isPartOf": { "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#website" } }, { "@type": "BreadcrumbList", "@id": "<data:blog.url.canonical.jsonEscaped/>#breadcrumb", "itemListElement": [ { "@type": "ListItem", "position": 1, "item": { "@type": "WebPage", "name": "<data:messages.home.jsonEscaped/>", "url": "<data:blog.homepageUrl.canonical.jsonEscaped/>", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>" } }<b:if cond ='!data:view.isHomepage'>, { "@type": "ListItem", "position": 2, "item": { "@type": "WebPage", "@id": "<data:blog.url.canonical.jsonEscaped/>", "url": "<data:blog.url.canonical.jsonEscaped/>", "name": "<data:blog.pageName.jsonEscaped/>" } }</b:if> ] } ] }
@Articleの構造化データ
{/* トップページ用 記事部分構造化データ */ "@context": "https://schema.org", "@graph": [ { "@type": "Article", "@id": "<data:post.url.canonical.jsonEscaped/>#article", "mainEntityOfPage": { "@type": "WebPage", "@id": "<data:post.url.canonical.jsonEscaped/>" }, "author": { "@type": "Person", "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#author", "name": "<data:post.author.jsonEscaped/>", "url": "https://www.blogger.com/profile/03177892347424974206", /* "url": "<data:post.authorProfileUrl.jsonEscaped/>", */ "image": { "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#logo" }, "nationality": "Japanese", "sameAs": "https://twitter.com/sutajpOnTw" }, "publisher": { "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#organization" }, "headline": "<data:post.title.jsonEscaped/>", "description": "<data:post.longSnippet.jsonEscaped/>", "image": { "@type": "ImageObject", "url": [ "<b:eval expr='(data:view.featuredImage ? resizeImage(data:view.featuredImage, 1200, "1:1") : "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2hvyV79XVfVOqgv6tmeN23EcL2TZOvt8PJ_t85biF-RHh-N88If5_7P8GRzhpstmAfCvhMO9EAkGMxEkn78sGpOpbW7ylQK7wYmfX5IzcblwCh0tLGOFQuqwLJonyqBDxN2ERhf3sDDWT/s128/?authuser=0").jsonEscaped'/>", "<b:eval expr='(data:view.featuredImage ? resizeImage(data:view.featuredImage, 1200, "4:3") : "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2hvyV79XVfVOqgv6tmeN23EcL2TZOvt8PJ_t85biF-RHh-N88If5_7P8GRzhpstmAfCvhMO9EAkGMxEkn78sGpOpbW7ylQK7wYmfX5IzcblwCh0tLGOFQuqwLJonyqBDxN2ERhf3sDDWT/s128/?authuser=0").jsonEscaped'/>", "<b:eval expr='(data:view.featuredImage ? resizeImage(data:view.featuredImage, 1200, "16:9") : "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2hvyV79XVfVOqgv6tmeN23EcL2TZOvt8PJ_t85biF-RHh-N88If5_7P8GRzhpstmAfCvhMO9EAkGMxEkn78sGpOpbW7ylQK7wYmfX5IzcblwCh0tLGOFQuqwLJonyqBDxN2ERhf3sDDWT/s128/?authuser=0").jsonEscaped'/>" ] }, "datePublished": "<data:post.timestampISO8601.jsonEscaped/>", /* "dateModified": "<data:post.lastUpdatedISO8601.jsonEscaped/>", */ <b:if cond='data:view.isPost'>"keywords": "<b:loop index='i' values='data:post.labels' var='label'><data:label.name.jsonEscaped/><b:if cond='data:post.labels.length gte data:i + 2'>, </b:if></b:loop>",</b:if> "isPartOf": { "@id": "<data:blog.url.canonical.jsonEscaped/>#webpage" } } ] }
<data:post.authorPhoto.url.canonical.jsonEscaped/>, <data:post.author.jsonEscaped/>, <data:post.authorProfileUrl.canonical.jsonEscaped/>が使えなかったところは値を直接記入しました。
<data:post.author.jsonEscaped/>
ラベル名をキーワードとして出力。
keywords
<b:if cond='data:view.isPost'>"keywords": "<b:loop index='i' values='data:post.labels' var='label'><data:label.name.jsonEscaped/><b:if cond='data:post.labels.length >= data:i + 2'>, </b:if></b:loop>",</b:if>
参考サイト:Bloggerブログで記事のラベルを中心に構造化データのkeywordsとして追加するSEO対策 | 些細な日常
出力のされかたは、レシピのスキーマ マークアップ | 検索セントラル | Google Developersに準じた。
nationality, copyrightYear, copyrightHolder, sdDatePublished, sdPublisherを追加してみました。
nationality
copyrightYear
copyrightHolder
sdDatePublished
sdPublisher
"nationality": "Japanese"
"copyrightYear": "2015", "copyrightHolder": { "@type": "Person", "name": "sutajp", /* "name": "<data:post.author.jsonEscaped/>", */ "url": "https://www.blogger.com/profile/03177892347424974206" /*"url": "<data:post.authorProfileUrl.canonical.jsonEscaped/>" */ }
"sdDatePublished": "2021-12-28", "sdPublisher": { "@type": "Person", "name": "sutajp", /* "name": "<data:post.author.jsonEscaped/>", */ "url": "https://www.blogger.com/profile/03177892347424974206" /*"url": "<data:post.authorProfileUrl.canonical.jsonEscaped/>" */ }
QooQのBreadcrumbList(パンくずリスト)はmicrodataで書かれています。
今回JSON-LDにしたので、QooQコード内の重複部分を削除しました。
QooQの該当部分から下記を削除
itemscope='itemscope'
itemtype='http://schema.org/BreadcrumbList'
itemprop='itemListElement'
itemtype='http://schema.org/ListItem'
itemprop='item'
itemprop='name'
<meta content='1' itemprop='position'/>
<meta content='2' itemprop='position'/>
該当部分
<div class='breadcrumbs' itemscope='itemscope' itemtype='http://schema.org/BreadcrumbList'> <span itemprop='itemListElement' itemscope='itemscope' itemtype='http://schema.org/ListItem'> <a expr:href='data:blog.homepageUrl' itemprop='item'> <span itemprop='name'>ホーム</span> </a> <meta content='1' itemprop='position'/> </span> / <b:if cond='data:blog.pageType == "item"'> <b:loop values='data:posts' var='post'> <b:if cond='data:post.labels'> <b:loop values='data:post.labels' var='label'> <b:if cond='data:label.isLast == "true"'> <span itemprop='itemListElement' itemscope='itemscope' itemtype='http://schema.org/ListItem'> <a expr:href='data:label.url' itemprop='item'> <span itemprop='name'><data:label.name/></span> </a> <meta content='2' itemprop='position'/> </span> / </b:if> </b:loop> <b:else/> <span>その他</span> / </b:if> </b:loop> <b:else/> <b:if cond='data:blog.pageName != ""'> <span itemprop='itemListElement' itemscope='itemscope' itemtype='http://schema.org/ListItem'> <a expr:href='data:blog.url' itemprop='item'> <span itemprop='name'><data:blog.pageName/></span> </a> <meta content='2' itemprop='position'/> </span> / </b:if> </b:if> </div>
削除したもの
<div class='breadcrumbs'> <span> <a expr:href='data:blog.homepageUrl'> <span >ホーム</span> </a> </span> / <b:if cond='data:blog.pageType == "item"'> <b:loop values='data:posts' var='post'> <b:if cond='data:post.labels'> <b:loop values='data:post.labels' var='label'> <b:if cond='data:label.isLast == "true"'> <span> <a expr:href='data:label.url' > <span><data:label.name/></span> </a> </span> / </b:if> </b:loop> <b:else/> <span>その他</span> / </b:if> </b:loop> <b:else/> <b:if cond='data:blog.pageName != ""'> <span> <a expr:href='data:blog.url' > <span><data:blog.pageName/></span> </a> </span> / </b:if> </b:if> </div>
サイト内検索に使ってください 🐤
© 2015 すたすた式
Enjoy!👍
QooQ
コメントなし:
コメントを投稿