Strukturerte sidedata
fakta om en side, skrevet for maskiner
Hva det er
Strukturerte sidedata, ofte bare kalt strukturerte data, er det å gjenta det en
side sier i løpende tekst som typede utsagn i et vokabular utgivere og
programmer er enige om, slik at søkemotorer og annen programvare kan lese
opplysningene uten å måtte tolke oppsettet. En bedrifts kontaktside sier i en
setning hvor kontoret ligger. De strukturerte dataene sier det samme en gang
til, som en PostalAddress med gate, postnummer og land, så et program som
leser siden, slipper å gjette hvilket av ordene som er stedsnavnet.
Vokabularet er som regel schema.org, som Googles dokumentasjon oppgir som det
de fleste strukturerte dataene for søket deres bruker. Google, Microsoft, Yahoo
og Yandex grunnla det, og siden april 2015 har en fellesskapsgruppe i W3C vært
hovedforumet. Det definerer typer, f.eks. Organization, Person, Service,
Review eller DefinedTerm, og egenskapene hver av dem kan bære, f.eks.
name, address, author eller price.
Utsagnene kan skrives i tre syntakser. Microdata og RDFa legger attributter på
de synlige HTML-elementene selv. JSON-LD holder utsagnene for seg, som en blokk
med JSON i et script-element av typen application/ld+json, og er en
W3C-anbefaling i versjon 1.1, publisert 16. juli 2020. Google godtar alle tre
på lik linje og anbefaler JSON-LD som den enkleste å vedlikeholde i stor skala.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://example.com/#organization",
"name": "Example Ltd",
"url": "https://example.com/"
}
</script>
Linjen som betyr mest i den blokken, er @id. JSON-LD bruker den til å
identifisere en node, og en node som mangler en slik, er en blank node, som
ingenting utenfor dens egen blokk kan peke på. Med en identifikator kan en
hvilken som helst annen blokk på en hvilken som helst annen side skrive
"publisher": {"@id": "https://example.com/#organization"}, det
spesifikasjonen kaller en nodereferanse: en peker til en ting som er beskrevet
et annet sted, i stedet for en ny beskrivelse av den. Det er identifikatorene
som gjør en spredt samling blokker til én graf.
Nabobegrepet er metadata. Tittelen, beskrivelsen og Open Graph-taggene i hodet på en side beskriver siden som et dokument, mens strukturerte data beskriver tingene siden handler om: selskapet bak den, personen som skrev den, tjenesten den tilbyr, eller ordet den definerer.
Hvorfor det er viktig
Beslutningen gjelder hvor mye som skal sies, og det ærlige svaret er som regel mindre enn vokabularet tillater, men komplett. Syntaksen hindrer ikke en utgiver i å fylle ut hver egenskap schema.org tilbyr. Googles egne råd peker motsatt vei: oppgi heller færre av de anbefalte egenskapene, komplette og korrekte, enn alle mulige med mangelfulle eller gale data, og merk aldri opp noe en leser ikke kan se på siden, selv når det er sant.
Grunnen er at hver opplysning som merkes opp, er en ekstra kopi av noe siden allerede sier, og en ekstra kopi kan gli bort fra originalen. En pris som er rettet i den synlige tabellen og glemt i JSON-en, en vurdering bare maskiner får se, en adresse skrevet litt annerledes på hver side: hver av dem får siden til å si én ting til mennesker og en annen til programmer. Kostnaden ved strukturerte data ligger mindre i å skrive dem enn i å holde dem sanne, så de nyttige spørsmålene er hvilke utsagn siden kan stå inne for, og om de kommer fra den samme kilden som den synlige teksten.
Det man får igjen, er lesbarhet. En søkemotor eller en agent som kan slå sammen hundre omtaler til ett selskap, vet mer enn en som leser hundre navn uten sammenheng. Sider som følger retningslinjene, kan bli kvalifisert for utvidede resultater (rich results), oppføringer med ekstra detaljer i søket, men kvalifisering garanterer ingen av dem. Det som endrer seg, er hvor godt en maskin forstår hva siden handler om.
Slik ser det ut i praksis
Kolofonen forplikter nettstedet til å merke opp bare det som er sant og synlig på siden, og historien til de strukturerte dataene her viser hvorfor den setningen trengte å bli skrevet ned.
Før omleggingen
gjentok 963 blokker selskapet 1 671 ganger, uten en stabil identifikator noe sted,
så den som leste dataene, hadde ikke grunnlag for å behandle organisasjonen på
én side som organisasjonen på en annen. Grafen hviler nå på tre identifikatorer
laget fra nettstedets origin, for organisasjonen, nettstedet og grunnleggeren,
og hver annen blokk viser til dem med @id i stedet for å beskrive dem på nytt.
Identifikatorene er de samme på hvert språk: en kommentar i malen forklarer at
en egen dansk identifikator ville erklære en organisasjon nummer to med det
samme organisasjonsnummeret. Seksten typer er i bruk, og lister navngir
elementene sine bare med URL, fordi det å skrive ut de 107 oppføringene på
porteføljeindeksen ville ha gjort den komprimerte siden 52 % tyngre.
Flere opplysninger hentes fra den samme kilden som den synlige siden. Prisene på tjenestene kommer fra den samme datafilen som prisene på skjermen, så en maskin og en leser får oppgitt den samme satsen. Perioden et arbeid dekker, kommer fra den partialen som skriver setningen om den. Brødsmulestiene følger stien leseren ser, og posisjonene i lister følger rekkefølgen på skjermen, aldri en rangering som bare publiseres for maskiner. Sidens egen node bruker den samme adressen som den kanoniske lenken, så oppmerkingen og hodet fremmer én og samme påstand.
Det som er utelatt, er like bevisst som utsagnene. Selskapets egne beskrivelser
av sitt eget arbeid merkes ikke opp som omtaler, fordi det ville dikte opp en
forfatter for selskapets egne ord. Anbefalinger fra navngitte personer merkes
opp, men uten karakter, siden ingen har gitt en. Hver side i ordlisten, denne
også, bærer en DefinedTerm der beskrivelsen er den én linje lange forklaringen
som står i listen, så definisjonen en maskin leser, er den samme som leseren
ser.
En sjekk over det bygde nettstedet slår fast at hver blokk kan parses, at hver identifikator løses opp, og at hver URL grafen nevner, faktisk ble bygget, så en graf som peker på en side som ikke finnes, stopper kvalitetsporten. Den samme kolofonen lister Schema Markup Validator for å lese dataene og Googles Rich Results Test for å se hva én søkemotor gjør med dem.
Hvor det går galt
Utvidede resultater som uteblir selv om hver validator godkjenner. Oppmerkingen er gyldig JSON-LD og bruker ekte schema.org-typer, men siden vises fortsatt som et vanlig treff. Dataene beskriver ting en leser ikke kan se, f.eks. en vurdering ingen har gitt, spørsmål som er skjult på siden, eller en pris som avviker fra den på skjermen, og Google advarer om at oppmerking som bryter retningslinjene, kan gjøre en side ukvalifisert, hvor ren syntaksen enn er. Merk bare opp det siden viser, og lag begge deler fra én kilde, så de ikke kan skilles.
Hundrevis av blokker om ett selskap, og ingenting som binder dem sammen. Hver
side gjentar navnet, logoen og adressen til organisasjonen, av og til med små
forskjeller, og å rette én detalj betyr å finne alle sammen. Nodene er anonyme,
eller hver side og hvert språk lager sin egen identifikator for den samme
enheten. Gi hver virkelig ting én @id bygget fra en stabil URL med et
fragment, beskriv den én gang, og vis til den overalt ellers.
En malendring som ødelegger oppmerkingen på hver side samtidig. Et
feilplassert anførselstegn, et komma for mye på slutten eller en tom verdi gjør
hver blokk ugyldig, og de som leser dataene, kan ikke bruke noe av dem. Googles
veiledning advarer om at maler kan ødelegge oppmerking etter at den er satt i
produksjon. JSON-en ble satt sammen som tekst, med verdier limt inn mellom
krøllparenteser, så et manglende felt etterlater en tom streng eller en ødelagt
struktur. Bygg utsagnet som en datastruktur og serialiser det, slik malene på
dette nettstedet gjør med jsonify i Hugo, utelat egenskaper som mangler verdi,
i stedet for å sende dem ut tomme, og pars hver blokk i det bygde resultatet.
En graf som navngir sider som mangler. Adressene i oppmerkingen fører til en 404, en testvert eller en speilet kopi. De ble skrevet inn for hånd eller bygget etter en annen regel enn lenkene og den kanoniske adressen. Utled hver URL i oppmerkingen fra den samme funksjonen som lager sidens kanoniske adresse, og sjekk at hver av dem faktisk ble bygget.
Les mer
- schema.org — det felles vokabularet av typer og egenskaper, med en side for hver type.
- JSON-LD 1.1 — W3C-anbefalingen for syntaksen, med nodeidentifikatorer og nodereferanser.
- schema.org: DefinedTerm — typen hver side i ordlisten bruker til å beskrive ordet den forklarer.
- Google Search Central: introduction to structured data — de tre syntaksene, regelen om synlighet og hvordan utvidede resultater testes.
- Schema Markup Validator — leser de strukturerte dataene på en hvilken som helst side opp mot vokabularet til schema.org.