Changement règles réécriture et référencement

WRInaute discret
Bonjour

Je viens de lancer la V2 de mon site (http://www.francomix.com) tournant désormais sous SPIP.
Mes pages articles, rubriques, brèves sont à l'origine sous la forme :

Code:
article.php3?id_article=12
rubrique.php3?id_rubrique=12
breve.php3?id_breve=12

Pour rendre mes url plus lisibles, compréhensibles, et pertinentes pour les MR et les recherches j'ai mis des règles de réécritures dans le htaccess qui permettent de transformer l'url d'un article par ex en :

Code:
article=Saint_ Germain___Tourist=34.html

Ici l'url reprend le titre de l'article et l'id correspondant. Tout fonctionnait parfaitement
Sauf que les stats fournies par mon hébergeur ne prenaient pas en compte ces url et affichaient seulement /article. Pas très précis.
Mon hébergeur m'a dit de supprimer le caractère = et de le remplacer par un -.
Très bien je change les règles de réécriture et les nouvelles url deviennent par ex pour l'article de st germain :

Code:
article-Saint_ Germain___Tourist-34.html

Ok. Sauf que Google étant passé par mon site entretemps à référencé toutes les pages avec les =.
On m'a parlé de la redirection avec header("HTTP/1.0 301 Moved Permanently");

Mais je vois un problème : il faut mettre le script dans une page php et lui dire vers quelle nouvelle page aller.
Google a référencé des pages html. alors déjà ça coince. Ou bien j'ai pas bien compris.

J'avoue ne pas trop voir comment régler le problème du mauvais référencement de Google.

J'attend avec beaucoup d'intérêt vos remarques et aides
Philippe
 
WRInaute impliqué
our le probleme de la redirection, tu ecris une regle qui dis que si il existe le signe = dans l'url, tu fais une redirection 301 en modifiant les = par -
je le dis litterallement, car je ne connais pas la syntaxe de urlrewritting module, mon hebergeur ne l'ayant pas ...
 
WRInaute occasionnel
Voilà :
Code:
RewriteRule ^article=([a-z0-9_]+)=([0-9]+)\.html$ article-$1-$2\.html [NC,R=301,L]
De rien :wink:
 
WRInaute impliqué
Ybet, pas d'accord, le nom d'une page est un critère prédominant dans le positionnement d'une page, je trouve qu'il est mieux de faire comme il dit, cependant je comprend pas trop pour les underscores "_" à tout va qui rallonge péniblement les URL. Un seul entre chaque mot suffit non ?
 
WRInaute discret
Alors

réponse à Mr Arthur : non je n'ai pas déplacé mes pages. Comme dit plus haut je n'ai fait que changer les règles de réécriture du coup elles ont juste changé de noms.

réponse à PyRoFLo :
question je peux ajouter ton script si dans mon htaccess j'ai déjà

Code:
RewriteRule article-([^=]*)-([0-9]+).html$    /article.php3?id_article=$2 [QSA,L]


réponse à rituel
Oui un petit soucis venant du fait qu'il y a un - entre le nom de l'artiste et le titre de l'album
exemple : Saint Germain - Tourist
La règle dit si c'est un - alors tu remplace par _
 
WRInaute occasionnel
Voilà le tout :

Code:
RewriteRule ^article=([a-z0-9_]+)=([0-9]+)\.html$ article-$1-$2\.html [NC,R=301,L]
RewriteRule ^article-([a-z0-9_]+)-([0-9]+)\.html$ article.php3?id_article=$2 [NC,L]
Ok ?
 
WRInaute accro
rituel a dit:
Ybet, pas d'accord, le nom d'une page est un critère prédominant dans le positionnement d'une page, je trouve qu'il est mieux de faire comme il dit, cependant je comprend pas trop pour les underscores "_" à tout va qui rallonge péniblement les URL. Un seul entre chaque mot suffit non ?

Tout à fait d'accord avec toi mais dans son cas toutes les pages vont se retrouver avec l'extension article-Saint_ Germain___Tourist- peut-être un peu beaucoup pour Google

Pour les _, un article d'Oliver donnait le - comme séparateur et pas le _. Je pense que
article-Saint-Germain-Tourist- serait plus intéressant?
 
WRInaute discret
question à PyRoFLo
si dans google je clique sur un lien avec le = et qu'il y a dans le htaccess je que tu as indiqué que va t'il se passer ?

Sinon je vais attendre pour changer le nommage des mes url que le 1er pb soit réglé
 
WRInaute occasionnel
L'URL contenant les "=" sera redirigée en permanance vers l'URL avec les "-" qui correspond à la véritable adresse de ton script.
 
WRInaute occasionnel
Non...c'est le but de la redirection 301 :wink:

Petit à petit, les URLs au tiret remplaceront celles avec le égal.
 
WRInaute discret
Résultats

J'ai mis

Code:
RewriteRule ^article=([a-z0-9_]+)=([0-9]+)\.html$ article-$1-$2\.html [NC,R=301,L] 
RewriteRule ^article-([a-z0-9_]+)-([0-9]+)\.html$ article.php3?id_article=$2 [NC,L]

dans mon htaccess
si je clique sur un article j'ai errreur 404
et si depuis Google je clique sur un lien avec un = idem

Pour te rendre compte : http://www.francomix.com/rubrique-1__Selection_Francomix-2.html

clique sur n'importe quel article dans la zone blanche au milieu

et pour Google
https://www.google.com/search?q=+site:www.francomix.com&hl=en&lr=&start=50&sa=N&filter=0

cherche une url avec article=...
 
WRInaute occasionnel
Arf, pourtant j'ai testé avant de te donner ça...

Si tu es chez OVH, j'ai entendu dire qu'il fallait mettre ceci :

Code:
RewriteRule ^article=([a-z0-9_]+)=([0-9]+)\.html$ /article-$1-$2\.html [NC,R=301,L] 
RewriteRule ^article-([a-z0-9_]+)-([0-9]+)\.html$ /article.php3?id_article=$2 [NC,L]
Pareil ?
 
WRInaute discret
Peut être dois je t'expliquer comment fonctionne la règle de réécriture avec SPIP :

Dans le htaccess j'ai pour article, rubrique, breve :

Code:
RewriteEngine on
RewriteRule article-([^=]*)-([0-9]+).html$    /article.php3?id_article=$2 [QSA,L]
RewriteRule rubrique-([^=]*)-([0-9]+).html$   /rubrique.php3?id_rubrique=$2 [QSA,L]
RewriteRule breve-([^=]*)-([0-9]+).html$      /breve.php3?id_breve=$2 [QSA,L]

et dans un fichier inc-urls-titrehtml.php3 (propre à SPIP) j'ai des fonctions qui permettent d'aller chercher les titres dans la BDD. Ex pour article :

Code:
function generer_url_article($id_article) {
        if (! $id_article) $id_article = 0;        
        $result = spip_query("SELECT id_secteur,titre FROM spip_articles WHERE id_article=$id_article");
        $row = spip_fetch_array($result);
        $id_secteur = $row['id_secteur'];
        $titre = trim($row['titre']);
       $url = "article-".translitteration(nettoyerURL($titre)). "-$id_article.html";
        if ($GLOBALS['recherche']) $url .= "?var_recherche=".urlencode($GLOBALS['recherche']);
        return $url;
}

function nettoyerURL($chaine){
        $chaine = str_replace(" ","_",$chaine);
        $chaine = str_replace("-","_",$chaine);
        $chaine = str_replace(".","_",$chaine);
        $chaine = str_replace("'","_",$chaine);
        return $chaine;
}

Bon je sais c'est pas très clair pour moi, j'avais trouvé ça sur un site qui est down en ce moment :-(
 
WRInaute impliqué
@Ybet : Arf autant pour moi j'avais mal lu, je croyais que c'était un titre d'article qu'il mettait en nom de page et qu'il y aurait donc une diversité importante des noms de pages :oops:
 
WRInaute occasionnel
De retour du stade :lol:

Donc déjà, tu peux simplifier ton .htaccess actuel :

Code:
RewriteEngine on 
RewriteRule ([a-z]+)-([^=]*)-([0-9]+).html$    /$1.php3?id_$1=$3 [QSA,L]
Si tu me dis que ça ne fonctionne pas rrrrrrrrrrr :lol: :wink:

Pour l'instant c'est ok ?
 
WRInaute discret
Ha c'était quoi le match ?

Merci PyRoFLo pour ton coup de main.

Si je comprend bien je remplace mon script par le tien ?
Bon ca a l'air de fonctionner, tu n'auras pas à t'énerver :wink:
Peux tu m'expliquer par contre comment ça fonctionne
D'où il comprend que article va à article.php3 rubrique à rubrique.php3 etc ?
$1 et $3 d'où ca vient ?

Sinon j'ai essayé d'ajouter ton script 301

Code:
RewriteRule ^article-([a-z0-9_]+)-([0-9]+)\.html$ article.php3?id_article=$2 [NC,L]

ca me renvoit sur ma page erreur

L'autre (ovh) renvoit une erreur 404 HTTP 404 non trouvé
 
WRInaute discret
Juste une petite remarque que je viens de remarquer :
Google a aussi référencé mes bonnes url (celles avec les - au lieu des =), du coup j'ai 2 fois plus de pages référencé. Et mes pages sont en double puisque les = sont encore présents :cry:
 
WRInaute occasionnel
OM - Monaco (1 - 1) :wink:

Oui c'est bien ça, si tu as remplacé les 3 ré-écritures par la mienne, et que ça fonctionne, alors c'est bon.

Code:
RewriteRule ([a-z]+)=([^=]*)=([0-9]+)\.html$ /$1-$2-$3\.html [NC,R=301,L] 
RewriteRule ([a-z]+)-([^=]*)-([0-9]+).html$    /$1.php3?id_$1=$3 [QSA,L]

Et maintenant ?

Concernant le fonctionnement, je ne pourrais pas trop t'éclairer, on dira qu'Apache est bien conçu :wink:

Pour tes pages référencées avec le égal, si tu n'en a pas trop ça passera, sinon tu risques un duplicat-content :(

Une fois les 301 mises en place, tout rentrera dans l'ordre.
 
WRInaute occasionnel
Le duplicat-content est le fait d'avoir plusieurs pages ayant le même contenu mais avec une URL différente.

J'ai tendance à tout synthétiser en programmation, ce qui ne veut pas forcément dire que cela diminue le temps de traitement.
Dans ce cas précis, je pense que c'est bénéfique :wink:

Désolé mais je vois pas pour ton problème...bizarre :?

Je mets ton post dans un coin si jamais j'ai une idée :wink:
 
WRInaute discret
Merci beaucoup PyRoFLo pour ton aide
Je vais chercher ailleurs car le duplicat-content ne me plait pas vraiment

Si quelqu'un a une idée...

Philippe
 
WRInaute discret
cher PyRoFLo

les choses avancent
j'ai réussi à rediriger les anciennes url avec les = vers les nouvelles grâce à :

Code:
RewriteRule ([a-z]+)=([^=]*)=([0-9]+)\.html$  /$1-$2-$3\.html [QSA,L]

Ici ce qui est pas encore top c'est que

Code:
article=Charles_Trenet___Le_fou_chantant=89.html

par ex s'affiche dans la barre d'adresse. C'est possible d'afficher la bonne URL avec les - ?

Sinon ça ne fonctionne pas avec :

Code:
RewriteRule ([a-z]+)=([^=]*)=([0-9]+)\.html$  /$1-$2-$3\.html [QSA,R=301,L]

Ca fait erreur 404 avec R=301 :cry:
 
WRInaute discret
Pour info je viens de régler mon pb
R=301 fonctionne avec une URL externe donc pour mon cas :

Code:
RewriteRule ([a-z]+)=([^=]*)=([0-9]+)\.html$  http://www.francomix.com/$1-$2-$3\.html

Merci encore à toi
 
WRInaute occasionnel
Ah bah voilà, tu t'es débrouillé comme un grand :wink:

J'ai été un peu jutse sur ce coup là :oops:

Bonne continuation !
 
Discussions similaires
Haut