Soms kan het gebeuren dat bezoekers een 404 foutmelding (Pagina niet gevonden) te zien krijgen, bijvoorbeeld als ze een tikfout maken, of omdat je zelf ergens iets in de site gewijzigd hebt waardoor de URL's van je site veranderen. De 404-pagina die standaard in Joomla zit is erg lelijk, en wijkt volledig af van het design van je template. Bezoekers zouden zelfs kunnen denken dat ze op een andere site terecht zijn gekomen en wegklikken. Dit is vanuit SEO standpunt niet de bedoeling natuurlijk. We moeten dus zorgen voor een nette foutpagina.

Dit laatse zou je trouwens zoveel mogelijk moeten voorkomen door 301-redirects aan te leggen. Mochten bezoekers echter toch op een niet-gevonden pagina aankomen, zorg dan dat ze wel een nette foutmelding te zien krijgen. 

Voorkom 404 fouten

Ten eerste zou je natuurlijk moeten voorkomen dat bezoekers 404 fouten te zien krijgen. Als dit veel gebeurt zal Google dit waarschijnlijk registreren, en er je mogelijk voor afstraffen met lagere rankings. Je kunt bijvoorbeeld 404 fouten veroorzaken als je menu-items of artikelen hernoemd, of in ieder geval de alias daarvan. Hernoemen mag dus als de alias hetzelfde blijft. Verander je de alias wel, dan verandert ook de URL (mogelijk de URL die Google al geïndexeerd heeft). Mocht het toch nodig zijn ook de alias te hernoemen, zorg dan dat je de oude URL omleidt naar de nieuwe met een 301-redirect.

Zorg vooral dat je eventuele 404-fouten monitort met het Verwijzingsbeheer in Joomla (of een vergelijkbare extensie). Ook kun je niet-Joomla diensten gebruiken om gewoon je website te crawlen en te laten scannen op 404 codes. Dit kan bijvoorbeeld met de gratis desktoptool Screaming Frog SEO spider of gratis webdiensten als www.brokenlinkcheck.com of de SEO audits van WebCEO en SemRush.

Joomla Hosting tip: Siteground

Joomlaseo.com laadt in 0.5 - 1 seconden en heeft een Pingdom score van 100%!!! Daarom bevelen we Siteground hosting aan. Snelle servers, goede support, gratis SSL, etc. En niet duur...

 

Niet alle 404 fouten zijn altijd slecht. Als je bijvoorbeeld een artikel in je webshop hebt en het wordt niet meer geleverd, dan kun je de pagina gewoon verwijderen. Er zullen inderdaad een tijdje 404-fouten optreden, maar dit is dan om legitieme redenen, hier heeft Google geen enkel probleem mee. De betreffende pagina zal dan na een tijdje verwijderd worden, zonder consequenties voor de rest van de site. Zorg dan natuurlijk wel dat je niet ergens in je menu nog steeds bezoekers naar deze niet meer bestaande pagina leidt. Als dit soort foutieve menu-items of links structureel in je site zitten is er sprake van een slechte set-up van je site, en daar heeft Google wel moeite mee. Ook tikfouten van gebruikers zijn niet jouw fout, maar als mensen structureel dezelfde tikfout maken zou je dit op kunnen lossen met een redirect.

Creëer een custom 404-pagina in Joomla

Als je template zelf niet al voorziet in een nette 404 pagina kun je die vrij eenvoudig zelf aanmaken:

  • Maak een gewoon Joomla artikel aan.
  • Noem het bijvoorbeeld 404 of foutpagina en type er een relevant stukje tekst bij, liefst met links naar je Home pagina of een zoekfunctie
  • Sla het artikel op en registreer het database ID van het artikel in het Artikelbeheer (laatste kolom in het overzicht). Ik gebruik 999 als voorbeeld.
  • Optioneel (maar aan te raden): zet de Robots-setting voor het artikel op NOINDEX, NOFOLLOW om te voorkomen dat Google het indexeerd.
  • Optioneel, link het artikel aan een verborgen menu
  • Kopieer dit bestand:  templates/system/error.php en plaats een kopie in de hoofdmap van je huidige template, bijvoorbeeld /templates/jouw_template/.
  • Zoek het volgende stukje code:
defined('_JEXEC') or die;

Verwijder alles wat daarna komt en plaats dan de volgende code:

if (($this->error->getCode()) == '404') {
header('Location: /index.php?option=com_content&view=article&id=999');
exit;
}

Vervang het artikel ID (999 in dit geval) door het ID van je eigen artikel.

En eenvoudiger oplossing?

Eigenlijk is er helemaal geen reden om het error.php bestandje te gebruiken, we gebruiken eigenlijk maar 1 regel uit dat bestandje. Makkelijker is dus om een nieuw error.php bestand aan te maken in je template map, en daar de volgende code in 1 keer in te plakken:

<?php
defined('_JEXEC') or die;
if (($this->error->getCode()) == '404') {
header('Location: /index.php?option=com_content&view=article&id=999');
exit;}
?>

Opnieuw: vervang 999 met je eigen artikel ID. Ik heb het bestandje hier ook ter download neergezet:

error.php (Joomla 3 version, zipped)

Als je helemaal hebt meegedaan, en het 404-artikel aan een verborgen menu hebt toegevoegd kun je de boel nog wat netter maken. In plaats van de gebruiker door te sturen naar de non-SEF URL van het artikel kun je hem nu naar het menu-item doorsturen. Als je het menu-item bijvoorbeeld Page not Found hebt genoemd, kun je de regel die begint met header... als volgt aanpassen:

header('Location: page-not-found');

Verbeterde code met correcte HTTP-response

Dan tenslotte een nog beter alternatief: Vervang de regel die begint met header("Location.... door de volgende code:

header("HTTP/1.0 404 Not Found");
echo file_get_contents(JURI::root().'/index.php?option=com_content&view=article&id=999');

In de eerste voorbeelden werd de bezoeker bij een 404 melding doorgestuurd naar het 404-artikel. Het nadeel is nu dat de gebruiker niet meer ziet op welke URL de foutmelding optrad. Het is beter om de URL hetzelfde te houden, en dan in die URL de tekst van het 404 te importeren. Ook de browser (en Google) krijgen dan technisch gesproken de correcte HTTP header te zien.

Dan tenslotte: als je een commerciële template hebt gekocht, of de standaard Protostar template gebruikt hoef je dit waarschijnlijk niet zo op te zetten, daar zit vaak al een nette pagina ingebouwd.