Naar de inhoud

Kennisbank · Internet Marketing Begrippen

URL.

Maurits 16 min leestijd

Een URL is het adres waarmee je een pagina, een afbeelding of een bestand op internet kunt opvragen. De afkorting staat voor Uniform Resource Locator, het Nederlandse woord is webadres.

Elk adres is opgebouwd uit vaste onderdelen die allemaal iets anders doen. Als je weet welk deel waarvoor dient, snap je meteen waarom een link soms breekt, waarom dezelfde pagina onder twee adressen kan staan, en waarom je site het lokaal wel deed en op de server niet.

Wat de afkorting betekent

Een URL is een specifiek soort URI. Een URI is een aanduiding van iets, een URL is een aanduiding met een vindplaats erbij. In gewoon gebruik is dat verschil weggezakt en zeggen mensen URL tegen alles wat in de adresbalk past.

Een adres is wel iets anders dan een link. Een link is het stukje HTML dat naar dat adres verwijst, met tekst waar iemand op kan klikken. Hoe zo'n verwijzing is opgebouwd staat in het artikel over de hyperlink.

De officiële beschrijving van de syntaxis staat in RFC 3986 uit 2005. Wat browsers echt doen staat inmiddels in de URL-standaard van de WHATWG, die op onderdelen soepeler is. Daardoor trekken browsers een rommelig adres vaak stilzwijgend recht en doet een server dat niet.

De onderdelen op een rij

Neem dit adres als voorbeeld: https://www.platformpro.nl/kennisbank/seo/?filter=nieuw&pagina=2#uitleg

  • Het protocol. https, gevolgd door een dubbele punt en twee schuine strepen. Dit zegt hoe de browser met de server praat.
  • Het subdomein. www. Technisch een aparte naam voor een aparte plek, ook al voelt het als hetzelfde adres.
  • De domeinnaam. platformpro.nl. Het deel achter de laatste punt is de extensie, ook wel het topleveldomein.
  • De poort. Staat er hier niet bij, want die is standaard. Voluit zou er :443 achter het domein staan.
  • Het pad. /kennisbank/seo/. Waar de pagina binnen de site staat.
  • De querystring. Alles achter het vraagteken. Twee paren van een naam en een waarde, gescheiden door een ampersand.
  • Het anker. Alles achter het hekje. Een verwijzing naar een plek op de pagina zelf.

Er is nog een onderdeel dat je bijna nooit ziet: de gebruikersinformatie. Alles tussen de dubbele schuine strepen en een apenstaartje is een gebruikersnaam, geen domein. Daar kom ik verderop op terug, want daar wordt mee gefopt.

Het protocol en de poort

Het protocol bepaalt de spelregels van het gesprek. Op het web is dat http of https, waarbij de s staat voor een versleutelde verbinding via TLS. Hoe die uitwisseling verloopt staat bij HTTP.

Http zonder s is in de praktijk verleden tijd. Sinds Chrome 68 in juli 2018 markeert die browser elke gewone http-pagina als niet veilig, en de andere browsers doen inmiddels hetzelfde. Zonder geldig SSL-certificaat ziet je bezoeker dus een waarschuwing voordat hij iets van je site heeft gelezen.

Er zijn meer protocollen. mailto: opent een mailprogramma, tel: start een telefoongesprek op een mobiel, file: wijst naar een bestand op je eigen computer. Ftp werd vroeger in de browser gebruikt om bestanden op te halen, maar Chrome haalde die ondersteuning er in 2021 uit.

De poort is het nummer van de deur op de server. Http gebruikt standaard poort 80, https poort 443. Omdat die twee standaard zijn, laat de browser ze weg. Werk je lokaal aan een site, dan zie je ze wel: adressen als localhost:8888 of 127.0.0.1:3000 wijzen naar een andere dienst op dezelfde machine.

Het domein en wat de browser ermee doet

De domeinnaam is het enige deel dat de browser eerst moet vertalen voordat er iets kan gebeuren. Hij vraagt via DNS op welk IP-adres die naam hoort, en pas dan wordt er verbinding gemaakt.

Dat verklaart waarom een adres kan bestaan terwijl er niets te zien is. Wijst de naam nergens heen, dan krijg je geen 404 maar een foutmelding van de browser zelf over een server die niet gevonden kon worden. Dat is een probleem in je DNS, niet in je site.

Het domeingedeelte is hoofdletterongevoelig. PlatformPro.nl en platformpro.nl komen op dezelfde plek uit. Dat geldt niet voor het pad erachter, en dat verschil is de bron van veel verwarring.

Een subdomein is een naam die vóór het domein staat. shop.voorbeeld.nl kan op een heel andere server draaien dan voorbeeld.nl, en zoekmachines behandelen het grotendeels als een aparte site. Welke extensies er zijn en wat ze betekenen staat bij het topleveldomein.

Domeinnamen met accenten bestaan ook. Achter de schermen worden die omgezet naar een vorm met alleen gewone letters, die begint met xn--. Een naam als café.nl reist dus als xn--caf-dma.nl over het net.

Het pad, en waarom hoofdletters ertoe doen

Het pad is alles na de domeinnaam tot aan een vraagteken of een hekje. Het is opgebouwd als een mappenstructuur, met schuine strepen tussen de niveaus.

Vroeger wees zo'n pad rechtstreeks naar een bestand op de server: /over/contact.html was echt een bestand in een map. Bij WordPress en andere systemen is dat niet meer zo. Daar wordt het pad opgevangen door een programma dat er een pagina uit de database bij zoekt. Het pad is dan een adres geworden, geen vindplaats.

Het pad is hoofdlettergevoelig, en dat komt door het bestandssysteem eronder. Vrijwel alle webservers draaien op Linux, en daar zijn /Diensten/ en /diensten/ twee verschillende dingen. Op een Mac of een Windows-machine is dat standaard niet zo.

Daar komt de klassieke ontwikkelaarsklacht vandaan dat iets het lokaal wel deed. Een afbeelding die je Logo.png hebt genoemd en in je HTML als logo.png aanroept, werkt op je eigen laptop prima en geeft op de server een gebroken plaatje. Kleine letters gebruiken, altijd, lost dat probleem voorgoed op.

De schuine streep aan het eind

/kennisbank/seo en /kennisbank/seo/ zijn technisch twee verschillende adressen. Voor een webserver is de versie met streep een map en de versie zonder een bestand.

Apache lost dat zelf op met een instelling die DirectorySlash heet: vraag je een map op zonder streep, dan stuurt de server je met een permanente doorverwijzing naar dezelfde plek mét streep. WordPress doet iets vergelijkbaars voor pagina's en berichten en zet er standaard een streep achter.

Er is nog een gevolg dat vaker misgaat dan het slotstreepje zelf. Relatieve links worden berekend vanaf het huidige adres. Sta je op /map/pagina en link je naar afbeelding.jpg, dan komt de browser uit op /map/afbeelding.jpg. Sta je op /map/pagina/ en doe je hetzelfde, dan wordt het /map/pagina/afbeelding.jpg. Dezelfde regel HTML, twee verschillende bestemmingen.

Kies daarom één vorm voor je hele site, ook in je menu en je interne links. Welke maakt niet uit, als het maar overal hetzelfde is.

De querystring

Alles achter het vraagteken is de querystring. Die bestaat uit paren van een naam en een waarde met een isgelijkteken ertussen, en meerdere paren worden gescheiden door een ampersand.

Die gegevens gaan mee naar de server. Een webshop gebruikt ze voor filters en sorteringen, een zoekfunctie voor de zoekterm, een campagne voor het label waarmee je ziet waar bezoek vandaan komt. Labels die met utm_ beginnen worden door de meeste statistiekenpakketten herkend, gclid komt van Google Ads en fbclid van Facebook.

De volgorde van de parameters maakt voor de server meestal niet uit, maar voor een zoekmachine wel: ?a=1&b=2 en ?b=2&a=1 zijn twee adressen met dezelfde inhoud. Komt een naam twee keer voor, dan bepaalt de servertaal wat er gebeurt. PHP houdt de laatste waarde aan en gooit de eerste weg, tenzij je de naam met blokhaken schrijft.

Twee dingen horen niet in een querystring. Wachtwoorden en tokens, want een adres komt in serverlogboeken en in de browsergeschiedenis terecht. En persoonsgegevens, want een adres reist mee als verwijzende bron naar de volgende site. Browsers zijn daar strenger in geworden: sinds 2020 sturen de meeste bij een klik naar een andere site alleen nog het domein mee en niet het volledige adres.

Het anker

Alles achter het hekje heet het anker of het fragment. Dit deel wordt niet naar de server gestuurd. De browser haalt de pagina op en zoekt daarna zelf de plek op waar hij naartoe moet springen.

Die plek is een element met een id die overeenkomt met de tekst achter het hekje. Staat er in je HTML een kop met id="uitleg", dan brengt #uitleg de bezoeker daar. Bestaat de id niet, dan gebeurt er niets en blijf je bovenaan staan.

Omdat het fragment de server niet bereikt, zie je het niet terug in je serverlogboeken. Een statistiekenpakket dat in de browser draait ziet het wel.

Sommige browsers kunnen ook naar een stuk tekst springen zonder dat daar een id staat, met de vorm #:~:text= gevolgd door de gezochte woorden. Google gebruikt dat om je vanuit een zoekresultaat direct bij de passage te brengen. Het werkt niet overal, dus bouw er niets op.

Tekens die gecodeerd worden

Een webadres mag maar een beperkte set tekens bevatten: letters, cijfers en een handjevol leestekens. Alles daarbuiten wordt omgezet naar een percentteken met twee tekens erachter.

Een spatie wordt %20. Een e met een trema wordt %C3%AB, want de letter wordt eerst in UTF-8 uitgeschreven en daarna per byte gecodeerd. Zet je /café-openingstijden/ in je adres, dan krijgt iemand die het kopieert /caf%C3%A9-openingstijden/ te zien. Het werkt, alleen is het niet te lezen en niet te delen.

In de querystring geldt bovendien een oudere afspraak waarbij een spatie als plusteken wordt geschreven. Daarom zie je in zoekadressen soms plustekens tussen de woorden. Wil je een echt plusteken doorgeven, dan moet dat als %2B.

De fout die je in de praktijk het meest tegenkomt is dubbele codering. Een adres dat al gecodeerd was wordt nog een keer door de molen gehaald, en dan verandert %20 in %2520. Zie je zoiets in je logboeken of in een 404-melding, dan zit er in je systeem een stap te veel.

Sommige tekens zijn niet verboden maar gereserveerd. Een vraagteken, een hekje, een ampersand en een schuine streep hebben al een taak. Zet je die middenin een naam, dan wordt je adres op de verkeerde plek afgekapt.

Absolute en relatieve adressen

Een absoluut adres is compleet, van het protocol tot en met het pad. Een relatief adres bevat alleen het stuk vanaf de plek waar je nu bent, en wordt door de browser aangevuld.

Een adres dat begint met een schuine streep wordt gerekend vanaf de hoofdmap van je site. Dat is de veiligste vorm voor interne links, want die blijft kloppen waar je hem ook neerzet. Een adres zonder streep aan het begin wordt vanaf de huidige map gerekend, met het gedoe dat hierboven bij het slotstreepje staat.

Je komt ook adressen tegen die met twee schuine strepen beginnen, zonder protocol. Die nemen het protocol over van de pagina waarop ze staan. Dat was handig in de jaren waarin sites half op http en half op https draaiden en is nu overbodig.

Wat je hiervan merkt: kopieer je een stuk HTML van de ene site naar de andere, dan breken relatieve links stilletjes. Ze geven geen foutmelding bij het plakken, ze wijzen alleen naar iets dat er niet is.

Het canonieke adres

Dezelfde pagina is vaak via meerdere adressen te bereiken. Met en zonder www, met en zonder slotstreep, met een campagnelabel erachter, en bij een webshop met tientallen filtercombinaties. Voor een zoekmachine zijn dat allemaal aparte adressen.

Het canonieke adres is het adres dat je als het echte aanwijst. Je zet dat in de kop van je pagina met een regel die rel="canonical" heet, een afspraak die de grote zoekmachines in 2009 samen hebben ingevoerd. Voor bestanden zonder HTML, zoals een pdf, kan het ook via een http-header.

Zo'n verwijzing is een aanwijzing en geen bevel: Google mag ervan afwijken als hij denkt dat je je vergist. Het is ook geen doorverwijzing. Bezoekers komen gewoon op het adres uit dat ze intikten, alleen de zoekmachine weet welke versie hij moet indexeren.

Elke fatsoenlijke SEO-plugin voor WordPress zet die regel automatisch op elke pagina, ook als hij naar de pagina zelf wijst. Dat laatste is gewenst gedrag. Welk adres je het beste kunt kiezen en hoe je de rest doorverwijst, staat bij zoekmachinevriendelijke URL's.

WordPress bewaart je pagina's in een database, niet als losse bestanden. Toch krijg je adressen als /kennisbank/seo/. Dat komt door een vertaalslag die permalinks heet.

Op een Apache-server staat in het bestand .htaccess een regel die zegt: bestaat het gevraagde bestand niet, stuur het verzoek dan naar index.php. WordPress leest daarna het pad uit, vergelijkt het met een lijst herschrijfregels en zoekt de juiste pagina op. Op nginx staat er geen .htaccess en doet een regel met try_files hetzelfde werk. Dat is meteen de reden dat een verhuisde site soms alleen op de voorpagina werkt en op alle andere adressen een 404 geeft: het herschrijfbestand is niet meegekomen.

De vorm van je adressen kies je onder Instellingen, Permalinks. De optie Berichtnaam geeft /titel-van-je-bericht/ en is voor de meeste sites de juiste keuze. Staat je site nog op Simpel, dan krijg je /?p=123. Die lijst met herschrijfregels wordt opgeslagen en loopt soms achter. Klik dan op diezelfde pagina op Wijzigingen opslaan zonder iets te veranderen, dan wordt hij opnieuw opgebouwd. Dat is de standaardoplossing voor pagina's die ineens een 404 geven terwijl ze bestaan.

Een oude waarschuwing die je nog tegenkomt is dat een permalink die met de berichtnaam begint traag zou zijn. Dat kwam door de manier waarop de regels vroeger werden verwerkt en is sinds WordPress 3.3 uit 2011 niet meer aan de orde.

Verder maakt WordPress zelf een paar vaste adresvormen aan: /page/2/ voor de tweede pagina van een overzicht, /category/ als basis voor categorieën, /feed/ voor de RSS-uitvoer en /author/naam/ voor de berichten van een schrijver. Eigen berichttypen krijgen hun eigen basis, zoals /product/ bij een webshop. Geef nooit een gewone pagina dezelfde naam als zo'n basis, want dan is niet te voorspellen wat er verschijnt.

Verander je de slug van een bericht, dan onthoudt WordPress de oude en stuurt bezoekers automatisch door. Dat is een vangnet, geen vervanging van een echte doorverwijzing. Bij pagina's en categorieën werkt het niet altijd, en bij een verhuizing naar een ander domein helemaal niet.

Een adres lezen voordat je erop klikt

Bij phishing draait bijna alles om het verkeerd lezen van een adres. Eén regel beschermt je daartegen: het echte domein zijn de laatste twee delen vóór de eerste schuine streep na het protocol.

Bij https://ing.nl.beveiliging-check.com/inloggen is het domein dus beveiliging-check.com en heeft ing.nl er niets mee te maken. Bij https://www.ing.nl/mijn-ing/ klopt het wel.

Let ook op het apenstaartje. In https://www.ing.nl@voorbeeld.nl/ is ing.nl alleen een gebruikersnaam en ga je naar voorbeeld.nl. Browsers waarschuwen daar vaak voor, maar de regel geldt nog steeds.

En besef dat het slotje in de adresbalk niets over betrouwbaarheid zegt. Het zegt alleen dat de verbinding versleuteld is. Een phishingsite haalt net zo makkelijk een gratis certificaat op als jij.

Waar het in de praktijk misgaat

Adressen wijzigen zonder doorverwijzing. Elke link van buitenaf en elke bladwijzer komt dan op een foutmelding uit. Zet er een permanente doorverwijzing op en laat die staan.

Hoofdletters in bestandsnamen. Werkt op je laptop, breekt op de server. Geldt ook voor afbeeldingen die je via de mediabibliotheek uploadt met een naam uit je camera.

Een adres uit de adresbalk doorsturen. Wat je kopieert bevat vaak nog een campagnelabel of een klik-id van Google of Facebook. Zet je dat in een nieuwsbrief, dan meet je je eigen verkeer verkeerd.

Verkorte links als vaste verwijzing. Stopt de dienst erachter, dan is elke link ineens dood en zie je niet meer waar hij heen ging.

Veelgestelde vragen over URL's

Wat betekent URL?

URL staat voor Uniform Resource Locator. Vertaald: een adres in een vaste vorm waarmee je iets op internet kunt opvragen.

In het Nederlands zeg je gewoon webadres. Beide woorden slaan op hetzelfde: de tekst die in de adresbalk van je browser staat.

Wat is het verschil tussen een URL en een domeinnaam?

De domeinnaam is een onderdeel van de URL. In https://platformpro.nl/kennisbank/ is platformpro.nl de domeinnaam en is het geheel de URL.

Die domeinnaam huur je en hij wijst via DNS naar een server. De rest van het adres bepaal je zelf, per pagina.

Waarom staat er soms een vraagteken in een webadres?

Het vraagteken scheidt het pad van de querystring. Daarachter staan gegevens die naar de server worden meegestuurd, zoals een filter, een zoekterm of een campagnelabel.

Voor een gewone pagina heb je dat niet nodig. Bij een webshop met filters of bij een zoekpagina wel.

Wat doet het hekje in een URL?

Het hekje leidt het anker in: een verwijzing naar een plek op de pagina zelf. De browser springt naar het element met die id.

Dat deel wordt niet naar de server gestuurd. Je server weet dus niet naar welk anker iemand ging.

Maakt een hoofdletter in een URL verschil?

In het domeingedeelte niet, in het pad erna wel. De meeste servers draaien op Linux en dat maakt onderscheid tussen /Diensten/ en /diensten/.

Het gevolg is dezelfde inhoud onder twee adressen, of een foutmelding voor wie het verkeerd overtikt. Gebruik altijd kleine letters, ook in bestandsnamen van afbeeldingen.

Moet er een schuine streep aan het eind van een URL staan?

Dat mag je zelf kiezen, als je maar consequent bent. Technisch zijn /pad en /pad/ twee adressen en de meeste servers verwijzen de ene vorm naar de andere door.

WordPress zet er standaard een streep achter bij pagina's en berichten. Volg dat en zorg dat je eigen links dezelfde vorm hebben.

Hoe lang mag een URL zijn?

De standaard noemt geen harde grens. In de praktijk lopen webservers vast rond de acht kilobyte aan verzoekregel, en dat is duizenden tekens.

De echte grens is wat een mens nog kan overzien en wat in een zoekresultaat past. Houd het pad na je domeinnaam op een paar woorden.

Waarom werkt mijn link met een spatie erin niet?

Een spatie mag niet in een adres staan en wordt omgezet naar %20. Gaat die omzetting ergens fout, dan wordt de link op de spatie afgekapt.

Dat gebeurt vooral in e-mail en in chatprogramma's, die zelf bepalen waar een adres ophoudt. Geef bestanden namen zonder spaties, met streepjes ertussen.

Wat is een canonieke URL?

Het adres dat je aanwijst als de officiële versie van een pagina die onder meerdere adressen bereikbaar is. Je geeft dat aan met een regel in de kop van je pagina.

Zoekmachines gebruiken die aanwijzing om te bepalen welke versie ze indexeren. Bezoekers merken er niets van, want er wordt niets doorverwezen.

Wat zijn utm-parameters?

Labels die je achter een adres plakt om te zien waar bezoek vandaan komt, zoals utm_source en utm_medium. Statistiekenpakketten lezen die uit en tonen ze als bron.

Gebruik ze op links van buiten naar je site, dus in een nieuwsbrief of een advertentie. Zet ze nooit op links binnen je eigen site, want dan overschrijf je de echte herkomst van je bezoeker.

Waar stel ik de URL van een pagina in WordPress in?

De vorm voor de hele site staat onder Instellingen, Permalinks. Het adres van een losse pagina pas je aan in het bewerkscherm, in het zijpaneel, bij de slug of permalink. Doe dat vóór het publiceren, want daarna is elke wijziging een verhuizing waar een doorverwijzing bij hoort.

Waarom geven al mijn pagina's ineens een 404 behalve de voorpagina?

Dat is bijna altijd het herschrijfbestand. Op Apache ontbreekt de .htaccess of staat de module voor herschrijven uit, op nginx ontbreekt de try_files-regel.

Probeer eerst de eenvoudige route: ga naar Instellingen, Permalinks en klik op opslaan zonder iets te wijzigen. Dat bouwt de regels opnieuw op. Helpt dat niet, dan zit het bij je hosting.

Hoe zie ik of een link naar een echte site gaat?

Kijk naar wat er direct vóór de eerste schuine streep na het protocol staat, en daarvan naar de laatste twee delen. Dat is het echte domein.

Alles daarvoor kan van alles zijn: een subdomein, een gebruikersnaam achter een apenstaartje, of een merknaam die er is neergezet om je gerust te stellen. Het slotje zegt hier niets over, dat gaat alleen over versleuteling.

Dit artikel hoort bij Internet Marketing Begrippen. Daar vind je meer uitleg over hetzelfde onderwerp.

Een vraag over dit onderwerp?

Vertel waar je tegenaan loopt.

Maurits denkt met je mee en geeft je een praktisch antwoord.

reactie dezelfde werkdag
Maurits van Platform Pro

Vertel kort waar je aan denkt

Nu gesloten, ik reageer de volgende werkdag

Maurits leest je bericht en neemt persoonlijk contact met je op.

Dit veld is bedoeld voor validatiedoeleinden en moet niet worden gewijzigd.
Dit veld is verborgen bij het bekijken van het formulier