/ shimael
HTML5のパンくずマークアップについて
トロントでワーホリ中のしまえるです。
HTML会議は毎週末の夜中に4人でひっそり開催中です。とっても楽しい!
先々週に盛り上がった内容、HTML5でのパンくずのマークアップの話をします。
W3Cのサイトを見るとこう書いてます。
2011年10月5日時点でのWorking Draftを見ました。
4.13.2 Bread crumb navigation
This specification does not provide a machine-readable way of describing bread-crumb navigation menus. Authors are encouraged to just use a series of links in a paragraph. The nav element can be used to mark the section containing these paragraphs as being navigation blocks.
In the following example, the current page can be reached via two paths.<nav> <p> <a href="/">Main</a> > <a href="/products/">Products</a> > <a href="/products/dishwashers/">Dishwashers</a> > <a>Second hand</a> </p> <p> <a href="/">Main</a> > <a href="/second-hand/">Second hand</a> > <a>Dishwashers</a> </p> </nav>
訳:この仕様はパンくずナビゲーションの記述をコンピュータで読むことのできるように提供するものではない。段落の中にリンクの連続したものをただ使うことを奨励する。nav要素はナビゲーションブロックのようにこれらの段落を含む部分をマークするのに使われることができる。 みたいな感じ?
そしてこれを見て気になった点3つ。
- だいなり(>)のテキストを使っているところ
- パンくずの現在地のところはaタグだけで囲んでいるところ
- コンピュータで読むことができるわけじゃない ってところ
じゃー1個ずつ潰してくぞー Here we go~
だいなり(>)を使っているところ
半角スペース後のテキストのだいなり・・・。これは衝撃やね。みんな>←この部分は背景画像にしたりイメージにしたりいろいろ工夫をしていたと思うのですが・・・テキストでだいなり入れちゃいました☆(冷やし中華はじめました のノリ)
なぜ、だいなりか
パンくずはそのサイトの階層構造を示しているからだ!階層構造だからだいなりなわけです。矢印じゃだめで三角形でもだめで だいなり!だからこのだいなりはデザインじゃないわけだっ たぶん・・・!
音声ブラウザにもあえて「だいなり」と読ませることでこれはパンくずだってわかりやすくなるのかな、ってHTML会議ではそういう話もしてました。
現在地はaタグだけで囲む
HTML5からhref属性は必須じゃなくなりました。なのでaだけで書いてもいいです。でもなんでhref入れへんかったん?入れへんのやったらaも取ったらええやんな!
書いてあった
仕様にこう書いてあります。
If a site uses a consistent navigation toolbar on every page, then the link that would normally link to the page itself could be marked up using an a element
訳:サイトが全てのページに一貫したナビゲーションを持つ時、そのページ自体に通常リンクするであろうリンクはa要素を使ってマークアップすることができる。
パンくずだけじゃなくて、グローバルナビゲーションとかでも、今いるページ自身へのアンカーはhref属性をとってアンカーだけにしてもええよってことやね。could be marked upやから絶対しろ!ってわけでもないみたいだけど。
コンピュータで読めないなら、読めるようにしよう
Microdataで・・・!
Microdataについては2つの記事を参照しましょう。
みんな大好きkojika17さんの記事だよ!
パンくずにMicrodataを使用するとGoogle検索でこんな風に表示されるよってのが見られます。
コーディングとSEOの概念が変わるかもしれない、Microdataについての概要
GoogleもBreadcrumbsについて書いてある
Breadcrumbs
GoogleのBreadcrumbsのページから抜粋すると、Microdataを使ってのパンくずの書き方はこうです。
<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb"> <a href="http://www.example.com/dresses" itemprop="url"><span itemprop="title">Dresses</span></a> › </div> <div itemscope itemtype="http://data-vocabulary.org/Breadcrumb"> <a href="http://www.example.com/dresses/real" itemprop="url"><span itemprop="title">Real Dresses</span></a> › </div> <div itemscope itemtype="http://data-vocabulary.org/Breadcrumb"> <a href="http://www.example.com/clothes/dresses/real/green" itemprop="url"><span itemprop="title">Real Green Dresses</span></a> </div>
でも、さっきみた仕様では、pの中にリンクの連続したものいれろって書いてあったから、それに沿うならこうかな!
<nav> <p> <div itemscope itemtype="http://data-vocabulary.org/Breadcrumb"> <a href="http://www.example.com/dresses" itemprop="url"><span itemprop="title">Dresses</span></a> › </div> <div itemscope itemtype="http://data-vocabulary.org/Breadcrumb"> <a href="http://www.example.com/dresses/real" itemprop="url"><span itemprop="title">Real Dresses</span></a> › </div> <div itemscope itemtype="http://data-vocabulary.org/Breadcrumb"> <a href="http://www.example.com/clothes/dresses/real/green" itemprop="url"><span itemprop="title">Real Green Dresses</span></a> </div> </p> </nav>
どぅーーーん・・・・・
pの中にdivいくつも入ってるとか違和感ありすぎる・・・!
別に間違ってはいないけど、これはなんか違うかも!?
pにこだわらず、やっぱdivだけのでいいんじゃないですかね。(なんやねん)
結論
わたし的には、Microdata使うならこれで、
<nav>
<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
<a href="http://www.example.com/dresses" itemprop="url"><span itemprop="title">Dresses</span></a> ›
</div>
<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
<a href="http://www.example.com/dresses/real" itemprop="url"><span itemprop="title">Real Dresses</span></a> ›
</div>
<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
<a href="http://www.example.com/clothes/dresses/real/green" itemprop="url"><span itemprop="title">Real Green Dresses</span></a>
</div>
</nav>
使わないのなら、仕様通り、こういう風にマークアップするのかなって思います。
<nav>
<p>
<a href="/">Main</a> >
<a href="/products/">Products</a> >
<a href="/products/dishwashers/">Dishwashers</a> >
<a>Second hand</a>
</p>
<p>
<a href="/">Main</a> >
<a href="/second-hand/">Second hand</a> >
<a>Dishwashers</a>
</p>
</nav>
p>divってしてもいいけど、そこまでこのpに意味はないと思ったので、Microdataの時はp>divにしなくていいと思いました。
※ブログ用に整形していたところで気付いたんやけど、GoogleのBreadcrumbsのページの>はだいなりじゃなかってんけどどうしよう・・・。やまかっこやった。やまかっこってなによ!だいなりじゃないやん!ミステリー
追記[2011.10.05]
はてぶのコメントを見ました。みなさんありがとう。コメントを読んでひとつ訂正です。
p>divはXHTMLではだめなのですが、HTML5では仕様上はいけると勘違いしていました。なぜならp要素はフロー・コンテンツのカテゴリにあるからです。でも、同時にp要素のコンテンツ・モデルはフレージング・コンテンツでした。
カテゴリとコンテンツ・モデルの違いはよくわからないのですが、p要素はきっとフレージング・コンテンツです。そして、フレージング・コンテンツの中にフレージング・コンテンツは持てないようなことが書いてありました
Most elements that are categorized as phrasing content can only contain elements that are themselves categorized as phrasing content, not any flow content.
なので、まだ本当はよくわからないけど、p>divはだめってことにしておきましょう。XHTMLを愛していた人たちにとっては気持ち悪いものですしねっ