formateur informatique

Référencement naturel et redirections Php

Accueil  >  Technique  >  Php  >  Php Avancé  >  Référencement naturel et redirections Php
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux, voici son url absolue :

Pour l'intégrer sur votre site internet ou blog, vous pouvez l'embarquer :

Sujets et formations similaires :


Redirections Http et SEO

Dans les formations Php précédentes, nous avons bâti une application serveur intéressante. Sur la base de critères recoupés par des listes déroulantes, elle produit l'extraction des résultats concordants. Les informations extraites sont bien sûr issues de la base de données MySql. Elle propose de même un système de pagination offrant la possibilité de naviguer au travers de toutes les pages restituées.

Application serveur Php pour extraire tous les résultats des critères recoupés par des listes déroulantes Html



Un clic sur l'une des données extraites conduit vers sa page de descriptif, enrichie dynamiquement par le code Php. Ce dernier exécute une requête SQL exploitant le numéro passé en paramètre de l'URL, dans une clause WHERE. Pour des raisons de référencement naturel, nous avons retravaillé ces adresses pour qu'elles soient explicitement différentes. Pour cela, nous avons exploité les expressions régulières dans un fichier htaccess, afin de créer une règle de réécriture.

Url Rewriting sur page Web Php remplie dynamiquement selon paramètre dans Url

Mais en termes de SEO, un problème persiste. Dans la signature de l'URL, tant que le paramètre numérique est conservé, la page est chargée, quels que soient les termes en préfixe. Si vous supprimez l'un des mots dans la construction de l'Url, le résultat est identique. Dans la durée de vie d'une application Web, ce souci confronte le site internet au Duplicate Content. De nombreuses adresses conduisent vers la même page. Chaque Url mal prélevée ou modifiée sur des sites référents, conduira au même résultat. Google, au travers de ses phases d'indexation, conclura que la page est de mauvaise qualité, car son contenu est dupliqué à de nombreuses reprises. Nous ne devons donc pas autoriser qu'une URL puisse être modifiée.

Sources et présentation de la problématique
Nous devons commencer par récupérer les travaux aboutis lors des formations précédentes. La décompression fournit un certain nombre de fichiers à la racine. Les ressources externes de l'application serveur sont placées dans les sous dossiers. Le fichier index.php correspond à la page Web principale offrant les listes déroulantes articulées entre elles. Le fichier reponse.php renferme le code Php externalisé pour restituer les résultats de l'extraction, par la technologie Ajax. Ainsi, pour des raisons d'ergonomie, la page Web n'est pas complètement rechargée. Le fichier fiche.php est celui qui enrichit dynamiquement la page Web selon l'enregistrement cliqué, depuis les résultats d'extraction. Et c'est le fichier htaccess qui indique au serveur comment se comporter lorsqu'une signature d'Url bien bien spécifique est demandée :

RewriteEngine on

RewriteRule ^idee-([a-z-]+)[-]([0-9]+) fiche.php?ID=$2

ErrorDocument 404 /index.php


La règle est simple. Toute url préfixée du terme idee-, suivi d'une séquence de lettres et de tirets, suivie d'un numéro, doit conduire vers la page fiche.php en lui passant en paramètre le numéro correspondant à la seconde séquence. Vous notez que grâce à cette règle, nous nous débarrassons des extensions de pages (.html, .php...).
  • A la racine du dossier de décompression, cliquer droit sur le fichier reponse.php,
  • Dans le menu contextuel, choisir de l'ouvrir avec un éditeur comme le Notepad++,
...
$requete = 'SELECT liste_num, liste_nom, liste_activite, liste_ville FROM liste_id WHERE liste_dep=''.utf8_decode($le_dep).'' AND liste_ville=''.utf8_decode($la_ville).'' ORDER BY liste_nom LIMIT '.$depart.',10;';
$retours = mysqli_query($liaison2,$requete);
$chaine = ''; $url = '';

include('fonctions/traitement_chaine.php');

while($retour = mysqli_fetch_array($retours))
{
$url = 'idee-'.supprAccents(supprSpeciaux(strtolower($retour['liste_nom'].'-'.$retour['liste_ville']))).'-'.$retour['liste_num'];
$chaine .= '<div style='float:left; width:190px; margin-left:10px; font-size:12px; text-align:left;'><a href=''.$url.'' style='text-decoration:none; color:#666666;'>'.utf8_encode(str_replace('#', ''', $retour['liste_nom'])).'</a></div><div style='float:left; width:130px; font-size:10px; text-align:left;'>'.utf8_encode(str_replace('#', ''', $retour['liste_activite'])).'</div><br/>';
}
...


Ces url sont construites conformément à cette signature, dans une boucle while parcourant tous les enregistrements correspondant à la demande. Pour purger l'adresse des accents et caractères spéciaux, nous exploitons des fonctions Php externes que nous intégrons dans la page, grâce à l'instruction include.

Dans la page appelée nommée fiche.php, nous devons reconstruire exactement la même adresse, en récupérant les informations issues de la base de données MySql, selon le numéro de clé primaire passé en paramètre. Puis, nous devons comparer cette adresse conforme avec celle effectivement appelée. Si les deux ne concordent pas, nous devons produire une redirection vers la bonne Url. De cette manière, nous indiquerons explicitement qu'une seule adresse est reconnue pour cette page. Nous devrons néanmoins fournir des indications importantes au robot d'indexation dans l'entête http. Nous expliquerons ainsi les causes des redirections pour qu'elles ne soient pas considérées comme des fraudes au référencement.

Mais avant cela, le projet doit être référencé dans EasyPhp. Les deux serveurs (Http et Database) doivent être démarrés. La base de données ids doit exister. Elle doit offrir la table liste_id. Elle stocke des idées de sorties rangées par département et par ville notamment.

Base de données MySql des idées de sorties pour projet Php de référencement Web

Il s'agit des données que nous avons consolidées lors des formations précédentes. Si vous ne les possédez pas, vous devez créer la base ids et y importer le fichier id2sorties.sql, situé dans le sous dossier bdd du dossier de décompression.

De même, le compte utilisateur suivant doit être créé afin que Php puisse accéder à ces ressources :
  • Nom d'utilisateur : codePHP,
  • Mot de passe : php123bd,
  • Nom d'hôte : L'adresse locale, ici: 127.0.0.1,


Vérifier l'Url d'une page appelée
Pour tester la validité de l'adresse demandée, nous devons être en mesure de prélever la chaîne de l'URL. C'est l'instruction Php $_SERVER avec le paramètre REQUEST_URI qui renvoie cette donnée. Mais seule l'adresse de la page en cours nous intéresse. Le préfixe qui mentionne le nom de domaine peut être écarté, pour simplifier la comparaison. C'est pourquoi nous allons découper cette chaîne à l'aide de la fonction Php substr que nous avons déjà exploitée.
  • A la racine du dossier de décompression, cliquer droit sur le fichier fiche.php,
  • Dans le menu contextuel, choisir de l'ouvrir avec un éditeur comme le Notepad++,
Nous y retrouvons le code Php questionnant la base de données sur le numéro de la clé primaire passé en paramètre. De fait, il restitue toutes les informations de l'enregistrement correspondant.
  • Juste après l'affectation de la variable $tab_nb, ajouter les lignes Php suivantes :
...
$retours_nb = mysqli_query($liaison, $requete_nb);
$tab_nb = mysqli_fetch_array($retours_nb);

$url_en_cours = substr($_SERVER['REQUEST_URI'], strripos($_SERVER['REQUEST_URI'], '/')+ 1);
echo $url_en_cours;


$le_nom = utf8_encode(str_replace('#', ''', $tab_nb['liste_nom']));
$le_dep = utf8_encode($tab_nb['liste_dep']);
...


La fonction substr permet de découper la chaîne de caractères qui lui est passée en premier paramètre. Nous lui indiquons donc l'url de la page en cours ($_SERVER['REQUEST_URI']). Cette découpe se réalise à partir d'une position spécifiée en second paramètre. Grâce à la fonction Php strripos, nous définissons le point de départ après le dernier slash (/). C'est pourquoi nous ajoutons une unité à la valeur retournée par la fonction. Le troisième argument de la fonction substr est facultatif. Il permet de préciser sur quelle longueur le prélèvement doit se faire. S'il n'est pas spécifié comme ici, les caractères sont prélevés jusqu'à la fin de la chaîne, en partant bien sûr de la position indiquée en deuxième paramètre. Enfin, grâce à la fonction Php echo, nous resituons l'information découpée en lieu et place, à titre de test.
  • Enregistrer les modifications et basculer sur l'interface d'EasyPhp,
  • Cliquer sur le lien du projet pour atteindre sa page d'accueil,
  • Avec la liste déroulante qui se propose, choisir un département, par exemple : 26-Drome,
  • Avec la seconde liste déroulante liée qui apparaît, choisir une ville, par exemple : Valence,
  • Cliquer sur le chiffre 3 de la barre de navigation sous les résultats,
  • Puis, cliquer sur l'idée de sortie : MAISON PIC - Relais et Chateaux Pic,
Nous accédons ainsi à la fiche de l'enregistrement cliqué. L'url est parfaitement réécrite selon les développements aboutis lors de la formation précédente.

Prélever url page Web en Php pour vérifier conformité

Et comme vous le remarquez, tout en haut de la page Web, nous sommes en effet en mesure de récolter la partie utile de l'url en cours. Cette information est précieuse pour pouvoir la comparer avec l'adresse unique qui doit définir cette page.

Et pour effectuer cette comparaison, nous devons reconstruire l'Url de la page, comme nous l'avions fait dans le code du fichier reponse.php, pour créer le lien organique. Souvenez-vous, pour purger la chaîne des accents et caractères spéciaux, nous devons exploiter deux fonctions externes. Elles appartiennent au fichier traitement_chaine.php, situé dans le sous dossier fonctions. Nous devons donc l'intégrer dans la construction du code.
  • Revenir dans le code de la page fiche.php,
  • Compléter le code précédent à l'aide des instructions Php suivantes, mentionnées en gras :
...
$tab_nb = mysqli_fetch_array($retours_nb);

$url_en_cours = substr($_SERVER['REQUEST_URI'], strripos($_SERVER['REQUEST_URI'], '/')+ 1);
include('fonctions/traitement_chaine.php');
$url_ok = 'idee-'.supprAccents(supprSpeciaux(strtolower($tab_nb['liste_nom'].'-'.$tab_nb['liste_ville']))).'-'.$tab_nb['liste_num'];
echo $url_en_cours.'<br />'.$url_ok;


$le_nom = utf8_encode(str_replace('#', ''', $tab_nb['liste_nom']));
...


Tout d'abord, nous exploitons la fonction include pour faire référence au fichier php externe, proposant les deux fonctions de traitement de chaînes. Puis, grâce à elles, nous reconstruisons l'url correcte que nous stockons dans la variable $url_ok. Pour éviter toute erreur, cette affectation peut être copiée depuis la page reponse.php. Il s'agit néanmoins d'adapter le nom du tableau de variables. $retour devient $tab_nb. Nous adaptons enfin l'instruction echo afin de restituer ces deux url l'une sous l'autre, à titre de comparaison temporaire.
  • Enregistrer les modifications et basculer sur la fenêtre du navigateur internet,
  • Rafraîchir la précédente page Web avec la touche F5 du clavier,
Comme vous le constatez, les deux adresses sont restituées l'une sous l'autre. Et elles coïncident.
  • Dans l'Url, supprimer le mot chateaux puis valider la barre d'adresse pour recharger la page,
Adresse de la page Web non conforme car modifiée mais résultats affichés

Les deux adresses ne correspondent plus. Pourtant, la page Web continue de se charger de son contenu comme si de rien n'était. Et c'est bien là que réside le problème. En l'état, une infinité d'Url peut désigner la même page Web. Le risque est grave. Si Google recense plusieurs Url pour une même page Web, il parle de Duplicate Content, soit de contenu dupliqué. En termes de référencement, les rubriques sont discréditées voire Sand boxées. En conclusion, on ne vous trouve pas dans les moteurs de recherche.



Redirection Http en PHP
La solution consiste donc à comparer ces deux Url. Si celle de la barre d'adresse ne correspond pas à l'url validée ($url_ok), alors une redirection doit être réalisée pour afficher la page avec son adresse d'origine.

En Php, une redirection s'effectue grâce à la fonction header. Pour qu'elle fonctionne, elle doit intervenir avant l'entête de la page en cours, soit avant sa construction propre. Notre section de code Php est située au-dessus des déclaratives Html, soit au-dessus de l'entête. Nous pouvons donc y finaliser notre code.
  • Revenir dans le code de la page fiche.php,
  • Remplacer l'instruction echo par les lignes Php suivantes :
...
$tab_nb = mysqli_fetch_array($retours_nb);

$url_en_cours = substr($_SERVER['REQUEST_URI'], strripos($_SERVER['REQUEST_URI'], '/')+1);
include('fonctions/traitement_chaine.php');
$url_ok ='idee-'.supprAccents(supprSpeciaux(strtolower($tab_nb['liste_nom'].'-'.$tab_nb['liste_ville']))).'-'.$tab_nb['liste_num'];
if($url_ok!='' && $url_ok!=$url_en_cours)
{
header('HTTP/1.0 404 Not Found');
header('location:http://127.0.0.1:8080/edsa-seo-http/'.$url_ok);
exit();
}


$le_nom = utf8_encode(str_replace('#', ''', $tab_nb['liste_nom']));
...


Le code Php est relativement simple. Grâce à une instruction conditionnelle, nous vérifions un double critère avant de nous prononcer. Tout d'abord, l'url doit avoir été reconstruite. Elle doit donc exister ($url_ok!=''). En effet, si le numéro de clé primaire passé en paramètre n'existe pas, l'erreur est gérée par le fichier htaccess. En conséquence, les robots d'indexation en sont informés conformément aux règles de l'art. Dans le même temps, nous vérifions que l'url conforme et celle prélevée ne coïncident pas. Dans ce cas, nous exploitons la fonction header à deux reprises. Premièrement nous passons des informations dans l'entête. Elles sont destinées aux robots d'indexation. Une erreur 404 signifie clairement que l'Url demandée n'existe pas. Elle justifie donc la redirection qui suit. Pour cela, en paramètre de la fonction, nous exploitons l'attribut location que nous faisons suivre de l'url originelle reconstruite. Nous n'oublions pas d'exploiter la fonction Php exit pour mettre fin au traitement serveur sur cette page, après la redirection.
  • Enregistrer les modifications et basculer sur la fenêtre du navigateur Internet,
  • Recharger la page Web à l'aide de la touche F5,
Vous constatez que l'url précédemment trafiquée est désormais parfaitement reconstruite. Si vous supprimez certains termes de l'adresse, vous remarquez qu'une redirection est exécutée à validation. Le résultat est désormais le même pour toutes les url appelant cette page fiche.php. Nous venons d'ajouter une sécurité importante en termes de référencement naturel, afin d'éviter le duplicate content et la dégradation des résultats naturels.

 
Sur Facebook
Sur G+
Sur Youtube
Les livres
Contact
Mentions légales



Partager la formation
Partager sur Facebook
Partager sur Google+
Partager sur Twitter
Partager sur LinkedIn