Page 404 personnalisée : bien la configurer et la mettre en place

Comment renvoyer une vraie 404, éviter les signaux de soft 404 et offrir aux visiteurs un parcours de récupération utile, dans les frameworks comme dans la configuration serveur.

Lorsqu'un internaute suit un lien cassé, le serveur doit renvoyer un statut 404 Not Found. Pourtant, dans les projets réels, cette règle est souvent violée : le CMS renvoie 200 OK, une redirection mène à la page d'accueil, ou la page « 404 » renvoie le bon code mais s'affiche comme un écran blanc. Chacune de ces situations pose un problème distinct, pour le SEO comme pour l'utilisateur.

Une page 404 bien configurée résout trois problèmes à la fois : elle signale à Google que l'URL n'existe pas, elle garde l'internaute sur le site et l'aide à trouver la bonne rubrique, et elle protège le budget de crawl des passages inutiles. Reprenons chaque aspect dans l'ordre.

Google ne pénalise pas les sites qui ont des pages 404. Les problèmes viennent non pas du code 404 lui-même, mais d'une mauvaise mise en œuvre : une 404 qui renvoie 200 OK, des liens internes qui pointent vers des URL en 404, ou des milliers de pages supprimées sans redirections 301.

Qu'est-ce qu'une page 404

404 Not Found est le code de réponse HTTP qu'un serveur renvoie lorsque la ressource demandée n'existe pas. Ce code signifie que le serveur fonctionne et que la route a bien été résolue, mais que le document demandé est absent. C'est ce qui distingue le 404 du 500 (erreur serveur) et du 503 (service indisponible).

~74 %

Sites sans 404 personnalisée

La plupart des sites affichent la page d'erreur par défaut de leur plateforme, au lieu d'une page à leur image avec de la navigation

Semaines

Délai de désindexation

Google retire en général une 404 correctement renvoyée de l'index en quelques semaines. Vous pouvez accélérer le processus via Search Console

Soft 404

Erreur la plus courante

Le CMS renvoie 200 OK au lieu de 404 : Google indexe des pages vides et dilue la thématique du site

410

Désindexation plus rapide

Google retire les 410 (Gone) de l'index nettement plus vite que les 404 : utilisez-le pour les suppressions de pages en masse

Une page 404 existe à deux niveaux. Le niveau HTTP est le code de réponse dans l'en-tête, celui que voit le crawler. Le niveau visuel est le contenu HTML que voit l'internaute. Les deux comptent autant : un mauvais code HTTP relève du SEO, un design médiocre relève de l'UX.

La règle principale : toujours renvoyer un HTTP 404

La première règle, la plus importante : une page d'erreur doit renvoyer le statut HTTP 404 (ou 410), jamais 200. C'est ce qu'on appelle une « hard 404 », par opposition à la « soft 404 ».

Erreur critique : renvoyer un HTML avec le message « Page introuvable » sous le statut HTTP 200 OK. Google voit une réponse « réussie » et met la page en file d'attente pour l'indexation. Résultat : des centaines d'URL sans intérêt, au contenu identique, apparaissent dans l'index.

Vous pouvez vérifier le statut HTTP de n'importe quelle page directement dans le navigateur : F12 → Network → rechargez la page → repérez la première requête → colonne Status. Ou via curl dans le terminal :

bash
# Check HTTP status of a page
curl -s -o /dev/null -w "%{http_code}" https://example.com/non-existent-url
# Expected output: 404

# Check full response headers
curl -I https://example.com/non-existent-url
Vérification rapide dans le navigateur : ouvrez les DevTools (F12) → onglet Network → accédez à la page 404 → regardez la colonne Status de la première requête. Elle doit afficher 404, et non 200.

Soft 404 et 410 : la différence

Au-delà de la « hard 404 », deux cas voisins sont souvent confondus en pratique : la soft 404 et le statut 410. Bien distinguer les deux est important pour gérer correctement les pages supprimées.

StatutCode HTTPCe que cela signifie pour GoogleQuand l'utiliser
Hard 404404Ressource introuvable ; Google la retire de l'index en quelques semainesPage supprimée ou n'ayant jamais existé
Soft 404200 (erreur !)Google voit une réponse « réussie » et indexe un contenu videJamais : c'est un bug d'implémentation, pas un choix délibéré
Gone410Ressource supprimée définitivement ; Google la désindexe nettement plus vite qu'une 404Suppression de pages en masse (anciens produits, rubriques obsolètes)
La soft 404 n'est pas un choix délibéré du développeur, c'est un bug. Elle survient le plus souvent dans WordPress et d'autres CMS où le template 404 est intégré à la mise en page principale, qui renvoie toujours 200. Vérifiez votre page 404 dès maintenant avec curl ou les DevTools.

Google classe aussi comme soft 404 toute redirection d'une URL en 404 vers la page d'accueil ou vers une autre page sans rapport. Du point de vue du moteur, l'internaute cherchait A, il arrive sur B, et le contenu de B ne répond pas à sa requête. Cela dégrade le signal de qualité de la page de destination.

Ce que doit contenir une bonne page 404

Un internaute qui arrive sur une 404 est déjà un peu frustré. La page doit dissiper cette frustration et lui proposer une étape suivante claire. Une page 404 efficace suit une structure reconnaissable.

Comment une page 404 personnalisée garde l'internaute sur le site.

Message d'erreur clair

Expliquez la situation en langage courant : « Page introuvable » ou « Cette page semble ne pas exister ». Évitez le jargon technique et les codes d'erreur dans le texte visible.

Champ de recherche

L'élément le plus efficace d'une page 404. L'internaute sait déjà ce qu'il cherche : donnez-lui la possibilité de le trouver ici, sans revenir à Google.

Navigation vers les rubriques clés

Liens vers la page d'accueil, les rubriques populaires ou le sitemap. Ils aident l'internaute à se repérer et à poursuivre sa visite.

Bouton retour

Beaucoup d'internautes veulent revenir d'où ils viennent. Un lien ou un bouton retour réduit le taux de rebond et améliore l'UX.

La solution la plus efficace en e-commerce : afficher sur la page 404 les produits ou les catégories populaires. Un internaute qui a suivi un lien cassé vers un produit précis est très probablement intéressé par sa catégorie.

À éviter sur une page 404 : rediriger automatiquement l'internaute vers la page d'accueil en JavaScript (window.location.href = '/'). Google peut y voir une soft 404 : l'internaute attendait A, il reçoit B, dont le contenu n'a aucun rapport. Les redirections 301 au niveau serveur depuis des URL en 404 ne se justifient que lorsqu'une vraie page de remplacement existe.

Mise en œuvre : Next.js, Nginx, Apache

La configuration d'une page 404 personnalisée dépend de votre stack. Voici les trois configurations les plus courantes : Next.js App Router, Nginx et Apache.

Next.js App Router

Dans Next.js 13+ avec App Router, une page 404 personnalisée se crée avec un fichier not-found.tsx dans le dossier app/. Pour l'i18n (par exemple avec next-intl), le fichier se place dans app/[locale]/.

tsx
// app/[locale]/not-found.tsx
import Link from 'next/link';

export default function NotFound() {
  return (
    <main style={{ textAlign: 'center', padding: '4rem 1rem' }}>
      <h1>404 — Page Not Found</h1>
      <p>The link may be outdated or the address was mistyped.</p>
      <Link href="/">Back to homepage</Link>
    </main>
  );
}

// Next.js automatically returns HTTP 404 for this file.

Pour générer une 404 de façon programmatique (par exemple dans une route dynamique app/[locale]/blog/[slug]/page.tsx), utilisez la fonction notFound() de next/navigation. Son appel interrompt immédiatement le rendu, renvoie un HTTP 404 et affiche not-found.tsx.

tsx
// app/[locale]/blog/[slug]/page.tsx
import { notFound } from 'next/navigation';
import { getArticleDoc } from '@/messages/blog-articles/registry';

export default async function ArticlePage({ params }: { params: { slug: string } }) {
  const article = getArticleDoc(params.slug);

  // If slug does not exist — return HTTP 404 and render not-found.tsx
  if (!article) {
    notFound();
  }

  return <ArticleRenderer article={article} />;
}
Dans le Pages Router (Next.js < 13), la page 404 personnalisée fonctionne autrement : créez pages/404.tsx. Next.js y route automatiquement et renvoie un HTTP 404. La fonction notFound() n'est pas disponible dans le Pages Router : utilisez { notFound: true } dans getStaticProps ou getServerSideProps à la place.
tsx
// Pages Router: pages/blog/[slug].tsx (legacy approach)
export async function getServerSideProps({ params }) {
  const article = getArticleDoc(params.slug);

  if (!article) {
    // Next.js will return HTTP 404 and show pages/404.tsx
    return { notFound: true };
  }

  return { props: { article } };
}

Nginx

Dans Nginx, la page 404 personnalisée se configure avec la directive error_page dans le bloc server. Vérifiez que le fichier 404.html existe au chemin indiqué et que sa diffusion ne déclenche pas de redirection interne vers un code 200.

nginx
server {
    listen 80;
    server_name example.com;
    root /var/www/html;

    # Custom page for 404 errors
    error_page 404 /404.html;

    # The location for the file itself — returns 404, not 200
    location = /404.html {
        internal;
    }

    # Custom pages for other errors
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        internal;
    }
}
La directive internal bloque l'accès direct à /404.html depuis l'extérieur : la page n'est accessible qu'en tant que réponse d'erreur. Sans elle, un internaute pourrait ouvrir /404.html directement et recevoir un 200, ce qui crée un contenu dupliqué.

Apache / .htaccess

Sous Apache, la 404 personnalisée se configure avec ErrorDocument, soit dans la configuration principale, soit dans .htaccess.

apache
# .htaccess in the site root

# Custom 404 page
ErrorDocument 404 /404.html

# You can also point to a PHP file
# ErrorDocument 404 /404.php

# Custom pages for other errors
ErrorDocument 403 /403.html
ErrorDocument 500 /500.html

# Enable mod_rewrite for SPA routing
<IfModule mod_rewrite.c>
    RewriteEngine On
    # For React/Vue SPA: all non-existent routes → index.html
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ /index.html [L]
</IfModule>
Attention au routage SPA sous Apache et Nginx : servir toutes les routes inexistantes en index.html avec un code 200 fait indexer par les moteurs des pages qui n'existent pas. La SPA doit soit ajouter côté client une balise <meta name="robots" content="[noindex](/glossary/noindex)"> sur les pages 404, soit utiliser le SSR ou le SSG avec des codes de statut HTTP corrects.

PHP (WordPress et autres CMS)

Dans WordPress, la page 404 personnalisée est le fichier 404.php de votre thème. WordPress renvoie automatiquement un HTTP 404 pour les URL inexistantes, à condition que les permaliens soient bien configurés. Si le CMS renvoie 200 au lieu de 404, le problème vient généralement du .htaccess ou de la configuration du serveur.

php
<?php
// themes/your-theme/404.php
// WordPress automatically returns HTTP 404
get_header();
?>
<main class="error-404">
    <h1>Page Not Found</h1>
    <p>Try using search:</p>
    <?php get_search_form(); ?>
    <p>Or return to the <a href="<?php echo home_url(); ?>">homepage</a>.</p>
</main>
<?php
get_footer();

Une page 404 bien configurée ne représente que la moitié du travail. L'autre moitié consiste à repérer tous les liens qui pointent vers des pages inexistantes, puis à les traiter. Les liens cassés sont la principale cause des erreurs 404 présentes dans l'index.

Étape 1Repérez-les dans Google Search Console

Search Console → Indexation → Pages → motif « Introuvable (404) ». C'est la source gratuite et la plus complète : Google n'affiche que les 404 qu'il a découvertes lors de l'exploration, soit exactement celles qui comptent pour le SEO.

Étape 2Crawlez le site avec Screaming Frog

Lancez un crawl du site dans Screaming Frog SEO Spider. Filtre : Response Codes → 4xx. L'outil montre non seulement les URL en 404, mais aussi les pages source : vous voyez précisément quelles pages contiennent des liens cassés.

Étape 3Analysez les logs serveur

Les logs contiennent 100 % des requêtes, y compris celles que Google n'a pas encore découvertes. Filtre : grep ' 404 ' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20, soit les 20 URL qui renvoient le plus de 404.

Étape 4Corrigez ou mettez en place des redirections

Pour chaque 404 repérée, la décision se prend parmi trois options : mettre en place une 301 vers l'URL de remplacement pertinente (si une page similaire existe), supprimer tous les liens internes qui pointent vers elle, ou laisser la 404 telle quelle (si aucun lien ne pointe vers elle, Google la retirera automatiquement de l'index).

Exemple de code pour la page 404 :
bash
# Find top-20 broken URLs in Nginx/Apache logs
grep ' 404 ' /var/log/nginx/access.log \
  | awk '{print $7}' \
  | sort \
  | uniq -c \
  | sort -rn \
  | head -20

# Example output:
# 143 /old-product-page
#  87 /blog/removed-article
#  34 /wp-login.php  (attack attempts — not critical)
Ne mettez pas en place de redirections 301 de toutes les URL en 404 vers la page d'accueil. C'est ce qu'on appelle une « chaîne de redirection vers l'accueil », que Google traite comme une soft 404. Une redirection ne se justifie que si la page cible est proche thématiquement de la page supprimée. S'il n'y a pas de remplacement, une vraie 404 reste la bonne réponse.

Surveiller les erreurs 404

Un audit ponctuel est utile, mais de nouvelles 404 apparaissent en permanence : des pages sont renommées, des produits supprimés, des sites externes pointent vers des URL inexistantes. Il est important de mettre en place une surveillance régulière.

OutilCe qu'il surveilleFréquenceGratuit
Google Search ConsoleLes 404 découvertes par Googlebot lors de l'explorationMise à jour quotidienneOui
Screaming Frog + planificateurToutes les 404 lors d'un crawl complet du siteHebdomadaire ou mensuelleJusqu'à 500 URL
Logs serveur (goaccess, awstats)Toutes les 404 en temps réel, depuis access.logTemps réelOui
Ahrefs / Semrush Site AuditLes 404 et les liens externes entrants qui pointent vers des 404Automatisée, chaque semainePayant
UptimeRobot / Better UptimeSurveillance de disponibilité des URL clésToutes les 1 à 5 minutesOffre gratuite de base

Pour les grands sites (plus de 10 000 pages), les logs serveur sont particulièrement précieux : ils couvrent 100 % des requêtes, y compris celles des robots, des internautes et des scripts. Search Console ne montre que ce que Googlebot a trouvé pendant l'exploration, soit une partie du tableau complet.

Configurez des alertes dans Google Search Console : Paramètres → Notifications par e-mail. GSC vous envoie une notification si le nombre de 404 augmente fortement, par exemple après un déploiement qui a accidentellement cassé le routage.

Checklist d'une page 404 correcte

Statut HTTP

  • La page 404 renvoie le statut HTTP 404 (vérifié avec curl ou les DevTools)
  • Pas de soft 404 : la page d'erreur ne renvoie pas 200 OK
  • Pas de redirection JavaScript depuis les URL inexistantes vers la page d'accueil
  • Le 410 Gone est utilisé pour les pages supprimées en masse, sans remplacement
  • Les redirections 301 ne sont configurées que pour les URL ayant une page de remplacement pertinente

Contenu de la page

  • Message d'erreur clair, en langage courant, sans jargon technique
  • Un champ de recherche ou un lien vers la recherche du site est présent
  • Un lien vers la page d'accueil est présent
  • Des liens vers 2 à 4 rubriques ou catégories populaires sont présents
  • La page reprend le style du site (en-tête, pied de page, polices)

Mise en œuvre

  • Next.js : le fichier not-found.tsx est créé, et notFound() est appelé pour les slugs inexistants
  • Nginx : la directive error_page 404 est configurée, et le fichier 404.html est marqué comme internal
  • Apache : ErrorDocument 404 est défini dans .htaccess ou dans la configuration principale
  • WordPress : le fichier 404.php existe dans le thème actif
  • SPA (React ou Vue sans SSR) : une balise meta noindex est ajoutée côté client sur les pages 404

Surveillance

  • Google Search Console est connectée et les alertes e-mail sont configurées
  • Un crawl régulier avec Screaming Frog ou un outil équivalent est effectué (au moins une fois par mois)
  • Les logs serveur sont accessibles et analysés pour les sites à fort trafic
  • Tous les liens internes pointant vers des URL en 404 ont été repérés et corrigés
Vérifiez votre page 404 dès maintenant : accédez à votredomaine.com/test-404-check (une URL inexistante), ouvrez les DevTools (F12) → Network, repérez la première requête et regardez son statut. Si elle affiche 200, vous avez une soft 404 et vous devez corriger la configuration du serveur.

FAQ

Réponses aux questions courantes sur la configuration des pages 404, qui reviennent lors des audits comme du développement.

Faut-il ajouter une balise noindex sur la page 404 ?
Non. Une page qui renvoie un HTTP 404 ne sera pas indexée par Google, qu'une balise noindex soit présente ou non. Google ne l'ajoutera tout simplement pas à l'index. Si vous renvoyez un 200 OK avec un noindex, Google peut traiter la page comme indexable un temps avant de se raviser. Le bon code HTTP compte davantage que n'importe quelle balise meta.
Que faire si une page bien classée dans Google renvoie désormais une 404 ?
Google la retirera de l'index de lui-même, généralement entre 1 et 4 semaines après la nouvelle visite de Googlebot sur l'URL. Pour accélérer le retrait, utilisez l'outil de suppression d'URL dans Search Console. S'il existe une page de remplacement proche thématiquement, mettez en place une redirection 301 : elle transmet la popularité et fait remonter plus vite les positions.
Une page 404 peut-elle être belle et aux couleurs de la marque ?
Elle le devrait. Une page 404 personnalisée, avec de la navigation, garde l'internaute sur le site et réduit le taux de rebond. Renvoyer un HTTP 404 dans l'en-tête n'empêche pas la page d'être attrayante visuellement. L'essentiel est de renvoyer le bon code HTTP et de proposer à l'internaute une étape suivante claire.
La page 404 doit-elle être la même pour toutes les URL inexistantes ?
Pour la plupart des sites, oui : une page 404 universelle suffit. Pour le e-commerce, vous pouvez personnaliser la page : détecter, à partir du motif de l'URL, la catégorie d'où vient l'internaute, et afficher des produits pertinents. Cette complexité ne se justifie que lorsque les pages 404 reçoivent un trafic significatif.
Qu'est-ce que le budget de crawl, et comment les 404 le consomment-elles ?
Le budget de crawl est le nombre de pages que Googlebot est prêt à explorer sur votre site sur une période donnée. Si des liens internes pointent vers des URL en 404, le robot revisite ces adresses mortes au lieu d'explorer les pages en ligne. Pour les sites comptant des millions d'URL, c'est critique : supprimez tous les liens internes qui pointent vers des 404.

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it