Toegankelijkheid: codeer volgorde
Source order
Katinka Hesselink 2006
Er zijn mensen die webpagina's bekijken met een sprekende browser . Aan visuele grapjes hebben deze mensen uiteraard niets. Zo'n browser leest tekst voor die op de pagina staat. Beter gezegd: leest tekst voor die in de HTML-code van de webpagina staat. Een sprekende browser is dus te vergelijken met een tekst-browser.
De belangrijkste tekstbrowser is google. Google leest een website niet visueel, maar van begin tot eind als een verzameling code, met daarin links en trefwoorden (grofweg). Google interpreteert tekst die vooraan staat als belangrijk. Dat is logisch: tekst die bovenaan staat, interpreteren mensen die naar een webpagina kijken ook als belangrijk. In een pagina die gebaseerd is op een tabel, met links en misschien boven een menu en vervolgens de inhoud - staat die inhoud in de code na alle menu's. ( voorbeeld van mijn eigen site ). Kijk eens naar de code (inhoud er uit gehaald):
<!DOCTYPE doctype PUBLIC
"-//w3c//dtd html 4.0 transitional//nl">
<html><head>
<meta content="text/html; charset=iso-8859-1"
http-equiv="Content-Type">
<title></title>
</head>
<body dir="ltr">
<table summary="-" border="0" cellpadding="15"
cellspacing="0" width="100%">
<tbody> <tr>
<td rowspan="3" class="menu" width="20%">
<center><img src="LOGO.GIF" alt="" title="LOGO"
height="125" width="110"></center>
<a class="skiplink" href="#startcontent"
accesskey="2">Sla navigatie over</a>
<a href=""></a>
<a href=""></a>
<a href=""></a>
<a href=""></a></td>
<td class="nav">
<a href=""></a>
<a href=""></a> </td>
<td class="nav">
<a href=""></a>
<a id="hier" href="hier.htm">hier</a>
<a href=""></a> </td>
<td class="nav">
<a href=""></a>
<a href=""></a>
<a href=""></a> </td>
<td class="nav">
<a href=""></a>
<a href=""></a> </td> </tr>
<tr><td>
<h1><a name="startcontent"></a>
KOP EINDELIJK DE EERSTE INHOUD</h1></td></tr>
<tr><td>
<h3>NOG EEN KOP - TWEEDE STUK ECHTE INHOUD</h3>
<p><a href="">LINK NAAR ECHT ARTIKEL</a></p>
Al
die
a
elementen die je ziet, zijn links van het menu. Technisch is er
nog wel het een en ander aan te merken op deze pagina.
1
Het punt is dat zowel google als een sprekende browser een heleboel
irrelevante links af moeten voordat de daadwerkelijke inhoud langs
komt. Voor de menselijke lezers zit er een 'skip-to-to content' link
in. 2 In het Nederlands heb ik die
'Sla navigatie over' genoemd. Voor google is dit geen ideale oplossing,
omdat ik aan lijk te geven dat het menu belangrijker is dan de
onderwerpen die er op de pagina besproken worden. Een betere oplossing
is het om met CSS het menu naar boven te halen. Dit heb ik in diverse
pagina's toegepast, en het is het makkelijkst voor zij-menu's. Dus
menu's die links of rechts van de inhoud terecht komen.
CSS oplossing
Het voorbeeld komst van deze pagina.
<!DOCTYPE html PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//nl">
<html>
<head>
<title></title>
<meta name="author" content="auteur">
</head>
<body>
<div id="main">
<h1>KOP</h1>
<h3>Auteur</h3>
<p>inhoud bla, bla, bla</p>
....
</div>
<div id="menu">
<a href=""></a>
<a href=""></a>
<a href=""></a>
<a href=""></a>
<a href=""></a>
<a href=""></a>
<a href=""></a>
</div>
</body>
</html>
Iedereen die een beetje van coderen houdt, ziet dat dit er veel beter
uit ziet in de code. Het menu komt pas helemaal onderaan, zodat google
en sprekende browsers vanzelf eerst de inhoud tegen komen. Het menu is
vervolgens met CSS naar boven gehaald, in dit geval met floats. Het
artikel zelf heeft
<div id="main">
...
</div>
, terwijl het
menu omsloten wordt met een
<div id="menu">
. Dit klopt met de inhoud, in tegenstelling tot de tabel die ik in het eerdere voorbeeld
gebruikt heb. Uit het stylesheet:
#menu {width: 20%;
float: left ;
padding: 4em 0 0 0;
margin:0;}
#main {width: 77%;
float: right ;
margin: 0;
padding:0 5px;
border-left: solid #fff 1px; }
Mocht ik het menu rechts willen zetten, dan hoef ik alleen maar de float's om te draaien. Hier is het voordeel van CSS duidelijk: een tabel veranderen betekent dat elke pagina met zo'n table aangepast moet worden. Dat is ook de reden dat er op vrij veel plekken van mijn website nog tabellen te bewonderen zijn. Een CSS-pagina veranderen is alleen maar een kwestie van een document aanpassen: het stylesheet. In dit geval kan ik dus in een handomdraai honderden pagina's van uiterlijk veranderen, door deze ene pagina aan te passen. 3
Conclusie
In dit aspect van accessibility-design is er geen verschil tussen zo ontwerpen dat de pagina goed gevonden wordt door google en toegankelijk ontwerpen voor mensen die een sprekende browser gebruiken. Zoek-machine optimalisatie gaat dus samen met gebruiksvriendelijkheid voor een vaak genegeerde groep gebruikers. Dit komt onder andere door het gebruik van CSS Stylesheets en de bijbehorende scheiding van content en opmaak. Dit maakt het voorlezen van een stuk code een heel stuk eenvoudiger.
Voetnoten
1 Elders op deze site leg ik uit wat er allemaal fout gaat op deze pagina: De methode die ik hier heb gebruikt voor de menu's is niet ideaal. De doctype klopt niet en de alt-tekst methode die hier gebruikt is (in de code hierboven niet zichtbaar) is wat overdreven.
2
Recent onderzoek (13-Jan-2006)
laat zien dat mensen die screenreaders gebruiken niet echt
geinteresseerd zijn in de codeervolgorde. Zij gebruiken meestal de
mogelijkheden van de screenreader om de structuur van de pagina
duidelijk te maken. Hiervoor is het wel noodzakelijk dat de webpagina
het type HTML-CSS gebruikt dat op deze website wordt uitgelegd: als
kopjes niet in de code aangeduid worden met bijvoorbeel <h1> ... </h1>
, kan een screenreader niet zien dat dit
belangrijke tekst is: namelijk een kop (heading) met niveau 1.
3 De Width van #main is 77% en die van #menu is 20%. Dit telt niet op tot 100%, omdat browsers moeite hebben met de precieze breedte van zo'n element. Browsers interpreteren die breedte ook nog eens verschillend. In de praktijk probeer ik dan uit wat werkt in Firefox, IE6 en Opera en als het resultaat er in alle drie mee door kan, ben ik tevreden. In dit geval hoefden de kolommen niet heel precies tegen elkaar aan te staan en dan kan zo'n oplossing waarbij er 3% 'mist' best.
Zie ook Tips in toegankelijkheid: pagina-indeling en Absolute positionering in plaats van tabellen