Microdata ist eine HTML5-Spe­zi­fi­ka­ti­on der WHATWG (Web Hypertext Ap­pli­ca­ti­on Tech­no­lo­gy Working Group). Das Da­ten­for­mat bietet eine Meta-Syntax zur Aus­zeich­nung struk­tu­rier­ter Daten, die es Web­sei­ten­be­trei­bern er­mög­licht, Inhalte mit Metadaten an­zu­rei­chern, indem se­man­ti­sche Zu­sam­men­hän­ge ma­schi­nen­les­bar annotiert werden. Von Pro­gram­men wie Web-Crawlern oder Browsern aus­ge­le­sen, bilden diese Metadaten die Grundlage für er­wei­ter­te Dar­stel­lungs­for­men oder eine Auf­be­rei­tung von Web­sei­ten­in­hal­ten durch As­sis­tenz­sys­te­me wie Screen­rea­der. Relevant sind struk­tu­rier­te Daten zudem für die Such­ma­schi­nen­op­ti­mie­rung, da se­man­ti­sche An­no­ta­tio­nen die In­de­xie­rung einer Webseite er­leich­tern und es er­mög­li­chen, Such­ergeb­nis­se mit Zu­satz­in­for­ma­tio­nen an­zu­rei­chern. Bei der Da­ten­struk­tu­rie­rung stützt sich Microdata auf ein ein­heit­li­ches Vokabular nach schema.org.

Microdata im Vergleich zu anderen Da­ten­for­ma­ten

Während sich die Netz­ge­mein­de darauf einigen kann, dass HTML se­man­ti­scher werden muss, ist die Wahl des genauen Da­ten­for­mats zur Aus­zeich­nung von Metadaten nach wie vor um­strit­ten. Als separates Modul für HTML5 wurde Microdata ur­sprüng­lich als Al­ter­na­ti­ve zum damaligen Standard RDFa ein­ge­führt, dem vom W3C emp­foh­le­nen Format zur Be­schrei­bung von Metadaten in HTML und XHTML. Ziel war eine ver­ein­fach­te Syntax bei ver­gleich­ba­rer Funk­tio­na­li­tät. Ein Vorzug ist zudem die Nähe zur neusten HTML-Version. An Bedeutung gewann Microdata durch das Projekt schema.org – einer ge­mein­sa­men In­itia­ti­ve der Such­ma­schi­nen­an­bie­ter Google, Bing, Yahoo und Yandex, die ausgehend vom Microdata-Markup ein ein­heit­li­ches Vokabular für die se­man­ti­sche An­no­ta­ti­on zur Verfügung stellt. Galt Microdata lange Zeit als be­vor­zug­tes Da­ten­for­mat des Such­ma­schi­nen-Markt­füh­rers Google, liest sich diese Emp­feh­lung heute weniger ver­bind­lich. Neben Microdata un­ter­stützt das schema.org-Vokabular nach wie vor eine Aus­zeich­nung mit RDFa. Zudem rückt mit JSON-LD ein neues skript­ba­sier­tes Markup-Format in den Fokus. Dieses wird von Google jedoch noch nicht für alle Da­ten­ty­pen un­ter­stützt. Microdata bleibt somit aktuell.

Die Microdata-Syntax

Das Grund­prin­zip der Microdata-Syntax basiert auf Namen-Wert-Paaren, so­ge­nann­ten Items, und lässt sich in drei Schritten erklären: Zuerst wird ein Element ein­ge­grenzt und als Item ge­kenn­zeich­net. Diesem Item wird im Anschluss ein be­stimm­ter Typ aus dem schema.org-Re­per­toire zu­ge­wie­sen. Ist der Item-Typ definiert, lassen sich ihm ver­schie­de­ne Ei­gen­schaf­ten (Pro­per­ties) zuordnen. Diese Aus­zeich­nung erfolgt mit den HTML5-At­tri­bu­ten itemscope, itemtype und itemprop:

  • itemscope: Das HTML5-Attribut itemscope wird innerhalb eines div-Tags verwendet, um einen be­stimm­ten Bereich als Item zu de­fi­nie­ren. Dieses Item wird mittels itemtype und itemprop näher bestimmt.
  • itemtype: Das HTML5-Attribut itemtype ist auf alle Elemente anwendbar, die mit dem itemscope Attribut aus­ge­zeich­net wurden. Es dient dazu, auf ein vor­de­fi­nier­tes Schema zu verweisen. So lassen sich re­le­van­ten Elementen auf einer Webseite all­ge­mein­gül­ti­ge Typen nach Schema.org zuordnen, die von allen gängigen Such­ma­schi­nen ver­ar­bei­tet werden können. 
  • itemprop: Das HTML5-Attribut itemprop gibt eine Ei­gen­schaft eines zuvor genannten itemtypes an. Welche Ei­gen­schaf­ten dem je­wei­li­gen itemtype zu­ge­ord­net werden können, lässt sich der Schema.org-Website entnehmen.

Die Ein­bin­dung der Attribute itemscope, itemtype und itemprop in den HTML-Code erfolgt nach folgendem Grund­sche­ma:

Grund­sche­ma des Microdata-Markups für ein Item:

<div itemscope itemtype="http://schema.org/Typ">
<span itemprop="Eigenschaft">Item</span>
</div>

Das Microdata-Markup in der Anwendung

Wie andere Formate zur se­man­ti­schen Aus­zeich­nung von HTML-Do­ku­men­ten stützt sich auch Microdata auf eine Reihe klas­si­scher HTML-Tags. Grund­sätz­lich sind Microdata-Attribute dabei un­ab­hän­gig vom je­wei­li­gen HTML-Tag. Als Trä­ger­ele­men­te von Microdata-At­tri­bu­ten bieten sich daher HTML-Tags wie <div> und <span> an, die keine eigenen Semantik besitzen.

<div></div> Das div-Element definiert einen be­stimm­ten Bereich in einer neuen Zeile des Fließ­tex­tes. In der Regel wird ein itemscope durch dieses Tag ein­ge­lei­tet und beendet.
<span></span> Das span-Element definiert einen all­ge­mei­nen Inline-Bereich, ohne Einfluss auf die Brow­ser­dar­stel­lung zu nehmen. Es wird daher verwendet, um ein itemprop aus­zu­zeich­nen.

Grafiken mit Microdata aus­zeich­nen

Einen typischen An­wen­dungs­be­reich für die se­man­ti­sche Aus­zeich­nung von Web­sei­ten­in­hal­ten bilden ein­ge­bet­te­te Fir­men­lo­gos. Währen ein mensch­li­cher Besucher in der Lage ist, eine cha­rak­te­ris­ti­sche Grafik auf einer Webseite als Fir­men­lo­go zu iden­ti­fi­zie­ren, sind Programme wie Web-Crawler auf Mi­cro­da­ten an­ge­wie­sen, um diesen Zu­sam­men­hang her­zu­stel­len:

Markup eines Un­ter­neh­mens­lo­gos:

<div itemscope itemtype="http://schema.org/Organization">
<a itemprop="url" href="http://www.beispielfirma.de/">Startseite</a>
<img itemprop="logo" src="http://www.beispielfirma.de/logo.png" />
</div>

In Codezeile 01 wird ein neues div-Element auf­ge­macht, das sowohl die URL in Zeile 02 als auch den HTML-Code der ein­ge­bun­de­nen Grafik in Zeile 03 umspannt. Dieses an sich un­spe­zi­fi­sche div-Tag wird durch das Attribut itemscope als in­for­ma­ti­ons­tra­gen­des Element ge­kenn­zeich­net. Das itemtype-Attribut verweist auf den Typ „Or­ga­niza­ti­on“ gemäß schema.org-Standard. Der Web-Crawler erfährt somit, dass es sich bei den Angaben innerhalb des div-Tags um In­for­ma­tio­nen über ein Un­ter­neh­men handelt. Darüber hinaus sind dem itemtype die Ei­gen­schaf­ten „url“ und „logo“ mit ihren je­wei­li­gen Werten zu­ge­ord­net. Die Such­ma­schi­ne kann die Grafik somit als Fir­men­lo­go iden­ti­fi­zie­ren und einen Zu­sam­men­hang zur Un­ter­neh­mens­home­page her­stel­len. Such­ma­schi­nen wie Google verwenden auf diese Art aus­ge­zeich­ne­te Grafiken zum Beispiel bei der Er­stel­lung des Knowledge Graphs.

Im Falle eines Mar­ken­lo­gos käme folgendes schema.org-Markup zum Einsatz: 

Markup eines Mar­ken­lo­gos:

<div itemscope itemtype="http://schema.org/Brand">
<span itemprop="name">Name der Marke</span>
<img itemprop="logo" src="http://www.beispielmarke.de/logo.png" />
</div>

Das Element innerhalb des itemsco­pes ist gemäß schema.org als „Brand“ ge­kenn­zeich­net. Als Ei­gen­schaf­ten werden der Name der Marke und das Logo inklusive Spei­cher­ort angegeben.

Kon­takt­da­ten mit Microdata aus­zeich­nen

Neben der Aus­zeich­nung von Grafiken ist für Un­ter­neh­men die se­man­ti­sche An­no­ta­ti­on von Kon­takt­da­ten von be­son­de­rem Interesse, da auch diese In­for­ma­tio­nen eine Grundlage für er­wei­ter­te Such­ergeb­nis­dar­stel­lun­gen wie Sidelinks oder den Knowledge Graph dar­stel­len. Ein aus­führ­li­ches Microdata-Markup von Kon­takt­in­for­ma­tio­nen lässt sich einem Beispiel auf schema.org entnehmen:

Markup der Google-Kon­takt­da­ten:

<div itemscope itemtype="http://schema.org/Organization">
    <span itemprop="name">Google.org (GOOG)</span>
    Contact Details:
    <div itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
        Main address:
        <span itemprop="streetAddress">38 avenue de l'Opera</span>
        <span itemprop="postalCode">F-75002</span>
        <span itemprop="addressLocality">Paris, France</span>
    </div>
    Tel: <span itemprop="telephone">( 33 1) 42 68 53 00 </span>,
    Fax: <span itemprop="faxNumber">( 33 1) 42 68 53 01 </span>,
    E-mail: <span itemprop="email">secretariat(at)google.org</span>
</div>

In Codezeile 01 definiert das itemtype-Attribut das Element im div-Tag von Zeile 01 bis Zeile 13 als „Or­ga­niza­ti­on“ gemäß Schema.org. Diesem werden durch diverse itemprop-Attribute die Ei­gen­schaf­ten „name“, „address“, „telephone“, „faxNumber“ und „email“ mit den je­wei­li­gen Werten zu­ge­wie­sen. Soweit gleicht das Schema den vor­he­ri­gen Bei­spie­len. Ein Son­der­fall zeigt sich jedoch in Zeile 04. Die Microdata-Syntax sieht vor, dass ein Wert einer Ei­gen­schaft ebenfalls ein Item sein kann. Hier werden die Angaben unter „Main-Adressen“ durch ein zweites div-Element mit eigenem itemscope ver­schach­telt und als itemtype „Posta­l­Ad­dress“ gemäß Schema.org definiert. Dieses wird durch die Ei­gen­schaf­ten „street­Ad­dress“, „postal­Code“ und „ad­dress­Lo­ca­li­ty“ näher bestimmt.

Web­sei­ten­in­hal­te mit Microdata für Rich Snippets aus­zeich­nen

Möchte man, dass die eigene Website auf den Such­ergeb­nis­sei­ten von Google und Co. in der er­wei­ter­ten Form der Rich Snippets auftaucht, dann ist die se­man­ti­sche Aus­zeich­nung be­stimm­ter In­for­ma­tio­nen besonders wichtig. Denn um In­ter­net­nut­zern bereits auf den Such­ergeb­nis­sei­ten möglichst viele In­for­ma­tio­nen zu liefern, reichern Such­ma­schi­nen Er­geb­nis­se zu Pro­dukt­in­for­ma­tio­nen, Rezepten, Er­fah­rungs­be­rich­ten, Events, Software-Ap­pli­ka­tio­nen, Videos und Nach­rich­ten­ar­ti­keln mit ent­spre­chen­den Web­sei­ten­in­hal­ten an, sofern diese für ein ma­schi­nel­les Auslesen optimiert wurden. Folgendes Beispiel eines fiktiven Ho­tel­an­ge­bots zeigt sche­ma­tisch, wie sich ent­spre­chen­de In­for­ma­tio­nen mittels Microdata-Syntax nach schema.org und aus­zeich­nen lassen.  

Ein Ho­tel­an­ge­bot auf der Webseite eines Rei­se­bie­ters liefert In­ter­es­sen­ten in der Regel In­for­ma­tio­nen wie den Namen eines Hotels, eine kurze Be­schrei­bung und ein Bild der Fe­ri­en­an­la­ge. Mit Microdata nach schema.org getaggt sähe der HTML-Code dieser Grund­in­for­ma­tio­nen fol­gen­der­ma­ßen aus:

Markup der Grund­in­for­ma­tio­nen für Hotel-Angebote:

<div itemscope itemtype="http://schema.org/Hotel">
    <span itemprop="name">Name des Hotels</span>
    <span itemprop="description">Beschreibung des Hotels</span>
    <img itemprop="image" src="http://Images/hotel.jpg" />
</div>

Das Attribut itemtype in Zeile 01 verweist auf das vor­de­fi­nier­te Schema Hotel. Diesem werden in den Zeilen 02 bis 04 die Ei­gen­schaf­ten „name“, „de­scrip­ti­on“ und „image“ mit ent­spre­chen­den Werten zu­ge­wie­sen.   

Diesem Grund­ge­rüst können beliebig viele weitere In­for­ma­tio­nen als itemprops oder un­ter­ge­ord­ne­te itemsco­pes hin­zu­ge­fügt werden. Dabei ist darauf zu achten, dass un­ter­ge­ord­ne­te div-Elemente innerhalb des div-Tags des über­ge­ord­ne­ten itemsco­pes platziert werden. Folgender Code erweitert die se­man­ti­sche An­no­ta­ti­on für Hotel-Angebote um eine Preis­an­ga­be.

Markup für Ho­tel­prei­se

<div itemprop="makesOffer" itemscope itemtype="http://schema.org/Offer"> 
    <span itemprop="price">400 Euro</span>
</div>

In Zeile 01 wird die die Ei­gen­schaft „make­Of­fers“ (macht Angebote) ein­ge­führt und als itemtyp „Offer“ (Angebot) definiert. Eine we­sent­li­che Ei­gen­schaft von Angeboten ist, dass sie einen Preis haben. Dieser wird in Zeile 02 mit dem itemprop „price“ ein­ge­bun­den und mit dem Wert „400 Euro“ versehen.

Zu­sätz­lich lassen sich zudem In­for­ma­tio­nen über die Zah­lungs­mo­da­li­tä­ten (itemprop="pay­ment­Ac­cept­ed"), Stand­ort­an­ga­ben (itemprop="map") oder Er­fah­rungs­be­rich­te (itemprop="reviews") per schema.org aus­zeich­nen. In das Grund­ge­rüst in­te­griert ergibt sich folgendes Markup:

Aus­führ­li­ches Markup für ein Hotel-Angebot

<div itemscope itemtype="http://schema.org/Hotel">
    <span itemprop="name">Name des Hotels</span>
    <span itemprop="description">Beschreibung des Hotels</span>
    <img itemprop="image" src="http://Images/hotel.jpg" />
    <div itemprop="makesOffer" itemscope itemtype="http://schema.org/Offer"> 
        <span itemprop="price">400 Euro</span>
    </div>
    <span itemprop="paymentAccepted">Überweisung, Kreditkarte etc.</span> 
    <span itemprop="map">URL zur Karte</span> 
    <div itemprop="reviews" itemscope itemtype="http://schema.org/Review"> 
        <span itemprop="name">Titel der Bewertung</span>
        <span itemprop="author">Autor</span>
        <span itemprop="reviewBody">Bewertungstext</span>
        <span itemprop="datePublished">Datum der Bewertung</span>
    </div>
</div>

In Zeile 01 wird das Item „Hotel“ als über­ge­ord­ne­tes Schema für die nach­fol­gen­den Angaben bis Zeile 15 definiert. Darauf folgen die Ba­sis­in­for­ma­tio­nen Name, Be­schrei­bung und Bild, aus­ge­zeich­net als Ei­gen­schaf­ten des Items Hotel. Die Aus­zeich­nung des Ho­tel­prei­ses erfolgt in Zeile 05 bis 07 durch ein un­ter­ge­ord­ne­tes Itemscope-Attribut „Offer“. Darauf folgen die dem über­ge­ord­ne­ten Item „Hotel“ zu­ge­ord­ne­ten Zah­lungs­mo­da­li­tä­ten und Stand­ort­in­for­ma­tio­nen. Die Angaben in Zeile 10 bis 15 werden mit einem weiteren un­ter­ge­ord­ne­ten itemscope und dem itemtyp „Review“ als zu einem Er­fah­rungs­be­richt gehörend ge­kenn­zeich­net und mit itemprops als Titel, Au­toren­an­ga­be, Be­wer­tungs­text und Datum ge­kenn­zeich­net.

Soll ein Er­fah­rungs­be­richt eines Hotels zu­sätz­lich mit einer Ster­ne­be­wer­tung in den Rich Snippet auf­tau­chen, schlägt Google folgendes Markup vor:

Markup für einen Er­fah­rungs­be­richt mit Bewertung:

<div itemscope itemtype="http://schema.org/Review">
    <div itemprop="itemReviewed" itemscope itemtype="http://schema.org/Hotel">
        <span itemprop="name">Name des Hotels</span>
    </div>
    <span itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating">
        <span itemprop="ratingValue">4</span>
    </span> stars -
    <b>"<span itemprop="name">Titel der Bewertung</span>"</b>
    <span itemprop="author" itemscope itemtype="http://schema.org/Person">
        <span itemprop="name">Autor</span>
    </span>
    <span itemprop="reviewBody">Bewertungstext</span>
</div>

Bread­crumbs mit Microdata aus­zeich­nen

Eine weitere Mög­lich­keit, mehr In­for­ma­tio­nen in den SERPs aus­zu­spie­len, bieten Bread­crumbs („Brot­kru­men“). Dabei handelt es sich um die Aus­zeich­nung der Na­vi­ga­ti­ons­struk­tur einer Website, die einem Such­ma­schi­nen-Nutzer die Mög­lich­keit gibt, die genaue Position einer Webpage innerhalb eines In­ter­net­auf­tritts zu lo­ka­li­sie­ren. Ein typisches Beispiel für die Ein­bin­dung eines Bread­crumb-Trails in HTML zeigt folgender Code:

HTML-Markup eines Bread­crumb-Trails:

<ol>
    <li>
        <a href="http://www.anbieter.de/hotels/">Hotels</a>
    </li>
    <li>
        <a href="http://www.anbieter.de/hotels/deutschland/">Hotels in Deutschland</a>
    </li>
    <li>
        <a href="http://www.anbieter.de/hotels/deutschland/berlin/">Hotels in Berlin</a>
    </li>
<ol>

Das Beispiel zeigt ein Lis­ten­ele­ment (ordered list, ol), das die Links ver­schie­de­ner Un­ter­sei­ten einer Website be­inhal­tet. Um diese Na­vi­ga­ti­ons­struk­tur für Programme wie Web­brow­ser oder Such­ma­schi­nen-Crawler als Bread­crumb-Trail aus­zu­zeich­nen, bietet sich folgendes Microdata-Markup nach Schema.org an:

Microdata-Markup für Bread­crumbs nach Schema-org:

<ol itemscope itemtype="http://schema.org/BreadcrumbList">
    <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
        <a itemprop="item" href="http://www.anbieter.de/hotels/">
            <span itemprop="name">Hotels</span></a>
        <meta itemprop="position" content="1" />
    </li>
    <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
        <a itemprop="item" href="http://www.anbieter.de/hotels/deutschland/">
            <span itemprop="name">Hotels in Deutschland</span></a>
        <meta itemprop="position" content="2" />
    </li>
    <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
        <a itemprop="item" href="http://www.anbieter.de/hotels/deutschland/berlin/">
            <span itemprop="name">Hotels in Berlin</span></a>
        <meta itemprop="position" content="3" />
    </li>
</ol>

Das Lis­ten­ele­ment <ol> wird mit dem in­temscope-Attribut als Item definiert und per itemtype dem Schema „Bread­crum­bList“ nach Schema.org zu­ge­ord­net. Für jede „Brotkrume“ innerhalb der Na­vi­ga­ti­ons­struk­tur wird ein eigener itemscope mit dem itemtype „ListItem“ auf­ge­macht. Jedem ListItem des Bread­crumb-Trails werden die itemprops „name“, „item“ und „position“ als Ei­gen­schaf­ten zu­ge­ord­net. Diese be­inhal­ten die Werte für den Namen, die URL und die Position eines Bread­crumbs innerhalb des Bread­crumb-Trails in ma­schi­nen­les­ba­rer Form.

Zum Hauptmenü