Redirection & headers HTTP site e-commerce

WRInaute passionné
Bonjour à tous,

J'ai un site e-commerce et je m'interroge sur les headers HTTP à renvoyer.

Pour les URLs rewritées, je dirige l'ancienne URL vers la nouvelle avec un header et un status 301, ce qui marche bien.
Pour les URLs qui n'existent pas, j'ai mis mon fichier erreur404.php dans le .htacess avec ErrorDocument.
Je redirige également la page d'accueil sans www vers celle avec www (d'ailleurs PageSpeed de Google Chrome me dit de l'enlever, vous en pensez quoi ?)

Ce qui m’intéresse ici ce sont les URLs vers les fiches produits/catégories qui ne sont plus sur le site (produits obsolètes, catégories supprimées, etc). Dans ce cas, ma page affiche "Produit non trouvé etc" mais je souhaiterais mettre en place un header 404 pour que les moteurs les désindexe. J'ai donc mis le code suivant dans un petit test php au tout début de mon fichier :
Code:
 if (produit non trouvé) {
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found", false, 404);
header("Location: http://www.example.com/erreur404.php");
}

J'ai analysé les entêtes avec l'outil de WRI et ça me dit que je renvoie un code 302 avec un status 404 vers ma page d'erreur qui a un code 404 avec un status 404. J'ai cherché et j'ai lu que ce n'était pas très bon donc je voulais savoir comment vous feriez ?

Merci pour vos réponses
 
WRInaute passionné
c'est pas
Code:
header("Location: http://www.example.com/erreur404.php");
qu'il faut mais plutôt
Code:
include('erreur404.php');
 
WRInaute passionné
Non ça ne marche pas, je veux être redirigé vers erreur404.php avec un status 404 et un header 404 (comme quand on tape n'importe quelle adresse qui n'existe pas), comment faites-vous ? Ou alors quel code mettez-vous dans votre fichier 404 ?
 
WRInaute passionné
si tu fais une redirection il faut que le fichier erreur404.php contienne :
Code:
header("Status: 404 Not Found", true, 404);

mais je ne sais pas comment les moteurs de recherche comprennent cela.
 
WRInaute passionné
C'est pas le header de la page 404 qui n'est pas bon, c'est le header que renvoie la mauvaise URL...
 
WRInaute passionné
c'est pas très logique ton histoire. Soit tu fais une redirection 301 vers la page qui remplace soit tu retournes une erreur 404 (voir 410 si la page a été supprimée) mais tu n'es pas censé enchaîner redirection + 404 (ni même redirection + 200).
 
WRInaute passionné
Quand un produit est supprimé, y'a pas de page qui remplace, et je veux afficher ma page d'erreur 404, comme si l'adresse n'avait jamais existé.

Le but c'est que Google désindexe une fiche produit quand le produit n'est plus sur le site, c'est quoi qui n'est pas logique ?
J'ai trouvé un code qui marche :

Code:
if (produit non trouvé) {
header("Status: 404 Not Found", false, 404);
echo file_get_contents("erreur404.php");
exit;
}

Quand je teste l'URL d'un produit qui n'existe pas (id d'article inconnu), j’atterris sur la page 404. J'ai teste les header avec l'outil de wri et ça m'a l'air bon :

Code:
HTTP/1.1 404 Not Found
Date: Wed, 01 Jun 2011 09:59:46 GMT
Server: Apache/2.0.52 (CentOS)
X-Powered-By: PHP/4.3.9
Set-Cookie: osCsid=0f3c8a77903a4f49314e2dcbabaaf4b8; path=/; domain=imprimantes.fr
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: http://www.example.com/--p-99999.html
Status: 404 Not Found
Vary: Accept-Encoding
Content-Type: text/html
 
WRInaute accro
lambi521 a dit:
Quand un produit est supprimé, y'a pas de page qui remplace, et je veux afficher ma page d'erreur 404, comme si l'adresse n'avait jamais existé.
normalement tu devrais renvoyer un code 410, qui indique que l'url a été complètement supprimée
 
WRInaute passionné
Merci pour votre aide, en lisant un topic sur WRI (je ne trouve plus l'URL, je la posterai après), certains membres ont conclus qu'il valait mieux faire une redirection 301 vers la catégorie la plus proche du produit lorsqu'un produit avec disparu. De cette manière, on ne perd pas le "link juice" et on a pas d'erreur 404 ou 410 (car ce sont des erreurs) dans GWT et que c'était plus SEO. J'ai donc mis en place une 301 plutot qu'une 404, ça fonctionne plutôt bien. Qu'en pensez-vous ?
 
WRInaute accro
Sinon tu associes simplement le code erreur 404 à une page par htaccess:
Code:
ErrorDocument 404 /erreur404.php
Comme ça tu évites le Location.
 
WRInaute passionné
c'est pas un problème de réécriture mais si tu appelles un script avec un paramètre ayant une valeur qui n'existe pas en base de données (supprimé ou faute de frappe dans la saisie directe) ca génère un code retour 200. Pour bien faire il faut donc gérer cela en php.
 
Discussions similaires
Haut