2013年12月17日火曜日

Blogger - data:blog.metaDescription

Bloggerの投稿をschema.orgのDescriptionに対応させるにおいて、data:blog.metaDescriptionの扱いを間違えて解釈していましたので修正します。

検索設定 メタ タグ と 投稿記事ごとの検索向け説明は、どちらも、data:blog.metaDescription が使われています。(前回は別個のものとして扱っていました)


検索設定のメタタグ
検索向け説明

検索設定のメタタグはブログの説明。検索向け説明は投稿記事の説明。というのは正しかったのですが、どちらも data:blog.metaDescription に格納されます
また、<b:include data='blog' name='all-head-content'/>で一斉にはき出されますが、それと別に、data:blog.metaDescriptionタグのみでも利用できます。


ページタイプによる data:blog.metaDescriptionの値の変遷

index (Homepageを含む) と アーカイブ ページ
data:blog.metaDescriptionには、検索設定のメタタグが入る。なければ空。
検索向け説明の影響は受けない。公式テンプレートでは、アーカイブ ページには使われていない。

item と static_page
data:blog.metaDescriptionには、検索向け説明が入る。なければ空。
検索設定のメタタグの影響は受けない。


修正 - data:post.snippetをdescriptionに割り当てる方法

<b:includable id='post' var='post'>
<div class='post hentry'  itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<b:if cond='data:blog.url == data:post.url'>  <!-- 個別ページ -->
<b:if cond='data:blog.metaDescription'>
<meta expr:content='data:blog.metaDescription' itemprop='description'/>
<b:else/>
<b:if cond='data:post.snippet'>
<meta expr:content='data:post.snippet' itemprop='description'/>
</b:if>
</b:if>
<b:else/>  <!-- 個別ページ以外 -->
<b:if cond='data:post.snippet'>
<meta expr:content='data:post.snippet' itemprop='description'/>
</b:if>
</b:if>

<b:if cond='data:blog.url == data:post.url'></b:if> はあまり見かけない分岐ですが、item と static_pageです。

item (個別の記事)に検索向け説明があればそれを使用。なければ本文から itemprop='description' を設定しています。

個々の記事の検索向け説明は、indexのページでは取得できないので、一律にdata:post.snippetで記事の内容からdescriptionを取得しています。

公式のテンプレートの記事の一覧ページでは itemprop='description'を指定していないのですが、気になったので指定しておきました。そのかわりテンプレート ソースの分岐が複雑になっています。

一覧ページで個々の記事の itemprop='description'を指定しないなら、かなり簡単になります。

<b:if cond='data:blog.url == data:post.url'>
<b:if cond='data:blog.metaDescription'>
<meta expr:content='data:blog.metaDescription' itemprop='description'/>
<b:else/>
<b:if cond='data:post.snippet'>
<meta expr:content='data:post.snippet' itemprop='description'/>
</b:if>
</b:if>
</b:if>

または、前回の記事本文をdescriptionに割り当てる公式の方法が簡単です。

<data:blog.metaDescription/>はページタイプにより参照先が変わる特殊なデータ タグのため、テンプレートが間違っているのではないかと疑ってしまいましたが正しいです
普通は値は変化しても参照先は同じで、テンプレートのHTMLで場合分けしますが、その作業をBlogger側がやっているということになります。

融通が利かないようですが使いどころにより分岐が必要ない分、より便利に利用できたりします。
例えば、og:description の設定は、ものすごく簡単にできます。

<head>
<b:if cond='data:blog.metaDescription'>
<meta expr:content='data:blog.metaDescription' name='og:description'/>
</b:if>
</head>