Comment changer tous les liens internes d'un site ?


Meeuuuhhh
WRInaute passionné
WRInaute passionné
 
Messages: 2046
Inscription: 8 Jan 2007

Comment changer tous les liens internes d'un site ?

Message le Lun Déc 28, 2009 16:53

Bonjour,

J'ai un script à faire qui s'annonce coriace pour mon piètre niveau en PHP.

Voilà, j'ai 800 articles, avec des liens internes entre eux. Je vais changer les URLs de ces articles, donc je dois changer les liens qui s'y trouvent. Ou alors mon référencement va se casser la figure car la redirection 301 fera doublon avec les anciens liens toujours en activité. Et je ne peux pas les changer manuellement (il doit y en avoir plus de 10000)

Donc, pour l'instant, j'ai trois texte comme ça par exemple :
Code: Tout sélectionner
Premier article très intéressant avec un lien vers le <a href="http://www.monsite.com/deuxieme.htm">deuxième</a> et vers le <a href="http://www.monsite.com/troisieme.htm">troisième</a>.


Code: Tout sélectionner
Deuxième article très intéressant avec un lien vers le <a href="http://www.monsite.com/premier.htm">premier</a>


Code: Tout sélectionner
Troisième article super sans lien.


Ensuite, les trois articles devront être comme ça (ça se passe dans l'URL) :

Code: Tout sélectionner
Premier article très intéressant avec un lien vers le <a href="http://www.monsite.com/article.php?record=2">deuxième</a> et vers le <a href="http://www.monsite.com/article.php?record=3"]troisième</a>.

Code: Tout sélectionner
Deuxième article très intéressant avec un lien vers le <a href="http://www.monsite.com/article.php?record=1">premier</a>


Code: Tout sélectionner
Troisième article super sans lien.


Comme vous le voyez, le mot-clef est désormais remplacé par l'ID de l'article (il n'y a plus de réécriture d'URL)

Donc :
1) Trouver chaque lien.
2) Pour chaque lien trouvé, isoler le mot-clef.
3) Allez chercher dans la base de donner l'ID qui correspond au tuple ayant ce mot-clef.
4) Faire le remplacement dans le lien.



Le script me fait peur rien que d'y penser... Si vous avez déjà été confronté au problème, j'espère que vous pourrez m'aider !


Julia41
WRInaute passionné
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

Re: Comment changer tous les liens internes d'un site ?

Message le Lun Déc 28, 2009 18:05

Tu pourrais le faire avec un coup de replace dans mysql. Je pense que c'est la technique la plus propre.
si ton code est stocké en html dans ta base et que tu as bien
Code: Tout sélectionner
<a href="http://www.monsite.com/article.php?record=1">
c'est plutôt facile, je vais te chercher la requete


Julia41
WRInaute passionné
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

Re: Comment changer tous les liens internes d'un site ?

Message le Lun Déc 28, 2009 18:07

si ton champ est "txt" dans la table "content" (fait par contre un backup avant)
tu pourrais tester :
Code: Tout sélectionner
UPDATE content SET txt = REPLACE ('http://www.monsite.com/deuxieme.htm', 'deuxieme.htm', 'article.php?record=2');


Edit si tu as 1000 liens avec 100 ID à éditer, ça passe, sinon tu va devoir y aller un peu plus à la main, ou créer une boucle (mais je ne vois pas comment "boucler" premier, deuxieme, etc..


Meeuuuhhh
WRInaute passionné
WRInaute passionné
 
Messages: 2046
Inscription: 8 Jan 2007

Re: Comment changer tous les liens internes d'un site ?

Message le Lun Déc 28, 2009 18:49

Salut Julia41,

Oui en fait ça me paraissait compliqué mais en l'écrivant tout à l'heure, la solution m'est apparue assez simple.

Je vais chercher pour chaque tuple l'id qui correspond au mot-clef. Je crée le nouveau masque du lien. Ensuite je fais un search-replace pour tous les tuples sur l'ancien mot-clef. Avec une boucle pour faire les 800 tuples d'un coup.

Ca devrait bien fonctionner comme ça à vue de nez.

honolulu
WRInaute impliqué
WRInaute impliqué
 
Messages: 942
Inscription: 8 Nov 2005

Re: Comment changer tous les liens internes d'un site ?

Message le Mar Déc 29, 2009 10:52

sinon dans le fond, la démarche me surprend un peu..

si tu tiens à avoir l'id dans l'url, je trouve plus propre un lien comme

Code: Tout sélectionner
http://www.monsite.com/deuxieme-2.htm


que un lien comme
Code: Tout sélectionner
http://www.monsite.com/article.php?record=2


Meeuuuhhh
WRInaute passionné
WRInaute passionné
 
Messages: 2046
Inscription: 8 Jan 2007

Re: Comment changer tous les liens internes d'un site ?

Message le Mar Déc 29, 2009 14:40

Certes, mais je n'ai pas le choix, je change de script et le nouveau n'accepte pas l'URL-rewriting.

Donc là j'ai pondu un code, mais il ne remplace ou n'update rien. J'ai pas de message d'erreur, tout s'affiche quand je teste. Mais ça ne change rien au final. Donc à mon sens, soit le problème vient du str_replace() soit de la requête update.

Si vous voulez bien y jeter un oeil... merci d'avance.

Code: Tout sélectionner
// On liste tous les articles
$liste=
"SELECT *
FROM
ccs_custom_database_8
ORDER BY field_28
";
$resultat = mysql_query("$liste");
while($R=mysql_fetch_array($resultat))
{
//on récupère l'id et le mot clef de chaque article
$id=$R['primary_id_field'];
$mot_clef=$R['field_28'];
//la chaîne que l'on va devoir remplacer
$lienAncien="http://www.site.com/$mot_clef.htm";

// Maintenant on va faire le remplacement dans les articles, les uns après les autres
$liste2=
"SELECT
primary_id_field,
field_29
FROM
ccs_custom_database_8
WHERE 
field_28='".$mot_clef."'
";
$resultat2 = mysql_query("$liste2");
while($R=mysql_fetch_array($resultat2))
{
$id2=$R['primary_id_field'];//l'id de l'article
$field_29=stripslashes($R['field_29']);//le contenu de l'article
//$lienAncien a été créé lors de la précédente requête
$field_29=str_replace($lienAncien,"http://www.site.com/article.php?record={$id}",$field_29);

//maintenant on update les articles les uns après les autres.
$updater="UPDATE  `ccs_custom_database_8` SET field_29='".$field_29."' WHERE primary_id_field ='".$id2."'";
mysql_query($updater) OR die(mysql_error());

;}
;}


Update pas, ou ne remplace pas la chaîne donc... Je n'exclue pas que la logique du script soit mauvaise, mais je doute que ça viennent de ça.


spout
WRInaute accro
WRInaute accro
 
Messages: 4377
Inscription: 14 Mai 2003

Re: Comment changer tous les liens internes d'un site ?

Message le Mar Déc 29, 2009 15:05

Sans l'URL Rewriting, il y a aussi la solution du path_info pour avoir des URL SEO friendly:
Code: Tout sélectionner
http://www.monsite.com/article.php/2


Meeuuuhhh
WRInaute passionné
WRInaute passionné
 
Messages: 2046
Inscription: 8 Jan 2007

Re: Comment changer tous les liens internes d'un site ?

Message le Mar Déc 29, 2009 15:14

C'est bon à savoir, mais il m'est impossible de toucher quoi que ce soit aux URL en question.

Je veux donc changer tous les liens internes et puis je ferai une redirection 301. Tant pis pour la perte provisoire de référencement, le script en vaut la peine.


Meeuuuhhh
WRInaute passionné
WRInaute passionné
 
Messages: 2046
Inscription: 8 Jan 2007

Re: Comment changer tous les liens internes d'un site ?

Message le Mar Déc 29, 2009 16:03

Après vérifications, c'est la logique du script qui est fausse.


Julia41
WRInaute passionné
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

Re: Comment changer tous les liens internes d'un site ?

Message le Mar Déc 29, 2009 20:40

Meeuuuhhh a écrit:
Code: Tout sélectionner
// On liste tous les articles
$liste=
"SELECT *
FROM
ccs_custom_database_8
ORDER BY field_28
";
$resultat = mysql_query("$liste");

Ca ça pique un peu par contre.
Code: Tout sélectionner
$resultat = mysql_query($liste);


Meeuuuhhh
WRInaute passionné
WRInaute passionné
 
Messages: 2046
Inscription: 8 Jan 2007

Re: Comment changer tous les liens internes d'un site ?

Message le Mar Déc 29, 2009 21:22

Merci pour ta réponse Julia41, en fait j'ai résolu le truc, j'ai viré la boucle, je vais cliquer sur les 800 articles les uns après les autres et faire les update au coup par coup. 800 cliques, en 30 minutes c'est fini, ça ira plus vite que de me creuser la cervelle sur le script.


Julia41
WRInaute passionné
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

Re: Comment changer tous les liens internes d'un site ?

Message le Mar Déc 29, 2009 23:47

Tu es courageux(se?) ;)


Meeuuuhhh
WRInaute passionné
WRInaute passionné
 
Messages: 2046
Inscription: 8 Jan 2007

Re: Comment changer tous les liens internes d'un site ?

Message le Mer Déc 30, 2009 7:22

.eux :)

Comme dit la légion "la sueur remplace le sang", chez nous la technique remplace la sueur. Quand on l'a pas... Faut suer un peu (800 cliques sur la sourie ce n'est pas trop épuisant quand même, c'était jouable et l'opération est réussie)


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :

  • Calcul du taux de backlinks vers pages internes
    Cet outil vous permet de calculer le taux de liens profonds vers un site web. Un lien profond est un lien qui ne pointe pas vers la page d'accueil mais au contraire vers une page interne du site. Les sites dont l'essentiel du référencement vient de leurs inscriptions dans des annuaires ont un taux de liens profonds faible ; à l'inverse, les sites de référence ont souvent un taux de liens profonds plus important, signe que leur contenu a suscité de nombreux liens spontanés.
  • Calcul du nombre de backlinks
    Cet outil vous permet d'analyser en détails la "popularité" de votre site sur Google. En plus du nombre de liens pris en compte par Google, il calcule le pourcentage de liens internes parmi tous les liens, et il affiche les premières URL trouvées.
  • Partenaires pour échanger des liens
    Cet outil vous liste quelques sites qui font des liens vers des sites similaires au vôtre, pour vous aider à trouver des partenaires pour des échanges de liens.
  • Transformer des citations en liens
    Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


cron