Documentos de Académico
Documentos de Profesional
Documentos de Cultura
r - Gilles GREGOIRE
Toute reprsentation ou reproduction, intgrale ou partielle, faite sans le consentement de MICRO APPLICATION est illicite (article L122-4 du code de la proprit intellectuelle). Avertissement aux utilisateurs Cette reprsentation ou reproduction illicite, par quelque procd que ce soit, constituerait une contrefaon sanctionne par les articles L335-2 et suivants du code de la proprit intellectuelle. Le code de la proprit intellectuelle nautorise, aux termes de larticle L122-5, que les reproductions strictement destines lusage priv et non destines lutilisation collective dune part, et dautre part, que les analyses et courtes citations dans un but dexemple et dillustration. Les informations contenues dans cet ouvrage sont donnes titre indicatif et nont aucun caractre exhaustif voire certain. A titre dexemple non limitatif, cet ouvrage peut vous proposer une ou plusieurs adresses de sites Web qui ne seront plus dactualit ou dont le contenu aura chang au moment o vous en prendrez connaissance. Aussi, ces informations ne sauraient engager la responsabilit de lEditeur. La socit MICRO APPLICATION ne pourra tre tenue pour responsable de toute omission, erreur ou lacune qui aurait pu se glisser dans cet ouvrage ainsi que des consquences, quelles quelles soient, qui rsulteraient des informations et indications fournies ainsi que de leur utilisation. Tous les produits cits dans cet ouvrage sont protgs, et les marques dposes par leurs titulaires de droits respectifs. Cet ouvrage nest ni dit, ni produit par le(s) propritaire(s) de(s) programme(s) sur le(s)quel(s) il porte et les marques ne sont utilises qu seule n de dsignation des produits en tant que noms de ces derniers. ISBN : 978-2-300-016134 Couverture ralise par Sbastien Wiegant MICRO APPLICATION 20-22, rue des Petits-Htels 75010 PARIS Tl. : 01 53 34 20 20 Fax : 01 53 34 20 00 Support technique : galement disponible sur www.microapp.com http://www.microapp.com
Retrouvez des informations sur cet ouvrage ! Rendez-vous sur le site Internet de Micro Application www.microapp.com. Dans le module de recherche, sur la page daccueil du site, entrez la rfrence 4 chiffres indique sur le prsent livre. Vous accdez directement sa che produit.
1613
Avant-propos
La collection Webmasters sadresse aux personnes inities au dveloppement de sites web qui souhaitent dcouvrir et mettre en pratique les nouvelles technologies Internet. Sans ngliger les aspects thoriques, nous donnons toujours priorit la pratique an que vous puissiez rapidement tre autonome. travers les diffrents titres de cette collection vous dcouvrirez les technologies qui font le web 2.0 et feront ce que certains nomment dj le web 3.0.
Conventions typographiques
An de faciliter la comprhension des techniques dcrites, nous avons adopt les conventions typographiques suivantes :
j j j j
gras : menu, commande, bote de dialogue, bouton, onglet. italique : zone de texte, liste droulante, case cocher, bouton radio. Police bton : instruction, listing, texte saisir. : dans les scripts, indique un retour la ligne volontaire d aux contraintes de la mise en page.
Il sagit dinformations complmentaires relatives au sujet trait. Propose conseils et trucs pratiques.
Sommaire
1
Optimiser des pages pour Google 18
1.1
Des concepts et termes techniques matriser ........................ Mots, expressions cls, requte, SERP .................................... Google et les landing pages ................................................ Architecture trs simplie dun moteur .................................... Mots-cls et Google writing ................................................. Cookies, sessions et URL ..................................................... Lien et backlinks ................................................................ Premire approche du Page rank .......................................... Structure de site : hirarchiser ............................................... Le rfrencement : un savoir-faire difficile acqurir ................... Codage web2.0 et rseaux sociaux ..................................... Principes du rfrencement et du positionnement naturel ..............
20 20 20 23 24 24 26 27 28 28 29 31
La formule magique du rfrencement .................................. 34 Tricher ou non en rfrencement ......................................... 35 Spamdexing : les diffrentes techniques de triche ...................... 36 Rsum .......................................................................... 40
42
Introduction .................................................................... 44 Codes sources site web exemple du livre ............................ 44 Coder une optimisation de page pour Google ....................... 45 Donnes, mots-cls, rfrencement et mthodologie ................ 47 La structure de page en MySQL ............................................ 48 Rsum et tape suivante .................................................... 54 Rfrencement, positionnement naturel : principes ................. 54 Publication de pages dynamiques ....................................... Prsentation du site publi ................................................... Gnration de pages dynamiques article.php ....................... Initiation rapide HTACCESS .............................................. Lister tous les articles dune rubrique ....................................... Gnration de pages dynamiques zoom.php ........................ 56 58 66 68 72 93
2.5 2.6
2.7
Rsum .......................................................................... 98
Sommaire
100
Introduction .................................................................. 102 Principe dun backlink ..................................................... 102 Principe du Page rank (PR) ............................................... 103 Les critres quantitatifs dun backlink ..................................... 103 Les critres de cohrence dun backlink ................................ 104 Algorithme, nuages de liens et landing pages ...................... 106 Algorithmes : Automatiser les liens dun nuage ........................ 107 La formule "officielle" du Page rank ................................... 110 Piloter la stratgie de rfrencement .................................. 113 Administrer les nuages de liens ........................................... 114 Afficher un nuage de liens : zoom.php ................................. 124 Rsum ........................................................................ 131
132
3.7 4
Pourquoi la gestion de session ? ....................................... 134 Cookies et gestion de session par URL ................................ 134 Les objectifs du codeur/rfrenceur en gestion de session ...... 136 Gestion de sessions en URL rfrences .............................. Session en URL invisible Google ....................................... Code source session invisible Google ................................ Code source de region.php ............................................... 139 139 140 148
4.5
Protger son site des hackers ............................................ 153 .htaccess et contrle daccs ............................................. 153
156
5.1
Web 2.0 et Google ....................................................... 158 Rseaux sociaux et URL de pages ........................................ 158 Contribution des internautes Web 2.0 .................................. 158 Rseau social et rfrencement ......................................... 159 Interactivit Web 2.0 et rfrencement automatis ............... 163 Dtails des algorithmes ..................................................... 164 Rsum ........................................................................ 178
Sommaire
180
6.1
Symptmes et causes. ..................................................... 182 Les pnalits distribues par Google .................................... 182 Les causes dj vues ........................................................ 183 Pages mal positionnes : dautres causes ............................ Les sites concurrents ......................................................... Les backlinks .................................................................. JavaScripts .................................................................... Frame .......................................................................... Les limites des feuilles de style ............................................. Splash Page .................................................................. Une page : une langue .................................................... Spamdexing involontaire .................................................. Dtecter une triche : facile ! ............................................... Optimisations trop agressives ............................................. 184 184 185 185 186 187 189 191 191 191 192
6.2
6.3 6.4 7
Flash et le rfrencement dans Google ............................... 193 SWFobject2 pour indexer du Flash ...................................... 194 Rsum ........................................................................ 195
196
Les rgles du positionnement vont changer .......................... 198 Intrts des rsultats de recherche personnaliss ................... 202 Arrive de Personalized Search Results .............................. 204 Les informations personnelles utilisables ............................. 205 Google affiche des limites ................................................. 205 Rsumons-nous sur Personalized search resultats ...................... 207 Pourquoi Personalized search results ? ............................... Lamlioration des SERP .................................................... Freiner les rfrenceurs ..................................................... La crise conomique ........................................................ Un avantage concurrentiel important .................................... Les limites imposes Google .......................................... Le systme doit sauto duquer ............................................ Ne pas froisser les utilisateurs ............................................. Ne pas planter le service .................................................. 208 208 208 209 209 210 210 212 212
7.5
7.6
7.7
Sommaire
7.8
Rfrenceur 2.0 ............................................................. Mieux comprendre la logique de personnalisation ................... Principes probables de la personnalisation ............................ Web analytics et rfrencement naturel ................................. Programmation et rfrencement naturel ................................ Google writing et rfrencement naturel ................................ bauche dalgorithme : rfrencement et personnalisation .........
7.9 8
Annexe - Webographie
Outils pratiques ............................................................. 234 Pour soumettre une URL ..................................................... 235 Conseils, astuces et dpannages ....................................... 236 Rsultats de recherche personnaliss .................................. 237 Normes et manuels ........................................................ 237 Thorie des graphes ........................................................ 237 URL de codes sources ..................................................... Session invisible pour Google ............................................ Feuille de style ................................................................ Rseaux sociaux ............................................................. 238 238 239 239
241
Index
Introduction
Nanmoins, pour rpondre un maximum de cas, nous aborderons les diffrentes problmatiques une par une, avec les explications exposant le contexte. Dans lexemple de site web, nous traiterons galement des cas classiques de conits entre les intervenants et le codeur/rfrenceur. Le but de ce livre est de vous "apprendre pcher" et non de vous servir des "poissons prts lemploi". Vous aurez adapter le contenu de ce livre vos propres besoins. Dernier point, cet ouvrage est consacr au rfrencement et non aux subtilits de la programmation PHP/MySQL. Charge chaque codeur dadapter ses Framework, mthodes, habitudes, savoir-faire aux exemples de codes sources utiliss. Laccent de ces codes sources est mis sur la lisibilit et non sur la mise en uvre de gnie logiciel ou doptimisation dans la gestion des ressources processeur, mmoire ou disques durs.
systme dexploitation : Linux par exemple ; moteur http, par exemple : Apache ; langage de codage des pages, par exemple XHTML/CSS ; langage de script ct navigateur, JavaScript par exemple ; langage de script ct serveur : PHP5 ; base de donnes relationnelles : MySQL par exemple.
Il existe de nombreux autres logiciels capables de raliser les tches de ces diffrents modules : Microsoft Windows Server, Microsoft IIS, ASP, VBScript, etc. On peut mme coder des sites Internet dynamiques sur des Mainframes IBM.
Logiciels libres
Dans le prsent ouvrage, nous ciblerons le plus grand nombre, ceux qui dveloppent des sites avec des technologies logiciels libres comme Linux, Apache, PHP
10
Introduction
Nanmoins, tous les principes et codes sources voqus dans ce livre avec XHTML/CSS, PHP/MySQL, Apache sont utilisables avec des technologies propritaires comme celles de Microsoft ou dautres.
j j j
Apache vs. IIS ; PHP vs. ASP ou .NET ; MySQL vs. SQL Server.
Microsoft et autres environnements propritaires
Les algorithmes indiqus, les rgles de fonctionnement et de comportement sont valides et aiss transposer du logiciel libre vers le monde Microsoft ou vers dautres environnements propritaires.
11
Introduction
Quand un codeur reoit un cahier des charges pour analyser puis coder un site Internet, ce dernier a dj t analys fonctionnellement puis conu par le marketing et les chefs de projets. Dans lesprit du "client" qui va dployer et proter du trac sur le site, le site devra tre index et bien positionn dans Google ds que possible.
Le rfrencement, dernire tape ?
En gnral, dans lesprit de nombreux acteurs du march, on traite le rfrencement en dernier comme une simple action technique. Rien nest plus faux. Pour amliorer la qualit du rfrencement et diminuer dlais et cots en tout genre, il est fondamental dintgrer le rfrencement dans les problmatiques danalyse et de conception fonctionnelle du site. Le prsent ouvrage aidera le codeur pallier partiellement ce type derreur mthodologique.
Dans lobjectif dune dmarche qualit, le marketing ou le service en charge du dossier doivent tre sensibiliss aux contraintes du rfrencement et la dmarche incluse ds la conception du projet. Rchir au rfrencement et au positionnement dun site en dernire tape est une erreur mthodologique majeure qui nuira au succs de cette tche. Le nombre de mots et expressions cls en franais ou dans dautres langues est forcment limit. Plus il y a de sites web en comptition sur une expression cl donne, plus lobtention dun bon rang, dun bon positionnement dans les SERP de Google devient difficile et exige un travail de qualit. Ce sont les meilleurs qui gagnent. Cest la meilleure quipe qui gagne. Web marketeur, codeur, chef de projet constituent une quipe qui doit tre coordonne pour tre efficiente.
12
Introduction
13
Introduction
Le rfrencement regroupe les actions techniques sur le site. Le positionnement regroupe dune part les actions web marketing, donc aucunement techniques sur le site et dautre part la gestion des tags clouds, des nuages de liens utiliss pour la navigation dans le site ou vers lextrieur, donc une action technique interne au site.
Nous y reviendrons en dtail plus loin. Les actions techniques sur le site ont toutes un point commun : la rptition dactions techniques basiques et lmentaires sans oubli ni erreur. La consquence est vidente : rfrencer techniquement un site est long et fastidieux pour un tre humain. En dautres termes, un rfrencement strictement manuel cotera cher et pourra, malgr tout, contenir des erreurs prjudiciables la qualit et aux performances.
Meilleure qualit et un cot diminu
En automatisant les multiples tches fastidieuses du rfrencement technique au sein du site, on amliorera fortement la qualit du rfrencement et du positionnement tout en diminuant nettement les cots.
Il ny a pas que cet aspect qualit et optimisation des investissements. Un autre aspect stratgique, capable de confrer un avantage comptitif au possesseur du site, intervient dans lautomatisation du rfrencement dun site : piloter et adapter la stratgie de rfrencement depuis une simple table SQL.
Piloter la stratgie de rfrencement depuis une table
Nous verrons dans ce livre quil existe un zone commune toutes les actions techniques de rfrencement : les mots-cls. Il faut les disposer, les baliser, les ancrer, les pointer, les lier, etc. Mais on manipule toujours des mots- cls. Administrer la rpartition des mots-cls sur les pages dun site Internet, depuis une simple table MySQL, simplie et automatise le rfrencement tout en le rendant plus efficace, en travaillant en "temps rel" pour un cot ngligeable. Cela confre un avantage comptitif important.
14
Introduction
les fondamentaux des moteurs de recherche et de Google en particulier ; les problmatiques de rfrencement et autres cadratures de cercles rsoudre ; les multiples piges du rfrencement.
Les premiers chapitres exposeront, en vagues successives, les principes et le pourquoi du rfrencement. On pourra ensuite passer lalgorithmique mettre en uvre plus facilement et illustrer ces approches avec des exemples simples de codes sources en PHP/MySQL/XHTML/CSS.
Un site accessible techniquement sera pris en compte par Google. Autrement, il sera ignor. Coder sans bloquer les bots de Google ou sans dclencher des pnalits iniges par Google suite des erreurs techniques sur le site est un des devoirs du codeur. Un site accessible smantiquement sera "compris" par Google. Le choix des mots-cls et autres rexions web marketing nest pas de son ressort, bien sr. Mais la partie codage pour mettre en uvre efficacement les dcisions web marketing est du ressort du codeur. Le webmestre aura en charge, quant lui, la conception de la mise en page adquate et laissera le codeur lautomatiser. Un site cod de manire pouvoir aisment et efficacement manipuler les bots de Google et les algorithmes dindexation de Google offre plusieurs avantages. Le site web sera davantage ractif aux instructions du traffc manager en charge de booster laudience : en peu de temps, de nouveaux mots-cls sont ajouts, retirs, modis sur la globalit du site tout en prservant la cohrence. Face un tel site, Google ragit positivement via un meilleur positionnement aussi rapide que le permettent les freins internes Google contre une ascension trop rapide dans un index sur un mot-cl prcis. Un codeur, un chef de projet, un webmestre, un traffic manager matrisant les concepts exposs dans les lignes prcdentes aura une bien meilleure employabilit
15
Introduction
sur le march du travail, un meilleur salaire, de meilleur bonus et primes quun codeur ne se proccupant pas de la qualit de son code et de ses mthodes face aux exigences de Google. Un site mal cod gnera le positionnement nal dans lindex de Google ; il aura donc une inuence ngative sur les performances commerciales du site.
Comprendre le pourquoi dun algorithme ou dune approche implique dexposer, de manire dtaille, le fonctionnement de Google vu par un rfrenceur et donc les attentes respecter pour tre "compris" par le moteur et mieux positionn.
j
Le chef de projet identiera les questions et approches mettre en place dans son protocole danalyse fonctionnelle et dans les changes avec le client pour rdiger un cahier des charges prenant en compte, ds le dbut, le rfrencement et le positionnement obtenir pour le site. Le webmestre, dbutant ou conrm, dsireux de hisser les pages de son site Internet sur des mots-cls prcis dans lindex de Google, comprendra mieux les interactions des diffrentes optimisations. Le webmestre pourra planier et raliser de multiples actions techniques plus cohrentes, mieux codes, plus efficaces plutt que de travailler sans comprendre toujours ce quil fait ou en consacrant son temps prcieux des tches rptitives et fastidieuses. Le Traffic Manager dsireux de mieux apprhender Google et le rfrencement naturel comprendra davantage les problmatiques techniques que les codeurs et chefs
16
Introduction
de projets doivent grer. Il pilotera plus efficacement ses budgets et ses campagnes de web marketing tout support. Le codeur informatique ayant en charge de dvelopper ou coder lautomatisation du rfrencement dun site Internet trouvera des explications et des exemples en codes sources.
17
1
1.1 Des concepts et termes techniques matriser ....... 1.2 La formule magique du rfrencement ................ 1.3 Tricher ou non en rfrencement ...................... 1.4 Rsum de ce chapitre ................................. 20 34 35 40
Nous allons aborder les concepts du rfrencement et les illustrer au l des paragraphes puis prciser les parties qui concernent particulirement le codeur. Voici quelques concepts ou dnitions comprendre an de vous permettre de mieux lire et utiliser ce livre.
20
Quelques explications simposent pour que le codeur comprenne ce que lon va attendre de lui. On peut classer les expressions cls dun site en trois grands groupes :
j j j
Stratgiques : elles sont lorigine des "meilleurs" prospects et clients, dun grand pourcentage du trac du site, etc. Importantes : elles contribuent fortement au trac et au "business" du site. Longues tranes : les dclinaisons multiples de ces expressions cls gnrent une longue trane : de multiples petits ruisseaux dinternautes arrivent sur le site via une innit de combinaisons de mots-cls. Et les petits ruisseaux, force dtre assembls, forment des rivires intressantes en volume de trac.
Il ne suffit pas de bien positionner la page daccueil du site sur une expression cl dans lindex de Google. Il faut que linternaute ait envie de cliquer sur le rsum prsent dans la SERP de Google. Et sil clique sur le lien depuis la SERP de Google, il faut quil soit intress par ce quil voit dans la page du site qui saffiche. Autrement, il rebondira en zappant sans mme lire les informations de la page qui lui sont destines.
c Fig. 1.1 : De la SERP Google via le snippet incitatif au clic jusqu la landing page.
Pour amliorer le taux de clics dans la SERP, il faut concevoir la page an de matriser ce que Google affichera. Sil y a trop de mots ou dexpressions cls grer pour une page, cas classique de la page daccueil du site, il sera impossible de raliser correctement ce travail. Il faut donc spcialiser la page sur quelques mots-cls.
21
Une autre raison justie la mise en place dune landing page spcialise sur quelques mots-cls. Linternaute, sduit par le rsum de la page affich dans la SERP de Google, clique et visualise alors la page. Si cette page ne le sduit pas en 2 secondes environ, il rebondit (zapper) hors du site. Il est trs difficile de concevoir une page daccueil capable de sduire des internautes trs divers requtant sur de multiples mots-cls. Il est plus facile de concevoir une telle page si elle est spcialise pour chaque expression cl stratgique. Le rsum de la page affich par Google dans une SERP est compos de 2 parties distinctes :
j j
le title de la page, limit une dizaine de mots ; de un deux extraits de quelques mots, chacun contenant la premire occurrence de chaque mot-cl composant lexpression cl saisie en requte.
Ce rsum est trs important pour le web marketing. Il conditionne le taux de clics sur le rsum de la page pour emmener linternaute intress vers la page elle-mme. Russir caser plus de 5 mots-cls en conservant une lisibilit correcte dans un title limit 10 mots maximum relve de lexploit difficile ritrer sur toutes les pages du site. Il est donc draisonnable de tenter de dpasser cette limite sur les landing pages.
Perfectionner le title et les mots-cls
Linternaute va lire dans la SERP de Google un rsum de la page propose. Ce rsum est compos du title et dun extrait de la page contenant les mots-cls de sa requte. Soigner particulirement cette rdaction dans chaque landing page augmentera le taux de clics depuis les SERP de Google. Celui-ci mesure ces clics vis--vis des mots-cls de la requte. Plus il y a de clics, plus il a tendance hisser la page en positionnement sur ces mots-cls.
Il est concevable, pour un codeur, de crer un backoffce de site Internet en charge dautomatiser la gestion de la partie rptitive de ces problmatiques.
22
Google est composs dalgorithmes, de robots logiciels, lancs squentiellement pour raliser une mission unique jamais nalise : indexer sur leurs mots-cls les pages de tout lInternet techniquement accessible. Ces programmes de Google nont pas la nesse de lesprit humain, ils sont plutt "basiques" mme sils sont capables de traiter un volume norme dinformations. Pour amliorer son rfrencement, il est crucial de se mettre au niveau de ce type de programme et des attentes sous-jacentes.
c Fig. 1.2 : Principe fonctionnel de lindexation.
23
Un bot de Google cartographie tout ce qui est accessible en donnes des pages dun site. Les donnes cartographies sont stockes sur un serveur. Puis dautres programmes Google analysent les donnes cartographies et ils les indexent. Nous verrons plus loin les principes de lindexation pleine page. Une fois les pages de ce site indexes, un algorithme va les positionner parmi les pages dj indexes sur chaque mot-cl de chaque page de ce site.
Lenjeu du rfrencement
Lenjeu du rfrencement puis du positionnement est dinuencer le moteur pour avoir, en haut de lindex, la landing page du mot-cl cibl. Le rle du codeur est fondamental et peut faire la diffrence entre des sites concurrents sur la mme expression cl stratgique.
24
c Fig. 1.3 : URL surcharge de amazon.fr sur le livre Saga Fascination, Tome 4 : Rvlation
Le web marketing est en gnral conscient que dans 10 15 % des cas, un cookie est impossible poser ou grer. Il nest pas able de baser des applications web sur la gestion de cookies, sauf accepter les internautes rtifs aux cookies ou un taux derreur de 10 15 %. Une page HTML possde une seule URL. Et une URL correspond une seule page HTML. Cette notion pour Google dune URL unique pour une page contenu unique a un norme impact sur la publication des contenus dun site et sur la gestion des liens internes dans un site. Le codeur devra grer de multiples conits susceptibles de passer pour du spamdexing auprs de Google.
Un mme article peut appartenir plusieurs thmes
Un exemple parmi dautres, juste pour illustrer le propos : soit un site publiant des articles sur la (bonne) gestion des entreprises. Un article sur les charges sociales de la rmunration dun dirigeant a un contenu prcis mais intressant plusieurs thmatiques : la scalit, les charges sociales, la gestion nancire. On risque donc dans un site de trouver : www.bonne-gestion.fr/fiscalite-entreprise/charges-remuneration-dirigeant.html ; www.bonne-gestion.fr/charges-sociales/charges-remuneration-dirigeant.html ; www.bonne-gestion.fr/gestion-financiere/charges-remuneration-dirigeant.html. Soit, trois URL distinctes pour une mme page. Cest viter. Nous verrons plus loin une technique pour coder en vitant la visibilit par Google de ce type de conit nfaste au bon positionnement dans lindex du moteur.
Une session se caractrise par lajout dans lURL dun ou plusieurs codes permettant de personnaliser les changes avec un internaute prcis ou ayant un prol prcis. Par rapport aux cookies, cette mthode offre lavantage dtre 100 % able. Linconvnient, cest que Google napprcie pas trop. En effet, on trouve de tout dans les URL session : des jetons dauthentication, des codes permettant la logique des scripts PHP de ragir, etc.
25
c Fig. 1.4 : Dans Google, URL amazon.fr sur le mme contenu : livre Saga Fascination, Tome 4 : Rvlation
Au nal, il existe de multiples URL diffrentes pointant vers une seule page physique. Les sessions introduisent donc de massifs duplicate content dans le site. Google a lhabitude et il se contente de plus ou moins bien dsindexer les URL surnumraires. L, le web marketing (le rfrenceur) se heurte un problme que le codeur va devoir rsoudre : "Comment connatre lURL qui va survivre la purge de Google ?". La rponse est importante, car les mots-cls composant une URL participent au rfrencement. Si Google limine lURL en charge de vhiculer des mots-cls et prend en compte une URL truffe de codes de session comme valide, le site perdra en qualit de rfrencement et donc en positionnement.
Lien et backlinks
Les pages HTML dun mme site web ou de diffrents sites sont relies par des liens.
Lien en dur
Quand un lien est directement accessible, cest--dire quil nest pas enfoui dans un codage informatique de type JavaScript, on dit que cest un lien "en dur". Un lien en dur apparat en bas du navigateur quand la souris le survole.
Les liens en dur sont visibles et accessibles par tout type de navigateur, dont ceux conus pour les mal voyants et les priphriques Braille avec voix de synthse associe. Les bots des moteurs de recherche accdent uniquement aux liens en dur. Ils peuvent les suivre pour cartographier les contenus des pages ainsi relies. Les liens enfouis dans des codes informatiques sont invisibles aux bots. Un backlink dsigne un lien en dur entrant sur une page. Ce lien peut tre issu :
26
j j
dune page du mme site web (le nom de domaine est identique pour les deux URL des deux pages interconnectes par ce lien) ; dun autre site.
La nuance entre lien en dur et backlink tient la position do on sexprime. Lorsquon fait rfrence une page et que lon souhaite dsigner les liens en dur pointant vers ladite page et utiliss pour travailler le positionnement dans lindex de Google sur un ou des mots-cls, on parlera de backlinks. Cest plus court, plus concis et plus clair que de parler de liens en gnral. Quand on veut voquer un lien en gnral, donc un lien en dur, cod dans un Flash ou en JavaScript, on emploie la dnomination gnrique de lien.
Le Page rank (acronyme PR) agrge de nombreuses autres informations. Dans un post sur le blog officiel de Google, Matt Cutts, le responsable de lantispam team de Google, rpond une question dun webmestre en indiquant que le Page rank est utilis pour "calculer" qui est lorigine dun texte ; sous entendu, les pages ayant ce mme texte seront considres comme des duplicates content, des copies qui seront ignores par Google.
Le Page rank est trs important
De nombreux posts dans des forums et des blogs dnigrent lintrt du Page rank. Cest une erreur. Le PR sert de levier de nombreuses actions de Google. En avoir augmente potentiellement lefficacit du rfrencement et du positionnement, condition de lutiliser. Il faut lemployer correctement, bien sr.
27
Pour protger son avance, Google ne publie pas de relles informations sur le fonctionnement de ses algorithmes. Les rfrenceurs sont donc obligs de chercher
28
par eux-mmes, ce qui cote cher. Cela incite chacun dentre eux protger la partie "pointue" de son savoir-faire. Do une pnurie dinformations de qualit pour rfrencer et positionner efficacement son site. Les internautes ont fait Google. Seuls ces derniers pourront le dfaire. Moins les concurrents possdent dinformations, moins les rfrenceurs peuvent tenter de polluer lindex de Google en imposant leurs pages au dtriment de pages concurrentes. Il est alors plus facile pour Google de rester en tte et mme daccrotre son avance. Tant que lusage de Google est fortement rpandu parmi les internautes du monde entier, les entreprises souhaitant tre vues sur le Net devront passer par Google, via ses liens sponsoriss AdWords ou/et le rfrencement naturel. Cela reprsente une norme sources de revenus. Google va donc soigneusement protger son succs auprs des internautes en luttant contre toute pollution de son index. La masse des utilisateurs dliss par la qualit des rponses de Google tablit ce moteur comme leader sur le march de la recherche sur le Net. Il nest pas question pour Google de laisser des actions de rfrencement trop agressives polluer son index et compromettre, terme, le succs de son business model.
Le codeur doit comprendre le savoir-faire dun rfrenceur an de mieux apprhender les exigences du rfrencement et leurs impacts sur ses codes PHP, ASP, .NET, etc.
29
c Fig. 1.6 : Page Rank sur digg.com et backlinks sur les pages du site
Une autre approche web2.0 consiste laisser les internautes interagir avec les pages de votre site. Plus il y a dchanges autour de votre page ajout de textes dans le site lui-mme, ractions autour de vos articles , plus le volume dintgration des textes dans la page augmente, "lestant" la page en textes et donc amliorant son positionnement.
c Fig. 1.7 : Sur 750g.com, un commentaire qui renforce le rfrencement de la page : mots clefs et cohrence sont prsents.
30
Les bots de Google cartographient chaque page. Ils peuvent tracer la frquence de mise jour et ainsi, au vu de frquentes mises jour via lajout de posts et autres commentaires, en dduire une signature type dune page web 2.0. Il est indiscutable, tests lappui, que ses algorithmes en tiennent compte et quils favorisent le positionnement de ces pages web 2.0 au dtriment de pages web 1.0.
Installer des fonctions web2.0
Si vos pages ont un contenu justiant des changes avec les internautes, protez-en. Toute page ayant du succs en interactivit avec les internautes se voit octroyer des avantages dus aux backlinks ainsi gnrs et au texte ajout la page : commentaires, avis, notes, etc. Google favorise les pages web2.0 actives et utilises dans son index.
linteractivit de toute page avec des internautes : avis, vote, notes, questions/ rponses, etc. ; la modration des participations crites a priori (validation avant tout affichage) ou a posteriori (retrait ou amendement de la participation crite si elle ne convient pas au webmestre).
Optimiser une page HTML signie mettre en uvre des techniques Internet et rdactionnelles sur une page pour faciliter la comprhension des contenus de cette page par le moteur de recherche. Lobjectif est de le pousser prendre en compte les mots-cls dont le site estime avoir besoin en priorit sur cette page. Quand on dnit que telle page sera la landing page, la page datterrissage sur telle expression cl, il faut tout mettre en uvre pour pousser en avant cette page vers le top5 dans les SERP de Google :
j
31
Optimisation des autres pages pour mettre celle-ci en avant via la technique des nuages de liens. Le principe de cette approche est dcrit un peu plus loin dans le chapitre consacr aux backlinks. Netlinking. Cet aspect web marketing est dtaill dans un autre livre chez MicroApplication : Le Guide complet du rfrencement sur Google. Dans le chapitre consacr aux backlinks du prsent ouvrage, nous effleurerons le sujet an de nous consacrer laspect codage destin faciliter le netlinking et sa variante interne au site, les nuages de liens (tags clouds)
Positionnement dun site Internet
Ce sont les actions extrieures au site lui-mme qui vont hisser les pages dun site dont le rfrencement est correct, vers les premires positions dans une page de rsultats de moteur (une SERP) sur les mots-cls voulus par le webmestre ou le traffic manager.
Sur chaque page de tout site web accessible Google, diffrents critres, que nous dtaillerons plus loin, sont valus par Google. Ils lui permettent de trier dans son index les millions de pages ayant un mot-cl en commun. Ensuite, Google value les backlinks pointant vers chaque page dun site. Cette valuation nalise pour quelques heures le classement dans lindex. Ce classement est rgulirement recalcul. Sauf pour lapplications de pnalits, le fonctionnement de ces algorithmes dvaluation lisse les montes ou descentes de pages au sein de lindex. Russir un positionnement des landing pages de son site dans les SERP de Google exige de raliser un travail squentiel :
j j j
un rfrencement de qualit, cest--dire les travaux doptimisation des pages du site respectant une cohrence vis--vis des mots-cls utiliss ; puis un travail de netlinking interne (nuages de liens) ; enn un netlinking externe vers les landing pages puis un netlinking vers dautres pages.
Contenu et mots-cls
Pour avoir un site positionn en bonne place, il faut que ce dernier dispose de rels contenus : textes, visuels, vido, etc. Ces derniers crent de la valeur ajoute pour linternaute. Les volumes, en nombre de mots par page et en nombre de pages, sont importants. Une fois optimiss, ces pages et ces textes inueront fortement sur le rfrencement du site et sur son positionnement dans lindex du moteur.
32
Le web marketing aura sa charge de slectionner les mots-cls et la rpartition de ceux-ci sur les pages du site.
Clics dans les SERP et positionnement mobile
Le taux de clics sur les pages du site a une inuence sur le positionnement. Plus il y a dinternautes saisissant une requte avec lexpression cl gite questre Normandie, qui cliquent vers une mme landing page, plus cette landing page se hissera vers de meilleures positions sur ces mots-cls composant la requte. Les internautes votent via Google pour une page associe des mots-cls.
Technique. Le robot doit pouvoir accder la page et son contenu. En effet, de nombreux sites ont des JavaScripts et autres gadgets techniques qui bloquent plus ou moins les bots de Google. Smantique. Rendre accessible au moteur les mots et expressions cls retenus lors de ltape prcdente revient optimiser les pages du site. Pour cela, le travail est dcoup en plusieurs tapes : - rpartir les mots-cls et les combinaisons de mots et expressions cls sur les pages du site ; - considrer un maximum de 5 mots-cls par page (nous verrons le pourquoi de cette limitation plus loin) ; - optimiser en consquence chaque page du site autour des mots-cls qui lui sont affects.
Sauf erreur de votre part, le moteur prendra en compte vos 3 5 mots-cls stratgiques pour chaque page. Laccessibilit smantique a ainsi pour objectif dorienter le choix de Google sur vos mots-cls pour chacune des pages de votre site web, les landing pages comme les pages en charge de pousser les landing pages en avant.
33
j j j
la qualit de chaque lien : la qualit de lenvironnement de dpart, le texte du libell du lien et de la page vise par lURL du lien ; le volume des backlinks ; les pages vises : on pourra favoriser certaines pages plutt que dautres et ainsi inuencer le positionnement de certaines pages au dtriment dautres pages ; cest un des intrts de disposer de nombreuses pages hirarchises via des menus.
de nouveaux mots ou expressions cls sont prendre en compte ; de nouvelles pages sont ajoutes, de nouvelles rubriques sont cres ; de nouvelles landing pages sont dnies pour les nouveaux mots et expressions cls.
Il est du ressort du codeur de fournir un site pouvant aisment mettre jour sa stratgie de mots-cls et de pages datterrissage. Nous tudierons cela plus loin.
La prsence dans les diffrents critres de cette page de lexpression cl : title de page, Hn, texte, balises ALT et TITLE dimage, ancres (dpart de liens). La densit de cette prsence pour chaque type de critre. Exemple : on trouve 4 fois lexpression formation web en H1 sur un total de 40 mots. La densit est de 2 fois 4/20, 20 % pour chaque mot-cl composant notre expressions cl formation web. Plus la densit est leve, mieux cest, jusqu atteindre un seuil limite. partir de ce seuil, on risque de passer du cot du spamdexing.
34
Du volume de critres de poids. Une expression cl prsente uniquement en H1 pse davantage pour un bon positionnement que cette mme expression cl prsente uniquement en H2. La prsence du mme mot-cl, en H1 et en H2, sadditionne et elle octroie un bonus de cohrence notre page. Du Page rank de la page. Il fait office de levier sur les mots-cls dposs dans les ancres. Un mot-cl en ancre de lien, elle-mme dans un h1, psera davantage pour le positionnement dans une page PR3 que la mme page en PR1. <h1> <a
href="formationwebmarketing.html"> Formations en web marketing</a></h1>
j j
cumule le levier du H1, de lancre sur les mots-cls formation/web/marketing multipli par le Page rank pour notre page et pour la page vise par lURL du lien. Ces trois mots-cls se partagent la pousse. Du volume de backlinks pointant vers notre page et ayant notre expression cl dans le libell du lien. De la qualit de la page de dpart des backlinks abords prcdemment. La pousse transfre par chaque lien vers les bonnes positions dans lindex sera fonction du Page rank de la page de dpart, du volume de mots dans chaque libell, de la cohrence de ce mot entre la page de dpart et la page darrive. Si formation est prsent dans diffrents critres de la page de dpart et de la page darrive, la cohrence ainsi russie pousse notre page davantage vers les bonnes positions dans lindex de Google. Moins la cohrence est bonne, moins il y a de pousse. partir dun certain seuil, la pousse globale est tout simplement ramene 0.
Google doit sassurer dun index propre pour conserver son public dinternautes. Cest une question de survie et de revenus pour Google. Le moteur a dict de multiples niveaux de pnalits contre les actions de spamdexing pour protger ses intrts.
35
Mais avoir absolument un bon positionnement peut tre une question de survie ou de rentabilit pour lentreprise via son site web. Lentreprise aura tendance lancer des campagnes de netlinking. Celles-ci incluent une forme ou une autre de paidlinks prohibs par Google (chaque paidlink oue lalgorithme de Page rank et lui prend des revenus issus de AdWords).
Comprendre les enjeux du spamdexing
Cest au responsable du projet ou de lentreprise darbitrer et dassumer les dcisions en toute connaissance de cause pour lemploi ou non de techniques de spamdexing.
36
Le cloaking
Le cloaking
Cette technique porte sur des astuces en programmation aboutissant rendre invisible des internautes humains une page visible uniquement par un bot de moteur, et rendre invisible au bot une page destine exclusivement des humains. Les deux pages ont exactement la mme URL. Ce type de triche peut tre facilement vent par Google. Les gains obtenus par la technique de cloaking sont faibles par rapport un site correctement optimis sans triche. Son intrt est nul. On peut trouver dautres approches pour viter le cloaking.
Exemple : un site dautomobiles de luxe allemandes utilise des descriptions de leurs produits avec des mots qui nont aucun rapport avec la relle fonction de lobjet : palace roulant, srnit, ambiance feutre et autres qualicatifs quaucun internaute ne saisit dans une requte concernant le monde automobile. Ce site de voitures luxueuses dcide de la ncessit de disposer de pages et contenus pour les internautes dun ct, et de ces mmes pages (mme URL) avec des contenus optimiss en mots-cls "utiles" pour Google. Principe de fonctionnement : un JavaScript ou un script PHP sur chaque page "bricole" dtecte la provenance de linternaute. Si le visiteur vient dune adresse IP appartenant Google, Yahoo, ou Microsoft, on lui prsente une page optimise "moteur" ; autrement, la mme URL correspond un contenu totalement diffrent orient vers un internaute humain sduire. Il existe de multiples variantes de ces scripts, toutes orientes dans la prsentation de contenus optimiss visibles exclusivement par les bots des moteurs pendant que les mmes URL prsentent dautres contenus aux humains.
37
Le moteur indexe la page optimise, car il a t abus dans un premier temps. Quand linternaute clique sur un lien menant cette page depuis un SERP, il arrive sur un tout autre contenu de cette mme page (il a t dtect comme humain par le script). Une erreur humaine en codage du site peut aboutir au mme rsultat. Un bogue ou un test sur une identication, un cookie par exemple, mne une page ou une autre (mais avec la mme URL). Quelquefois, le site affiche des textes diffrents sur une mme page selon la situation rencontre. Pour Google, cela ressemble une URL unique ayant au moins deux contenus plus ou moins diffrents au mme moment selon le prol de linternaute : un clic ici donne toujours cela, mais ce mme clic avec une conguration de navigateur ou une provenance diffrente donne, sur la mme URL, un contenu diffrent. Si les contenus sont totalement diffrents, cela peut occasionner une interprtation daction polluante, de spamdexing, contre lindex du moteur et une raction de celui-ci sous forme de sanction. Si les carts de contenu sont faibles, Google ignorera le problme. Au codeur de faire en sorte dviter ces situations.
Un moteur de publication
Pour viter les erreurs, nous recommandons dutiliser autant que faire se peut un moteur de publication qui, une fois au point, permet de publier sans risque derreur de programmation des contenus sans duplicate content interne et autres erreurs susceptible de pnaliser le rfrencement du site sur Google. Nous verrons le code source dune version simple dun tel logiciel dans ce livre. Il servira publier les informations de notre site web exemple rfrencer automatiquement.
Duplicate content
Des contenus identiques existant sur diffrentes URL sont du duplicate content.
Une URL, une page unique en contenu
Selon les rgles des moteurs, une page unique (une URL unique) doit correspondre un contenu unique an de ne pas polluer lindex du moteur avec de multiples pages contenus identiques aux URL diffrentes.
38
En fait, cette rgle de Google est plus souple ; il y a de nombreux cas o un petit contenu identique est publi par de nombreuses pages de sites diffrents : synopsis dun lm, communiqus de presse, descriptions de produits vendus par de nombreux sites, nouvelles dactualit, etc. Nanmoins, passs certains seuils en nombre de caractres et quelques autres critres que nous naborderons pas encore, Google peut juger que deux pages possdent des contenus trop proches. Il sanctionne une des deux pages en la dsindexant, partiellement ou totalement selon le volume de duplicate content. Le duplicate content est une erreur trs courante, quil est trs facile de provoquer accidentellement manuellement ou via des erreurs de codage :
j
Un copier-coller maladroit. Exemple : depuis la page du site franais, le webmestre copie colle des donnes vers la page correspondante dans le site belge francophone. Une page trop lgre en contenu unique et parseme de textes/menus/images rpts sur dautres pages du mme site. Par exemple, la page Nos coordonnes contient tous les menus du site et juste une poignes de caractres destins ladresse postale et au numro de tlphone. Une telle page sera probablement value comme ayant trop de duplicate content interne au site ; elle sera donc dsindexe. De multiples sites publient la mme information, vendent le mme produit avec le mme descriptif, etc. Une faute en hbergement : des substitutions alatoires du nom de domaine par un nom gnrique de lhbergeur qui font correspondre pour Google plusieurs URL/ pages ayant exactement le mme contenu. Une erreur de codage en URL rewriting faisant correspondre plusieurs URL distinctes vers la mme page physique. Un bogue dans la gestion informatique des contenus aboutissant avoir des contenus identiques disperss sur plusieurs pages diffrentes. Vos contenus ont t dupliqus par un autre site, volontairement ou non. Des cumuls de plusieurs petites erreurs aboutissent des contenus identiques partiels dans des pages trop lgres en volume de contenu.
j j
39
On vient de voir que les techniques de triche ne possdent aucune efficacit. Elles sont aises dtecter. Les backlinks sont primordiaux et uniques pour obtenir un bon positionnement. Il est tentant dagir via du spam de liens pour obtenir des backlinks. Les rgles distinguant les liens naturels des liens non naturels dictes par Google sont oues, potentiellement contraires la lgislation scale des pays occidentaux dans certaines interprtations, et difficiles bien contrler par le moteur. Cest donc la porte ouverte pour tout site web investir dans de nombreuses formes de campagnes de backlinks (on appelle cela netlinking). Les pages capables dinciter un internaute poser un lien vers elles appartiennent au monde du linkbaiten, technique non rprouve consistant disposer dune qualit de contenu incitant les internautes en parler et poser des liens depuis leurs blogs, posts de forum, etc. Le paidlink, comme lindique son nom, consiste "payer" le poseur de lien et le site hbergeur dudit lien pour avoir un lien en dur. Les paid links, technique de web marketing en positionnement nayant rien voir avec la programmation, sont abords en dtail dans le Guide complet du rfrencement sur Google, paru chez MicroApplication.
dautomatiser les URL ; dviter de gnrer accidentellement du spamdexing ; dviter de publier ou afficher des informations perturbant la logique de Google ; de faciliter un minimum le travail du rfrenceur et du web marketing via un back office simple leur permettant dadministrer les mots-cls du site.
40
Rsum de ce chapitre
utiliser la programmation pour des fonctions web2.0 pour amliorer rfrencement et positionnement ; automatiser les backlinks internes : les tags clouds (nuages de liens).
Ces tches attendant le codeur sont rapides dcrire, mais vous aider leurs mises en place demandera quelques chapitres dans ce livre.
41
2
2.1 Introduction .............................................. 2.2 Codes sources site web exemple du livre ......... 2.3 Coder une optimisation de page pour Google ..... 2.4 Donnes, mots-cls, rfrencement et mthodologie ......................................... 2.5 Rfrencement, positionnement naturel : principes .. 2.6 Publication de pages dynamiques .................... 2.7 Rsum ................................................... 44 44 45 47 54 56 98
2.1 Introduction
Comme pour la construction dune maison, il va falloir commencer par les fondations pour construire le rfrencement naturel dun site web. Les fondations dun site pouvant tre rfrenc sur Google sans aucun frein consiste en un logiciel de publication de pages avec lequel il sera possible de tout faire. En effet, les Joomla et autres logiciels CMS (Content, Management System), sont des logiciels permettant dorganiser puis de publier des pages. Ils prsentent quelques dfauts que nous voulons viter dans notre propre logiciel de publication dont :
j
La libert pour le codeur ou le webmestre doptimiser une page ou ses pages sa totale convenance. On ne fait pas ce que lon veut avec un logiciel de CMS. Par exemple, Joomla 1.5 possde encore quelques solides dfauts nuisibles un rfrencement de trs bonne qualit. La simplicit de mise en uvre de ces optimisations. Il faut un laps de temps non ngligeable pour matriser Joomla 1.5 ou un autre logiciel de CMS. Ne pas pratiquer revient oublier. Les cots de rfrencement sen trouvent augments dautant. La rapidit pour ajouter, modier des contenus. Joomla 1.5 est lent. Le temps pass attendre, la multiplicit des onglets cliquer, ralentissent le rfrenceur. Cela augmente donc le cot du rfrencement.
Le prsent chapitre commence par exposer et expliquer les codes sources dun logiciel simple de publication de pages HTML.
44
Ce site web exemple prsente aux internautes des articles consacrs la cration dentreprises et des ides, des conseils destins aux futurs chefs dentreprise. Le propos de ce site web exemple rfrencer et positionner est donc de publier ce type dinformations. Pour cela, il sappuie sur notre "moteur" de publication trs simple type Drill Down :
j j j j
Affichage dune liste de rsultats, des rsums darticles, sur une recherche par clic, par exemple tous les articles sur la fiscalit dentreprise. Un clic sur un de ces articles affichs lance la page publiant la totalit de larticle. Un article peut appartenir plusieurs thmes, rubriques, ce qui va poser des problmes face Google. On peut afficher les articles propres une rgion de France ou toute la France. L aussi, nous rencontrerons des problmes face Google.
Dans cet exemple, on rencontre donc des cas qui peuvent perturber le rfrencement si on ne code pas en prenant en compte les exigences des moteurs de recherche. En clair, malgr son apparente simplicit, plusieurs piges classiques dans lesquels nombres de codeurs tombent, seront rsoudre sur ce site exemple an de russir son rfrencement puis son positionnement.
Site exemple
Ce site web exemple est destin exclusivement tudier le codage de site rfrencer En aucun cas, les sources de ce site ne sont destines enseigner la programmation en PHP/MySQL. Il existe des auteurs spcialiss sur le sujet. De mme, dans cet exemple, on nutilisera pas de Framework PHP qui aurait alourdi lexemple. Nous ferons simple pour favoriser la pdagogie de nos objectifs : apprendre automatiser au maximum un rfrencement de qualit.
j j j
son title ; le meta description (ce critre nest pas utilis pour le calcul du positionnement daprs une interview de Matt Cutts, mais ce critre est cependant utilis pour un affichage en snippet ). ; les textes entre balises Hn, de h1 h8 ; les mises en exergue ; les textes des ancres de liens ;
45
j j j j j j
les libells des backlinks entrant vers la page ; les textes en balises ALT et TITLE de visuel ; les textes ; les mots composant lURL ; la densit dun mot prcis face aux autres mots-cls ; les libells des ancres de liens quittant la page vers une autre page.
Un mot-cl stratgique se doit dapparatre dans tous ces critres, imprativement. Peut on raliser ce travail manuellement ? Oui, mais nous laissons le lecteur imaginer ce que cela lui coterait en temps sur un volume de quelques centaines ou mme quelques dizaines de pages. Non seulement cest une tche chronophage et fastidieuse, mais en plus, avec la fatigue, les rfrenceurs manuels font des erreurs capables de diminuer le trac. Ce qui est, bien sr, totalement contraire nos objectifs.
c Fig. 2.1 : Toute page dsindexe dtruit le Page Rank qui lui arrive et ne transmet aucun PR vers les autres pages.
46
La premire ide qui vient lesprit en voyant un tel volume de travail est la suivante : "Optimisons juste quelques pages". En effet, cest une premire piste. Mais elle prsente de gros inconvnients. Chaque page peut participer de manire cohrente et synchrone au positionnement des autres pages. En clair, plus il y a de pages rfrences dans un site, plus il est facile de positionner les landing pages. Nous verrons dans un autre chapitre, celui ddi aux backlinks, les raisons techniques.
Inuence sur le positionnement
Le volume de pages HTML correctement rfrences inue sur le positionnement Plus il y a de pages correctement rfrences dans un site, plus il est facile de positionner les landing pages sur leurs mots-cls respectifs dans les SERP de Google. On a donc tout intrt automatiser par des scripts PHP/MySQL le rfrencement de son site an de rfrencer correctement toutes les pages du site.
Il y a de nombreuses informations manipuler. Une base de donnes est ncessaire pour administrer ces donnes et utiliser les bonnes donnes sur la bonne page, au bon moment.
Tous les mots-cls stratgiques de la page sont dans le TITLE de page et les autres mots-cls apparaissent dans les autres critres de la page : Hn, ALT de visuels etc. Partant de l, la logique code en PHP/MySQL exploitera cette rgle. Dans les tables dcrivant les donnes, on prvoit des champs supplmentaires : expression cl n1, expression cl n2, etc. La logique code en PHP exploitera cette rgle pour automatiser le rfrencement de chaque page dynamique du site.
Une rgle xant o sont les mots-cls dune page dynamique dans une table ou une structure est ncessaire. En effet, le codeur va implmenter via des scripts PHP une logique allant chercher des informations stratgiques au rfrencement dans la base de donnes an de les afficher dans les endroits adquats et efficaces de la page afficher automatiquement.
47
Les personnes en charge de rdiger, dimporter les donnes en tables MySQL devront respecter cette rgle, autrement le rfrencement sera rat, voire contreproductif. Nous utiliserons les 2 approches simultanment dans le site an de les illustrer. Il appartiendra ensuite chaque lecteur de choisir ou dinventer la mthode qui convient son site et ses besoins propres.
Dun title de page. Dun meta description. Dun titre H1. Dun petit paragraphe que nous appellerons chapeau. Il sera en charge dafficher un rsum de larticle, un chapeau donc dans le jargon des rdacteurs. Dun grand paragraphe que nous appellerons texte principal. Dune image dote dune balise ALT et dune balise TITLE. Dun gabarit gnral de prsentation : Logo en haut, bandeau graphique de prsentation, dnition des balises de mise en page en feuille de style <p>, <h1>, etc.
On va aller chercher les informations sur les donnes afficher dans des tables MySQL.
Table article
Voici la structure de la table article de notre site exemple rfrencer telle que exporte depuis MySQL :
--- Structure de la table articles -CREATE TABLE articles ( id int(5) NOT NULL auto_increment, titre varchar(255) NOT NULL, url varchar(255) NOT NULL,
48
chapeau text NOT NULL, texte text NOT NULL, date-si date NOT NULL, date-online date NOT NULL, date-obsolete date NOT NULL, contributeur int(5) NOT NULL default 1, source varchar(255) NOT NULL, poids int(11) NOT NULL default 0, region int(5) NOT NULL default 1, title varchar(255) default NULL COMMENT title de la page article zoom, description varchar(255) default NULL COMMENT meta description page zoom, expression_clef varchar(120) NOT NULL, PRIMARY KEY (id), KEY expression_clef (expression_clef) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=409;
Nous y retrouvons nos champs importants et quelques autres utiles pour la logique du site exemple (poids, date-si, etc.)
j j
id : la cl unique de chaque enregistrement de cette table. Classique. titre : le titre de larticle (ne pas confondre avec le title de la page). Il est destin tre affich entre balises H1 si ce titre contient des mots-cls. Titre est destin un
affichage pour les internautes. Il doit tre en ligne, cohrent avec le chapeau et le texte du mme article. url : le nom de cette article, compos de mots-cls imprativement et avec une rgle dcriture pour le contenu du champ : pas de majuscule, remplacement du caractre espace par le caractre tiret (le de la touche 6), pas de caractre accentu. On utilise uniquement les caractres admis dans les URL. Deux possibilits pour obtenir le respect de cette rgle : on fait attention lors de la saisie ou un script parcourt en batch cette colonne et convertit en bons caractres tout ce qui sort de cette rgle. PHP offre de multiples fonctions permettant de manipuler des strings an de les rendre compatibles avec Internet : passer de upper lower case, liminer tout slash antislash, quote et guillemet, etc. Voir les manuels PHP.
URL doit tre unique. Tout caractre non admis conduira cette page en erreur 404. chapeau : rsum de texte. Le texte du chapeau est destin tre affich dans les
pages prsentant des rsums. Ainsi on vite le duplicate content avec la page affichant le texte complet. Si le chapeau tait juste le dbut du texte, on aurait des duplicate contents multiples et prjudiciables au positionnement du site. texte : le texte complet de larticle.
49
j j
j j
mise en ligne, date de retrait automatique. Ces champs sont prsents pour la logique mtier de ce site exemple. Ils noffrent aucun intrt en rfrencement. contributeur, source, poids : Ces champs sont prsents pour la logique mtier de ce site exemple. region : un article peut tre propre une rgion de France ou toute la France. A priori, cela ressemble un champ prsent pour la logique mtier. Oui, mais son existence va poser des problmes de rfrencement quil nous faudra rsoudre. title : title de cette page. Rappel : il doit contenir des mots-cls. La logique de rfrencement va sappuyer sur ce champ. description : meta description de cette page. Un automate peut dupliquer le contenu du title dans ce champ si vous ne disposez pas du temps et des ressources pour le grer dans un premier temps. expression_clef : contient une expression compose de un quelques mots-cls. Cette expression cl doit tre la plus stratgique de cette page. Lors de la conception de la mise en page code en PHP, cette donne pourra servir plusieurs reprises pour optimiser la page face Google.
Table rubrique
La table rubrique liste les rubriques du site :
--- Structure de la table rubrique -CREATE TABLE rubrique ( id int(5) NOT NULL, nom varchar(255) NOT NULL, url varchar(255) NOT NULL, title varchar(255) default NULL COMMENT title de la page article.php, description varchar(255) default NULL COMMENT meta description de la page article.php, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
j j
id : la cl unique de chaque enregistrement de cette table. Classique. nom : le nom de la rubrique. Ce nom pourrait servir gnrer le menu de navigation.
Dans notre exemple, nous nous contenterons dun menu cod main et insr dans un script PHP. Lobjectif de ce livre nest pas un cours sur loptimisation du codage PHP dun site web et sa maintenance de contenu.
50
j j
url : le nom de cette rubrique avec une rgle dcriture pour le contenu du champ : pas de majuscule, remplacement du caractre espace par le caractre tiret (le de la touche 6), pas de caractre accentu. On utilise uniquement les caractres admis dans les URL. Deux possibilits pour obtenir le respect de cette rgle : on fait attention lors de la saisie ou un script parcourt en batch cette colonne et convertit en bons caractres tout ce qui sort de cette rgle. PHP offre de multiples fonctions permettant de manipuler des strings an de les rendre compatibles avec Internet : passer de upper lower case, liminer tout slash, antislash, quote et guillemet, etc. Voir les manuels PHP. URL doit tre unique. Tout caractre non admis entranera une erreur 404 si on utilise ce champ. title : dcrit trs brivement les contenus types des enregistrements de cette table. Ce contenu est utilisable pour construire le title dune page listant des articles dune mme rubrique. description : description plus longue des contenus types des enregistrements de cette table. Ce contenu est utilisable pour construire une meta description dune page listant des articles dune mme rubrique.
Table article_rubrique
Un article peut appartenir plusieurs rubriques. La table article_rubrique liste les couples (id article , id rubrique). Cela va nous entraner dans des duplicate contents si on ne fait pas attention lors du codage :
51
--- Structure de la table article_rubrique -CREATE TABLE article_rubrique ( id_article int(5) NOT NULL, id_rubrique int(5) NOT NULL, primaire tinyint(4) NOT NULL default 0 COMMENT UN : rubrique principale, PRIMARY KEY (id_article,id_rubrique) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
j j j
id_article : lidentiant de larticle. id_rubrique : lidentiant de la rubrique. Le mme article peut appartenir autant
dpend un article. Il existe une seule rubrique primaire par article. Ce champ sera crucial pour les algorithmes en charge : - Dviter les duplicate contents. - De grer les ls de navigation sans erreur. Nous nabordons pas la gestion dun l de navigation dans ce livre. Cest hors sujet et ceci ne prsente aucun intrt en rfrencement.
Table region
La table region liste les codes et rgions de France :
--- Structure de la table region -CREATE TABLE region ( id int(4) NOT NULL auto_increment, nom varchar(255) default NULL, acronyme varchar(255) default NULL, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT=liste des rgions franaises AUTO_INCREMENT=89; --- Contenu de la table region --
52
INSERT INTO region (id, nom, acronyme) VALUES (1, France, France), (2, Alsace, Alsace), (3, Aquitaine, Aquitaine), (4, Auvergne, Auvergne), (5, Basse Normandie, B Normandie), (6, Bourgogne, Bourgogne), (7, Bretagne, Bretagne), (8, Centre, Centre), (9, Champagne-Ardenne, Champagne), (10, Corse, Corse), (11, Dpartements dOutre-Mer, DOM), (12, Franche-Comt, Franche-Comt), (13, Haute-Normandie, H Normandie), (14, Ile-de-France, IdF), (15, Languedoc-Roussillon, Languedoc), (16, Limousin, Limousin), (17, Lorraine, Lorraine), (18, Midi-Pyrnes, Mi-Pyrnes), (19, Nord-Pas-de-Calais, Nord-PdC), (20, Pays de la Loire, Loire), (21, Picardie, Picardie), (22, Poitou-Charentes, Poitou-Ch), (23, Provence-Alpes-Cte-dAzur, PACA), (24, Rhne-Alpes, Rhne-Alpes), (25, Territoires dOutre-Mer, TOM);
id : la cl unique de chaque enregistrement de cette table. Classique. j nom : le nom de la rgion. j acronyme : la version simplie du nom de la rgion.
j
Le title de page contient un descriptif de 10 mots et doit tre compos avec les mots et expressions cls stratgiques affects cette page. Expression_clef contient lexpression cl stratgique de cette page. Cette expression peut tre compose de quelques mots-cls. Elle sera place automatiquement entre balises H1 quelque part sur la page.
53
Ces donnes pourront tre saisies manuellement via PhpMyAdmin ou via une importation CSV vers chaque table.
Optimiser une page HTML signie mettre en uvre des techniques Internet et rdactionnelles sur cette page an den faciliter la comprhension des contenus par le moteur de recherche. Lobjectif est de le pousser prendre en compte les mots-cls dont le site estime avoir besoin en priorit sur cette page. Quand on dnit que telle page sera la landing page, la page datterrissage, sur telle expression cl, il faut tout mettre en uvre pour pousser en avant cette page an de la positionner naturellement vers le top5 dans les SERP de Google :
j j
Optimisation de la page, objet du prsent chapitre. Optimisation des autres pages pour mettre celle-ci en avant via la technique des nuages de liens. Le principe de cette approche est dcrit un peu plus loin dans le chapitre consacr aux backlinks. Netlinking. Cet aspect web marketing est dtaill dans un autre livre, chez MicroApplication : Le guide complet du rfrencement sur Google. Dans le chapitre consacr aux backlinks du prsent ouvrage, nous effleurerons le sujet an de nous consacrer laspect codage destin faciliter le netlinking et sa variante interne au site, les nuages de liens (tags clouds).
54
Sur chaque page de tout site web accessible Google, diffrents critres, que nous dtaillerons plus loin, sont valus par Google. Ils lui permettent de trier dans son index les millions de pages prsentant un mot-cl en commun. Ensuite Google value les backlinks pointant vers chaque page dun site. Cette valuation nalise pour quelques heures le classement dans lindex. Ce classement est rgulirement recalcul. Le fonctionnement des algorithmes lisse les montes ou descentes de pages au sein de lindex. Russir un positionnement des landing pages de son site dans les SERP de Google exige de raliser un travail squentiel :
j
Un rfrencement de qualit, cest--dire les travaux doptimisation de chaque page du site respectant une cohrence vis--vis des mots-cls utiliss et un travail doptimisation globale de toutes les pages entre elles. Ensuite et seulement ensuite, un travail de netlinking interne (nuages de liens) et externe pourra tre mis en uvre.
Contenu et mots-cls
Pour avoir une page de site positionne en bonne place, il faut que les pages de ce site disposent de rels contenus : textes, visuels, vido, etc. crant de la valeur ajoute vis--vis de linternaute lecteur. Les volumes, en nombre de mots par page et en nombre de pages, sont importants pour la qualit du rfrencement. Une fois optimiss, une fois lis ensemble par des nuages de liens, ces pages et ces textes inueront fortement sur le rfrencement naturel du site et sur son positionnement dans lindex du moteur. Le web marketing aura sa charge de slectionner les mots-cls et la rpartition de ceux-ci sur les pages du site.
55
technique : Le robot doit pouvoir accder la page et son contenu. En effet, de nombreux sites ont des JavaScripts et autres gadgets techniques (ash) qui bloquent plus ou moins les bots de Google. smantique : Rendre accessible au moteur les mots et expressions cls retenus lors de ltape prcdente revient optimiser les pages du site. Pour cela, le travail est dcoup en plusieurs tapes : - rpartir les mots-cls et les combinaisons de mots et expressions cls sur les pages du site ; - considrer un maximum de 5 mots-cls par page (nous verrons le pourquoi de cette limitation plus loin) ; - optimiser en consquence chaque page du site autour des mots-cls qui lui sont affects.
Sauf erreur de votre part, le moteur prendra en compte vos 3 5 mots-cls stratgiques pour chaque page. Laccessibilit smantique a ainsi pour objectif dorienter le choix de Google sur votre choix de mots-cls pour chacune des pages de votre site web, les landing pages comme les pages en charge de pousser les landing pages en avant. En cas derreur doptimisation, Google choisira vos mots-cls.
De nouveaux mots ou expressions cls sont prendre en compte. De nouvelles pages sont ajoutes, de nouvelles rubriques sont cres. De nouvelles landing pages sont dnies pour les nouveaux mots et expressions cls.
Il est du ressort du codeur de fournir un site pouvant aisment mettre jour sa stratgie de mots-cls et de pages datterrissage. Nous tudierons cela plus loin.
56
j j
sur clic de linternaute sur un lien en dur (sinon un bot de Google ne pourra pas suivre le lien) ; dans des gabarits daffichage incluant une navigation par menu.
c Fig. 2.3 : Logique du logiciel de publication de contenus rfrenables sur Google en natif.
Ce livre ne porte pas sur la programmation PHP/MySQL du meilleur logiciel de publication du monde. Le code source utilis dans notre exemple a donc t fortement simpli pour permettre au lecteur de mieux apprhender les techniques de rfrencement naturel automatises en PHP dans ce petit logiciel. Par exemple, nous avons, entre autres, supprim de ce logiciel de publication la gestion du l de navigation, nous avons simpli la mise en page au maximum et avons utilis une charte graphique des plus simples. Ces lments napportent rien la comprhension de ce livre et alourdissaient trop les codes sources.
57
La page index.php est code spciquement et part. Elle nest pas affiche par le logiciel de publication. Elle possde un menu, install gauche de la fentre dans un souci de simplicit :
<div id=menu_vertical> <ul> <li class=menutitrered materiel> <a href=index.php>Accueil</a> </li> </ul> <ul> <li class=menutitrered societe title=Filtre des rsultats par rgion> <a href=region.php rel=nofollow> Slection par rgion </a> </li> </ul> <ul> <li class=menutitrered logiciel> <a href=#>Finances - fiscalit</a> </li>
58
<li><span>02 </span> <a href=finances-fiscalite-entreprise-diminuer-deduction-exoneration -impots-taxes/rubrique/2/1.html title=02 - Fiscalit de lentreprise> Fiscalit de lentreprise </a> </li> <li><span>03 </span> <a href=Charges-sociales-diminuer-deduction-exoneration-entreprise/ rubrique/3/1.html title=03 - Social et charges>Social et charges </a> </li> <li><span>05 </span> <a href=Banques-finances-creation-entreprise-expert-comptable comptabilite/rubrique/5/1.html title=05 - Banque finance>Banque et finance</a> </li> <li><span>09 </span> <a href=Tresorerie-gestion-entreprise-comptable-comptabilite-expert/ rubrique/9/1.html title=09 - Trsorerie comptabilit entreprise> Trsorerie comptabilit </a> </li> </ul> <ul> <li class=menutitrered societe> <a href=#>Cration entreprise</a> </li> <li><span>01 </span> <a href=obstacles-a-la-creation-entreprise-societe/rubrique /1/1.html title=01 - Les obstacles>Les obstacles</a> </li> <li><span>13 </span> <a href=Environnement-economique-entreprise-economie-creation entreprises/rubrique/13/1.html>Lenvironnement conomique</a> </li> <li><span>14 </span> <a href=aides-financieres-creation-entreprises/rubrique/14/1 .html>Les aides</a> </li> <li><span>16 </span> <a href=Les-chiffres-economie-creation-reprise-entreprise/ rubrique/16/1.html>Les Chiffres</a> </li>
59
<li><span>18 </span> <a href=Salons-expositions-creation-reprise-entreprises /rubrique/18/1.html>Salons</a> </li> <li><span>19 </span> <a href=Rencontre-createurs-entreprises-idees-echanges-forum -coaching-partage-experience/rubrique/19/1.html>Rencontres</a> </li> </ul> <ul> <li class=menutitrered logiciel> <a href=#>Administratif</a> </li> <li><span>30 </span> <a href=Locaux-bureaux-hebergement-domiciliation-entreprise -societe-loyer-bail-immobilier/rubrique/30/1.html >Locaux Bureaux</a> </li> <li><span>32 </span> <a href=Statut-juridique-risques-entreprise-legal/rubrique /32/1.html>Statuts</a> </li> </ul> <ul> <li class=menutitrered logiciel> <a href=#>Juridique</a> </li> <li><span>34 </span> <a href=Contrat-de-travail-entreprise-salarie-collaborateur -rupture-clause/rubrique/34/1.html >Contrat de travail</a> </li> <li><span>35 </span> <a href=Contrat-commercial-devis-obligations-factures -facturation-reception-travaux-recette-different-vice-cache -garantie-avenant/rubrique/35/1.html >Contrat commercial</a> </li> <li><span>36 </span><a href=Licenciement-salarie-collaborateur-contrat-travail-entreprise /rubrique/36/1.html >Licenciement</a> </li> <li><span>38 </span><a href=Bail-baux-entreprise-commercial-domiciliation-location-bureaux -immobilier-loyer/rubrique/38/1.html >Bail baux commerciaux</a> </li> </ul> <ul> <li class=menutitrered temoignage> <a href=Actualites-agenda-createurs-creation-reprise-entreprises /rubrique/99/1.html>Actualit - Agenda</a>
60
</li> </ul> <ul> <li class=menutitrered societe> <a href=contact-dvv2.php rel=nofollow>Contactez Nous</a> </li> </ul> </div> <!-- fin menu vertical -->
Ce menu est prsent en code source HTML associ une feuille de style. Il est trs simple comprendre.
<div id=menu_vertical> indique le conteneur dcrit en feuille de style. Ce conteneur
61
background-position:left top; font-weight:bold; font-size:16px; text-indent:15px; padding:5px 0 0 0; color:#2C6A93!important; background-color:#FFFFFF; line-height:0.9em } .menutitrered a:hover{ text-decoration:none !important; color:#ffbe33; background-color:#FFFFFF; } .solutions a{ background-image:url(../artpackage/solutions1.gif); background-repeat:no-repeat; } .societe a{ background-image: url(../artpackage/societe1.gif); background-repeat:no-repeat; } .temoignage a{ background-image:url(../artpackage/temoignage1.gif); background-repeat:no-repeat; } .logiciel a{background-image:url(../artpackage/logiciel1.gif); background-repeat:no-repeat; } .materiel a{background-image:url(../artpackage/materiel1.gif); background-repeat:no-repeat; } .services a{background-image:url(../artpackage/services1.gif); background-repeat:no-repeat; } .solutions a:hover { background-image:url(../artpackage/solutions2.gif); background-repeat:no-repeat; color:#ffbe33!important; background-color:#FFFFFF; } .societe a:hover { background-image: url(../artpackage/societe2.gif); background-repeat:no-repeat; color:#ffbe33!important; background-color:#FFFFFF; } .temoignage a:hover {
62
background-image:url(../artpackage/temoignage2.gif); background-repeat:no-repeat; color:#ffbe33!important; background-color:#FFFFFF; } .logiciel a:hover { background-image:url(../artpackage/logiciel2.gif); background-repeat:no-repeat; color:#ffbe33!important; background-color:#FFFFFF; } .materiel a:hover { background-image:url(../artpackage/materiel2.gif); background-repeat:no-repeat; color:#ffbe33!important; background-color:#FFFFFF; } .services a:hover { background-image:url(../artpackage/services2.gif); background-repeat:no-repeat; color:#ffbe33!important; background-color:#FFFFFF; }
Si on clique sur cette entre Accueil, le lien activ est : index.php, la page daccueil. Aucune importance si vous ne comprenez pas ce codage. Vous pourrez le rcrire ou ladapter vos habitudes. Pour information, ce code HTML appelle une classe stocke en feuille de style, menutirered, qui prend un argument, materiel. Il y a alors affichage du pictogramme appel materiel suivi du texte Accueil avec un lien vers index.php. Rien de bien intressant pour le moment.
<li><span>02 </span><a href= finances-fiscalite-entreprise-diminuer-deduction -exoneration-impots- taxes/rubrique/2/1.html title=02 - Fiscalit de lentreprise>Fiscalit de lentreprise</a></li>.
La zone centrale affiche deux conteneurs de texte avec une vignette photo pour chacun.
63
Nous venons de parcourir rapidement la page Index.php. Un clic sur 02 Fiscalit de lentreprise dans le menu, en haut gauche, lance un lien qui affiche une page listant tous les articles ayant un rapport avec la scalit de lentreprise.
c Fig. 2.5 : Page article.php affichant tous les articles dun mme thme.
Cette page affiche, comme la page index.php, un gabarit daffichage, logo+bandeau graphique+menu du haut+une colonne droite, et la liste des articles rpondant ce thme : fiscalit de lentreprise. Ces articles sont affichs 5 par 5. Il y a 4 pages de rsultats. On peut naviguer dans ces pages directement via la barre de navigation avec les numros de pages.
64
On peut avoir le dtail complet dun article en cliquant sur un des deux liens disponibles pour cela dans le titre ou en bas de chaque bloc article Lire tout larticle
index.php est la page daccueil du site. article.php affiche tous les articles dune mme rubrique. zoom.php affiche le contenu dtaill dun article prcis.
65
Existe-t-il une telle page sur le site ? Non. Elle est gnre par le logiciel de publication. Dcomposons, en simpliant, la ralit technique dInternet, an de rester lisible :
j j j
Un lien comme celui-ci est envoy au serveur http. Le serveur http, Apache, compare cette URL au contenu dun chier, .htaccess. Si cette URL rencontre une structure dURL identique dans ce chier, il y a une galit et donc Apache dclenche une rcriture de lURL. Le chier .htaccess contient bien sr lURL mettre la place. Et l, cette URL existe rellement sur le disque du serveur http.
Notre URL est transforme par Apache en article.php suivi des arguments passant ce programme PHP la demande du lien : afficher les 5 premiers rsultats de tous les articles appartenant la rubrique n2, nances et scalit des entreprises. Ce mcanisme, fort pratique en rfrencement, sappelle lURL rewriting ou en franais, rcriture la vole des URL. Nous reviendrons en dtail sur ce mcanisme dans le paragraphe qui lui est ddi dans le prsent chapitre. Toutes les entres du menu font appel ce mcanisme. Nous disposons ainsi de mots-cls pertinents dans lURL alors que la ralit est constitue de lappel au mme script PHP avec des codes passs en arguments lui indiquant quoi faire comme traitement. Depuis la liste de tous les articles dune rubrique, on peut, pour chaque rsum darticle, cliquer sur un lien en haut de paragraphe ou dans le bas de celui-ci. Par exemple, pour
http://localhost/BookN2/V1-00/article/controle-fiscal-exercices -concerne.html&src=Fiscalite-entreprise
http://localhost/BookN2/V1-00/ : reprsente lURL de ma machine de dveloppement sous WAMP. Dans un site en ligne, on obtiendrait quelque chose du genre : http://www.monsite .com/ .
66
/article : simple signalisation. Elle indique ici que ce qui suit est un article prcis. Cest
totalement inutile en codage. Mais cest fort pratique pour travailler son rfrencement, notamment quand on utilise les commandes Google inurl:. Par exemple : Un site possde plusieurs entres majeures : forum, annuaire, et le site lui-mme. La commande suivante, saisie dans Google, liste toutes les pages indexes du site quel que soit le rpertoire o elles se trouvent :
site:www.monsite.com
On aura toutes les pages de lannuaire www.monsite.com/annuaire/xxxx.html, toutes les pages du forum, www.monsite.com/forum/xxxx.html, etc. Si vous dsirez comptabiliser uniquement les pages offrant un seul article, il vous suffira de saisir dans Google :
site:www.monsite.com inurl:article
Vous obtiendrez la liste de tous les articles. Il ny aura pas de mlange des genres avec forum, annuaire et dautres fonctionnalits du site. Cette astuce est pratique quand on dbogue ou quon tudie les ractions de Google. Cela permet aussi dviter des accidents, mme peu probables, comme davoir le nommage de 2 chiers diffrents avec un mme nom :
j
versus
j
buteur. Sans la stricte sparation en 2 rpertoires virtuels diffrents, article et forum, on aurait eu quelques soucis dcrasement de chiers diffrents offrant un mme nom.
/controle-fiscal-exercices-concerne.html : dsigne larticle prcis. &src=Fiscaliteentreprise : & est un caractre de sparation dans les URL. src=
dsigne le nom de la rubrique do cet article a t cliqu. Cela permettra ainsi de calculer un l de navigation reprsentant le rel chemin parcouru par linternaute.
67
68
RewriteEngine on : la rcriture dURL est utiliser si une instruction qui suit celle-ci le
demande.
RewriteRule : cest parti Cela indique une rgle de rcriture dURL. RewriteRule terme1 terme2 : si lURL soumise Apache correspond au terme 1, lURL rcrite du terme 2 est utilise par Apache en lieu et place de lURL soumise.
^ xxxxxx $ : tout ce qui est entre le ^ et le $ est une expression valuer, le terme 1 de
la rgle de rcriture. Si elle est juste, la rcriture dURL sera lance par Apache. Sinon, il passe la ligne suivante traiter dans le chier .htaccess.
([_azAZ09]+) : toute chane de caractres dont chacun de ceux-ci appartient un des
intervalles suivants :
j j j j
de a z minuscule ; de A Z majuscule ; de 0 9 ; soit (le signe moins ou tiret), soit _ (le caractre underscore, soulign).
Lexpression (ce qui est entre crochets [ et ] ) est encadre par une parenthse ouvrante ( et par un plus + suivi dune parenthse fermante +) . Cela indique Apache que la chane de caractres peut avoir nimporte quelle longueur. Si un caractre nappartient aucun de ces intervalles (par exemple le caractre point .), lvaluation de lexpression rgulire est fausse et Apache passe la ligne suivant du chier .htaccess.
^ ([_azAZ09]+)/ : notre expression rgulire dont le comportement est dcrit prcdemment est encadre par un chapeau ^ et par un slash /.
Le chapeau ^ dsigne comme dj indiqu prcdemment, le dbut du terme 1 (tout ce qui est encadr par ^ et $) de notre rewriterule. Le slash dsigne le caractre / utilis pour sparer les rpertoires dans les URL :
www.monsite.com/vins-de-France/champagnes/, etc.
Apache va comparer lURL soumise par tout internaute lors dun clic cette sous-expression rgulire. Est-ce que le dbut de lURL soumise est compose de tout caractre des intervalles [_azAZ09] , peu importe le nombre de caractres (ce que dsigne le + ) et quun caractre slash / marque cette premire partie dURL soumise ? Si oui, Apache continue dvaluer le premier terme de la rgle de rcriture.
69
Revoyons ce premier terme de la rgle de rcriture maintenant que nous avons dtaill une premire expression rgulire :
^([-_a-zA-Z0-9]+)/([-_a-zA-Z0-9]+)/([-_a-zA-Z0-9]+)/([0-9]+).html$
Apache cherche la correspondance entre toute URL soumise et ce terme compos dexpressions rgulires : Toute URL dcoupe par trois / avant un .html, ce qui nous donne quatre tronons composant la totalit de lURL soumise.
c Fig. 2.7 : Une URL en .html dcoupe par trois / compatible avec la condition du .htaccess
Si lURL soumise correspond ces critres, le terme 2 est utilis comme URL en lieu et place de lURL soumise. Examinons le terme 2 de notre rgle de rcriture :
article.php?referencement=$1&$2=$3&page=$4
article.php : le script PHP appel par Apache. Autant la page dsigne dans lURL soumise nexiste pas, autant article.php est prsent dans le rpertoire de notre site Internet gr par Apache. Cest un script PHP, programme informatique qui accepte des arguments en entre, des passages de paramtres essentiels son bon fonctionnement.
referencement=$1 : la variable referencement reoit le premier tronon de notre terme 1. $_GET["referencement"] dans un script PHP nous permettra de rcuprer la valeur de ce
&$2=$3 : $2 a une valeur, disons que ce tronon n2 sur 4 de lURL soumise est
/rubrique/. Apache cre une variable ayant pour nom le texte de notre deuxime tronon dURL. Dans notre exemple, ce sera rubrique. La variable rubrique reoit le troisime tronon de notre terme 1.
70
Exemple complet :
http://www.monsite.com/fiscalite-entreprise-SARL/rubrique/1/1.html : URL soumise Apache.
Le nom de domaine nest jamais concern par une rcriture dURL. on dispose donc de ceci :
fiscalite-entreprise-SARL/rubrique/1/1.html : Il ny a aucun slash / au dbut de cette chane de
caractres.
$1 $2 $3 $4
= = = =
fiscaliteentrepriseSARL rubrique 1 1
Grce lexprience acquise lors de lexamen dtaill de notre premire rgle de rcriture, nous allons pouvoir aller plus vite.
c Fig. 2.8 : Une URL en .html&src= dcoupe par un / compatible avec la 2me condition du .htaccess
71
Si lURL soumise Apache est de la forme chane de caractres1/chane de caractres2.html&src=chane de caractres3, lURL utilise par Apache sera :
Zoom.php?referencement=chane de caractres1&url= chane de caractres2&src=chane de caractres3
Comment on passe dune URL humaine, visible par les internautes dont Google, une autre, inadquate pour le rfrencement mais totalement adapte aux besoins des codeurs de sites web dynamiques via la programmation dans le chier .htaccess. On peut gnrer une variable, dans notre exemple, $2=$3, gnration de la variable rubrique. On peut initialiser cette variable juste cre, ici on linitialise 1, et la faire prendre en compte comme argument pass un script PHP. Ici article .php prendra en compte rubrique=1 et la logique interne de lapplication ragira en consquence en affichant tous les articles dpendant de cette rubrique.
Ce paragraphe ne se veut pas une formation sur .htaccess de Apache et sur la programmation des expressions rgulires. Il existe de nombreux tutoriaux qui dtaillent .htaccess bien plus que ce livre. Lobjectif de ce paragraphe est de vous initier an que vous puissiez comprendre et utiliser notre logiciel de publication de pages 100 % accessible aux bots de Google.
Rappel : monsite.com nest jamais pris en compte dans la rcriture dURL. Quelques contraintes doivent tre prises en compte :
j j
La pagination des rsultats. Dans notre exemple, on affiche les articles cinq par cinq. Les URL gnres par ce script articles;php doivent tre compatibles avec les rgles de rcriture mises en place dans .htaccess, que ce soit pour appeler dautres listes darticles ou faire un zoom sur le dtail dun article prcis.
72
Classiquement, il y a un require sur les diverses bibliothques de fonctions PHP dont on va avoir besoin dans ce script articles.php.
MiseEnPage : les fonctions lies la mise en page. Init : linitialisation des accs aux tables et base de donnes. j Biblio : bibliothque contenant des fonctions diverses et varies que nous allons
j j
j j
instancier une variable une valeur avant de la manipuler avec des tests. Ainsi, en mode Debug, on aura un rfrentiel : lorigine, cette valeur valait "ceci". if (isset($_GET["referencement"])) : Si largument referencement existe et quil contienne une valeur, on le rcupre dans la ligne de code suivante. $referencement = $_GET["referencement"]; : on a la chane de caractres referencement issue de lURL rewriting.
Voyons la suite du code source de article.php. Ce bloc de code a pour objectif de construire la requte SQL qui va rcuprer la liste de tous les articles correspondant au critre de tri indiqu dans le lien. Dans cette maquette de site, nous avons deux possibilits :
rubrique, critre que nous avons dj voqu auparavant ; j region que nous voquerons plus loin.
j
// // // // //
----------------------------------On recupere linformation de tri en parametre Les attributs de tri sont : rubrique, region -----------------------------------
73
// en sortie de cette sequence de if : // on doit avoir $sql qui content la requete construite // pour lister les articles correspondants au(x) critere(s)
if (isset($_GET["rubrique"])) { $parametre = "rubrique"; $valeur = $_GET["rubrique"]; $rubrique = $valeur ; $sql = "SELECT * FROM articles, article_rubrique WHERE article_rubrique.id_rubrique=$valeur AND article_rubrique.id_article=articles.id" . " ORDER BY poids DESC "; // on aura besoin de tout le dtail de la rubrique. $sql_rubrique= "SELECT * FROM rubrique WHERE rubrique.id=$valeur" ; } elseif (isset($_GET["region"])) { $parametre = "region"; $valeur = $_GET["region"]; $sql = "SELECT * FROM articles WHERE $parametre=$valeur"; }
if (isset($_GET["rubrique"])) : si rubrique existe et contient quelque chose : article.php?rubrique=1 correspond positivement ce test conditionnel. j $parametre = "rubrique" : La chane "rubrique" est sauvegarde dans une variable $parametre. j $valeur = $_GET["rubrique"]; $rubrique = $valeur : Le contenu valeur est stock dans les variables $rubrique et $valeur :
j
$sql = "SELECT * FROM articles, article_rubrique WHERE article_rubrique.id_rubrique=$valeur AND article_rubrique.id_article=articles.id" . " ORDER BY poids DESC ";
Dans cette requte $sql, on cherche tous les articles appartenant la rubrique cible.
74
On aura besoin plus loin de toutes les informations sur la rubrique cible par le script article.php.
// on aura besoin de tout le dtail de la rubrique. $sql_rubrique= "SELECT * FROM rubrique WHERE rubrique.id=$valeur" ;
j
75
Si on a les articles dune rubrique afficher, on rcupre toutes les informations sur la rubrique. Cela permet dinitialiser les futurs title et meta description de la page afficher avec les title et description de la rubrique. Cest un dbut quil faudra rviser et amliorer ; il y a trop de dfauts dans cette approche. Si on a les articles dune region afficher, on ne fait rien.
De plus, ce serait trs facile et trs court coder. Ce site offrirait linternaute de multiples manires de recherches darticles. Un vrai plus pour le site, les mme articles. Sans prcaution, un tel site proposerait Google plusieurs fois le mme article sous diffrentes URL : nous aurions alors des duplicate contents. Cela constitue une des erreurs classiques viter en codage web informatique. Google nindexera quune URL avec la possibilit que les mots-cls de cette URL ne soient pas les plus adquats aux besoins en rfrencement du site. Nous verrons un peu plus loin comment grer les N chemins (les N URL) possibles dune page de contenu. Un title de page et un meta description doivent tre uniques pour une efficacit maximale. Uniques, mais leurs mots-cls doivent tre cohrents avec le contenu de la page sous peine de fortes pertes en positionnement. Nous avons mis le title de la rubrique comme title de page. Il est trs court et rptitif avec toutes les pages listant les articles de cette rubrique cinq par cinq. Il faut donc complter et personnaliser ce title de page sous peine davoir des erreurs signales par Google comme des rptitions de title ou de meta description (voir votre interface Web Mastering Tools dans votre compte Google). La mme problmatique se pose pour le meta description :
$title_page = $title_page . ** ; // on separe par ** les donnes agrges.
76
Nous allons agrger des informations venant des articles eux-mmes. Ces informations seront spares par un tiret (-) an de faciliter la mise au point et la dtection dincohrence.
Le snippet Google.
Le snippet Google est le petit descriptif dune URL affich par Google dans une SERP. Dans de nombreux cas, il est prlev par Google dans le meta description ou dans le texte de la page en fonction des mots clefs saisis par linternaute. An de couvrir le cas o linternaute saisit uniquement les mots clefs stratgiques cibls par la page, cas thoriquement le plus courant, il est important, si cest possible, de faire gurer ces mots cls stratgiques dans le meta description an de matriser le rsum affich en snippet.
du title de la rubrique (voir table rubrique) ; de quelques mots pris au dbut de chaque title darticle list dans la page.
Le code source ralise cette opration sur le title et sur le meta description de la page de 5 rsultats afficher via le script article.php :
// FAIRE ce traitement uniquement si on est sur une recherche // par rubrique, sinon on ne fait RIEN
77
// on veut personnaliser la page article en cours // aux ($resultats_par_page = 5) articles affichs. // if (isset($_GET["rubrique"])) { $sql_calcul_meta = $sql ; if ($request = mysql_query($sql)) $nombre_de_resultats = mysql_num_rows($request); else $nombre_de_resultats = 1; // ----------------------// On definit le nombre maximal de resultats afficher / page // ----------------------$resultats_par_page = 5; // ----------------------// On calcule le nombre de pages ncessaires pour // afficher tous les articles de cette rubrique // ----------------------$nombre_de_pages = ceil($nombre_de_resultats / $resultats_par_page); $debut = ($page - 1)*$resultats_par_page; // avec $page et $debut, on positionne la requete SQL // juste sur les 5 articles de la page demande en affichage $sql_calcul_meta .= " LIMIT " . $debut .", " . $resultats_par_page .";"; // on a construit la requete qui va nous permettre // dacceder aux titles / description de chaque // article qui va tre affich // on pourra personnaliser ainsi la page article en cours // aux articles affichs. if ($request = mysql_query($sql_calcul_meta)) { while ($line = mysql_fetch_array($request)) // on recupere chaque title / description de chacun // des 5 articles possibles de la page article.php { $title_page = $title_page . $line["title"] . ** ; // on a nos 1 + jusque 5 title (1 rubrique, 5 article) $meta_description_content = $meta_description_content . $line["description"] . ** ; // on a nos 1 + jusque 5 meta description
78
} // on prend 2 ou + mots par title ; // 4 ou plus par meta description $title_page = meta_article($title_page, "title") ; $meta_description_content = meta_article($meta_description_content , "description") ;} } // du if (isset($_GET["rubrique"]))
Pour des raisons que nous dtaillerons plus loin, il est inutile de faire ce traitement sur des pages autres que les rubriques. Ces raisons sont lies aux approches pour viter les duplicate contents que nous avons voqus prcdemment pour cause daffichage par article.php de mme articles avec diffrentes URL, une par critre de tri. Ce traitement :
j j j
Simule les calculs pour laffichage des articles cinq par cinq en grant la pagination. Calcule les (5) articles afficher dans la page demande. Rcupre des informations sur chacun des 5 articles de la page afficher pour construire un title et un meta description unique et cohrent avec la page.
page de 5 articles avec une rubrique renseigne comme argument pass dans lURL. $sql_calcul_meta = $sql ; pour viter les bogues, prsents ou surtout venir, lors de futures volutions, on spare les 2 requtes mme si elles sont identiques.
{ if ($request = mysql_query($sql)) $nombre_de_resultats = mysql_num_rows($request); on rcupre le nombre darticles
afficher
Else $nombre_de_resultats = 1; pour viter une division par 0 plus loin. $resultats_par_page = 5. Pour tout lexercice et pour diffrentes raisons, on
bloquera cinq (5) cette valeur. Vous pourrez augmenter cette valeur quand, en ayant pratiqu le reste du livre, vous comprendrez limpact majeur, positif ou dsastreux, sur le rfrencement de tout changement de cette valeur. Surtout, ne laugmentez pas. Vous pouvez la diminuer sans crainte en revanche.
$nombre_de_pages = ceil($nombre_de_resultats / $resultats_par_page). On calcule
le nombre de pages ncessaires afficher tous les articles de cette rubrique. Ce calcul nous est utile pour savoir quels seront les 5 articles affichs.
79
$debut = ($page 1)*$resultats_par_page; $sql_calcul_meta .= LIMIT . $debut .", ". $resultats_par_page .";";
Avec $page et $debut, on positionne la requte SQL juste sur les 5 articles de la page demande en affichage.
$page a t initialis avec largument page lors de lappel articles.php. $sql_calcul_meta est concatn avec le calcul SQL permettant dextraire uniquement les
5 articles qui nous intressent : ceux qui seront affichs. Rappel : on limite cinq enregistrements maximum par page affiche. Il peut y en avoir moins, bien sr, soit parce que la rubrique commence se remplir, soit parce que le nombre darticles dune rubrique ne correspond pas un multiples de cinq. La dernire page dune rubrique aura donc de un cinq chapeaux darticles afficher. Ces un cinq enregistrements contiennent pour chacun (voir la table article) de prcieux champs dinformations pour le rfrencement : TITLE et META DESCRIPTION pour notre exemple ce niveau du livre. Nous allons prlever les informations de ces champs pour crer ainsi ce que le rfrencement sur Google exige : un title et un meta description uniques pour chaque page mais cohrents entre eux et avec le contenu de la page (qui affiche les cinq chapeaux issus de notre requte slective, donc obligatoirement une cohrence entre le chapeau dun enregistrement et les informations de chaque paire de title et meta description). La cohrence globale sera donc assure.
Contenu du META DESCRIPTION
Le META DESCRIPTION na officiellement aucune importance dans le positionnement daprs Google et Matt Cutts. Mais il a une norme importance dans le taux de clic depuis la SERP quand il est utilis comme snippet. Une rdaction adroite du META DESCRIPTION permet de favoriser son utilisation par Google comme snippet, typiquement en y regroupant un texte si possible cohrent et lisible avec les mots cls stratgiques de la page. Dans le cas de article.php, nous ciblons des requtes utilisant des combinaisons peu usites de mots cls (un effet longue traine), ce qui fait que la qualit de construction de META DESCRIPTION nest gure importante, contrairement celle de zoom.php.
if ($request = mysql_query($sql_calcul_meta)) si on rcupre de 1 5 enregistrements, on va rcuprer les title et meta description. Sinon, on laisse tel que. Rappel : il y a le title et le meta description de la rubrique en dbut de chacun de ces meta de la page afficher. { while ($line = mysql_fetch_array($request)) : on rcupre chaque title et chaque
80
{ $title_page = $title_page . $line["title"] . **. On concatne title_page avec les 1 5 titles de page. Chaque ajout est spar par la squence ** qui sert de dlimiteur obligatoire. $meta_description_content = $meta_description_content . $line["description"] . ** ; mme chose pour le meta description. }
Dans $title_page nous avons le title de la rubrique et les 1 5 title de pages de nos 1 5 enregistrements possibles. Le meta description a t trait de la mme manire. Cest beaucoup trop long. Nous avons trop de mots dans le title. En effet en concatnant les mots de chaque title on obtient un title compos de dizaines de mots. Il faut rduire le nombre de mots. Pour faire simple ce niveau du livre, nous allons simplement conserver uniquement les premiers mots de chaque title de page. Cest lobjectif des 2 lignes de codes suivantes :
$title_page = meta_article($title_page, "title") ; // on prend 2 ou + mots par title ; 4 ou plus par meta description $meta_description_content = meta_article($meta_description_content , "description") ; } } accolade fermante du if (isset($_GET["rubrique"])) de la squence de code tudie.
81
break; case 3: $pas=4; break; case 4: $pas=3; break; case 5: $pas=3; break; case 6: $pas=2; break; } if ($type == "description" ) $pas = $pas * 2 ; // 2 fois plus de mots pour meta descrip while ($long > 0) // tant quon est pas au bout de la chaine { // on recupere le premier bloc de mots jusque ** $i = stripos($page , "**") ; // on le copie dans $textfull du car n0 au $i me $textfull = substr($page, 0, $i); // on enlve le text dj trait, $page = substr_replace($page, , 0, $i+2) ; // on ajoute 2 pour eliminer les 2 * devenus inutiles $long = $long - ($i+2) ; $tab = str_word_count($textfull,1,0123456789&;%_); for ($a = 0;$a<$pas;$a++) // on prend les $pas premiers mots { $meta = $meta . . $tab[$a] ; // on les concatne } } return ($meta) ; // le meta, title ou description, // est la bonne taille en nombre de mots }
$page contient une string : ce stade du livre, cest soit un title de page, soit un meta description. $type indique le type de meta traiter : title (donc limite de mots 10/12) ou meta
description, le double de mots par rapport title). Par convention, cette fonction php4 meta_article() stocke dans /php_inc/ biblio_inc .php exige :
82
title ou meta_description de chaque enregistrement de la table article et de la table rubrique doivent avoir les 3 mots-cls les plus stratgiques en dbut de string. j Les diffrentes concatnations doivent tre spares par le substring ** pour permettre le bon fonctionnement de la fonction meta_article().
j
Nous avons ajout de 1 6 champs issus des tables rubrique et article dans $page. chaque ajout correspond un ajout de ** comme dlimiteur. Nous comptons le nombre dajouts. Le meta nal ne doit pas dpasser 10 12 mots pour un title et 20 24 mots environ pour un meta description. La fonction renvoie un title ou un meta description de la bonne taille. Il sera affich dans la page issue de articple.php.
$meta = ; $long = strlen($page) ; $nb_articles = mb_substr_count($page, "**") ; // 1 ** par title. 6, le maximum, correspond // un title rubrique + 5 enregistrements de la table article.
La fonction mb_substr_count($page, "**") renvoie le nombre doccurrences de ** dans la string $page. Nous avons donc le nombre dajouts issus des tables rubrique ou article : de 1 6.
switch ($nb_articles) {
La fonction switch nous permet dinitialiser $pas la valeur la plus adquate pour avoir un maximum de 10/12 mots pour un title de page.
if ($type == "description" ) $pas = $pas * 2 ;
Pour un meta de type description, on double la valeur du pas pour avoir un maximum de 20 24 mots. Le reste du code de cette fonction est simple :
j j j j
extrait chaque ajout, une substring donc, dlimit par **. limine les ** devenus inutiles. range les mots de cette substring dans un tableau. transfre et on concatne les $pas premiers mots de ce tableau dans la string $meta.
On On On On
83
On renvoie le rsultat qui sera de 10 12 mots pour une balise TITLE de page et de 20 24 mots pour une meta description de page.
Cette partie du code source de article.php que nous venons de voir, prparait le travail daffichage. Passons laffichage de notre page :
MiseEnPage::haut($title_page,$meta_description_content,$rep); ?> <div id="sousban"> </div> <div id="pagegauchetete"> <?php MiseEnPage::MenuGauche() ; ?> </div> <!-- fin conteneur : page gauche tete --> <!-- conteneur centre et col. droite --> <div id="pagecentretete"> <div id="pagedroite"> <!-- COLONNE DROITE --> <?php MiseEnPage::MenuDroite($rubrique) ; ?> </div> <!-- fin page droite -->
Pour Title, la lisibilit humaine ne doit en aucun cas tre altre. Il faut tre conscient que les pages affiches par article.php ne sont pas appropries pour tres des landing pages mais plutt pour tre des pages captant des combinaisons de mots-cls peu usites.
La fonction PHP5 haut() de la classe MiseEnPage (dans php_inc/MiseEnPage.inc.php) affiche la partie haute de notre gabarit de page : logo, bannire, title de page, meta description, etc.
84
La mise en page gauche puis centrale et droite est gre par les fonctions MenuGauche() et MenuDroite() via les conteneurs pagegauchetete, pagecentretete et pagedroite dcrits en feuille de style. Cest du XHTML de base sur lequel nous ne passerons pas plus de temps.
MenuGauche() affiche le menu de gauche de notre site web exemple. Chaque lien possde une URL conforme notre rgle de rcriture (voir .htaccess dans le prsent chapitre).
Pour rappel :
<li><span>02 </span> <a href=finances-fiscalite-entreprise-diminuer-deduction -exoneration- impots-taxes/rubrique/2/1.html title=02 - Fiscalit de lentreprise> Fiscalit de lentreprise </a> </li>
nances-scalite-entreprise-diminuer-deduction-exoneration-impots-taxes/rubrique/2/1 .html Le premier tronon de notre URL ne sert quau rfrencement. Il na aucun impact sur la logique applicative de notre logiciel de publication. Sa seule mission est de pousser les mots-cls de sa rubrique vers Google. Le menu et les liens ainsi dposs, manuellement dans une fonction PHP5, vont surprendre nombre de codeurs avertis qui se demanderont "pourquoi une approche technique aussi basique". Cest volontaire. En effet, ajouter au prsent ouvrage une fonction qui prend un champ dans la table rubrique et gnre directement un menu sans intervention manuelle par un codeur laurait alourdit inutilement. De telles types doptimisations strictement PHP ne sont pas dans lobjectif de ce livre. On fait donc simple, rudimentaire et clair dans ce site web exemple an de rester concentr sur la partie rfrencement. /rubrique/2/1.html. Comme dj discut, cette URL demande laffichage de la page 1 des rsultats de la rubrique n2 via lURL rewriting qui va transformer cette partie de lURL en paramtres passs au script PHP. Ci-aprs, une squence que nous avons dj vue : la pagination des rsultats. Ici, on ne se contente pas de la simuler pour savoir quelles informations prendre an de personnaliser les title et meta description de la page. On pagine pour de vrai :
85
<?php if ($request = mysql_query($sql)) $nombre_de_resultats = mysql_num_rows($request); else $nombre_de_resultats = 1; // ----------------------// On definit le nombre maximal de resultats // afficher par page // ----------------------$resultats_par_page = 5; // ----------------------// On calcule le nombre de pages // ----------------------$nombre_de_pages=ceil($nombre_de_resultats/$resultats_par_page); $debut = ($page - 1)*$resultats_par_page; $sql .= " LIMIT ". $debut .", ". $resultats_par_page .";"; if ($request = mysql_query($sql))
$request contient les enregistrements de la table article dont il faut afficher les chapeaux dans la page :
{ echo <div id="pagetext">; // on affiche la liste des numros de page // au dessus du futur affichage des 5 / 5 resultats echo "<b>Page</b> : "; for ($i=1 ; $i<=$nombre_de_pages ; $i++) { echo ( ($i==$page) ? "<b>" : ""); echo " <a href=\"".$referencement ."/".$parametre."/".$valeur ."/".$i.".html\">"; echo $i; echo "</a> "; echo ( ($i==$page) ? "</b>" : ""); } if ($nombre_de_pages==0) echo "<em>aucun rsultat</em>"; echo "<br />";
On affiche la gestion des pages en premier sous la forme dune ligne de nombres cliquables, de 1 n.
86
Si le nombre de page est de 0, aucun rsultat ne correspond cette demande (rubrique vide).
c Fig. 2.10 : Ce chapeau darticle dpend de cette 1re URL / rubrique primaire.
Nous allons devoir grer notre premier un chapeau dun article appartenant distinctes contenant un mme article. laisserons accessible au bot de Google
problme de duplicate content. Si nous affichons plusieurs rubriques, nous aurons plusieurs URL Il faut donc slectionner le seul lien que nous pour liminer ce risque.
c Fig. 2.11 : Ce chapeau darticle dpend galement de cette seconde URL / rubrique secondaire.
87
Un article appartient principalement une seule rubrique que nous appellerons primaire. Les autres rubriques auxquelles un article peut appartenir seront appeles secondaires. Seuls les liens vers des articles dpendant de manire primaire de la rubrique en affichage via article.php doivent tre accessibles Google. Ces informations de dpendance sont gres dans la table article_rubrique. Un article a une seule rubrique primaire. Les autres liens seront rendus invisibles Google via la balise rel="nofollow" . Ainsi le codeur remplit sa mission : une seule URL pour un seul contenu, avec une URL slectionne par la logique applicative du logiciel, donc la plus adquate notre rfrencement :
if (isset($_GET["rubrique"])) { // affichage des 1 5 rows du rsultat de la requte while ($line = mysql_fetch_array($request)) { // on veut savoir si larticle afficher // est dans sa rubrique primaire ou non // sql_ps : Primaire ou Secondaire ? $id_art = $line["id"] ; $sql_ps = "select * from article_rubrique WHERE article_rubrique.id_article = $id_art AND article_rubrique.id_rubrique=$valeur "; // on recupre la seule ligne o cet article // est dans la rubrique ($valeur) afficher if ($request_ps = mysql_query($sql_ps)) { if ($line_ps = mysql_fetch_array($request_ps) ) { if ($line_ps["primaire"] == 1) { $ps = "rubrique_primaire" ; } else { $ps = "rubrique_secondaire" ; } } else { echo Debug : ERREUR : ; } } // fin du module detectant si larticle appartient ou non // sa rubrique principale
88
Pour chaque enregistrement de la table article, on veut savoir si la rubrique en cours est primaire ou secondaire.
$ps contient le statut de larticle en cours de traitement. Il est dans sa rubrique primaire
ou non.
preview_article($line,$line_rubrique["nom"],$valeur, $ps);
La fonction PHP4 preview_article est stocke dans php_inc/ biblio_inc.php. Cette fonction a en charge laffichage de larticle en mode Preview, cest--dire affichage dun minimum dinformations permettant linternaute de savoir sil dsire lire le dtail ou non de cet article : chapeau, titre, n de rubrique.
89
. ">. $line["titre"] .</a> </div> <div class="bordureparagraphe3"> <h2>. $line["chapeau"] .</h2> ; $sentence = cut_sentence($line["texte"],50) ; // on joue avec le feu ! 50 car. = zone rouge // // il faut eviter davoir un debut de code HTML // coup en plein milieu => risque affichage erratique sinon. // donc sil y a des <div> <table>, // il ne faut pas afficher lextrait du texte mais que le chapeau if (html_dans_string($sentence) ) echo ... ; else echo $sentence . ... ; echo </div> <div class="tavoirplus3"> Lire TOUT l\article : <a href="article/ . $line["url"] ..html&src=. $pathway_prec . "> . $line["url"] . </a> ... Article paru le . $line["date-si"] . </div> </div> ; } else // donc $ps == "rubrique_secondaire" // On doit bloquer les bots de Google { echo <a href="article/. $line["url"] ..html&src=. $pathway_prec . " rel="nofollow"> . $line["titre"] .</a> </div> <div class="bordureparagraphe3"> <h2>. $line["chapeau"] .</h2> ; $sentence = cut_sentence($line["texte"],50) ; // il faut eviter davoir un debut de code HTML // coup en plein milieu => affichage erratique sinon. if (html_dans_string($sentence) ) echo ... ; else echo $sentence . ... ; echo </div> <div class="tavoirplus3">
90
Lire TOUT l\article n . $line["id"] . : <a href="article/ . $line["url"] ..html&src=. $pathway_prec . " rel="nofollow"> . $line["url"] . </a> Article paru le . $line["date-si"] . </div> </div> ; } }
Cette fonction est crite de la manire la plus simple possible pour en faciliter la comprhension. Il y a des optimisations de code ralisables dans ce source mais encore une fois, ce nest pas notre objectif de crer le code parfait, quelquefois difficile lire par un dbutant en PHP. Les div utilises sont dcrites dans les feuilles de style. Cest standard donc inutile de sattarder dessus. Cette fonction traite les donnes de larticle afficher en deux groupes distincts sur un point cl : les liens sont bloqus par un rel="nofollow" pour les articles nappartenant pas de manire primaire la rubrique en cours daffichage. Ainsi, grce lapplication de cette rgle, on vite davoir un duplicate content entre la page ddie larticle et les diffrents chemins pouvant y mener. Google ne verra quun seul chemin valide, celui de la rubrique dappartenance principale de larticle.
Rel="nofollow" vite le duplicate content
En bloquant le bot de tout moteur de recherche grce cette balise sur les URL dupliques vers une mme page, on vite les duplicate contents. Cette logique peut tre utilise pour coder de multiples possibilits de navigation humaine. Rappelez vous, on pourrait chercher des articles par rubriques mais aussi par contributeurs, sources, etc. Bref, on pourrait crer des liens avec URL rewriting, permettant de chercher selon dautres critres des articles. Cela serait un plus pour les internautes et la qualit ergonomique du site. Mais cela crerait de nombreux duplicate contents sauf baliser en rel="nofollow" toutes les autres possibilits de navigation crant un potentiel de duplicate content.
Un autre point technique est valuer : la qualit des textes afficher. Dans notre mthode, un chapeau est toujours un texte simple, sans code HTML ou autre. En revanche, le texte de larticle peut contenir de multiples codes HTML plus ou moins
91
complexes. Hors nous affichons un extrait de ce texte dans preview_article. On risque donc un affichage erratique dans la page si on coupe le texte nimporte o. Pour faire simple et rester centr sur lobjectif de ce livre, nous allons appliquer une politique simple : si un code HTML est dtect dans lextrait afficher, on naffiche rien. La fonction html_dans_string($sentence) renvoie VRAI si un code HTML est dtect dans la string passe en argument. Sur VRAI, on naffiche rien. Un autre point reste grer dans preview_article : jouer ou non avec le feu, avec la limite en duplicate content de Google et le risque dune pnalit associe au franchissement dun seuil dont on ne sait pas grand-chose.
Jouer avec le feu. On affiche les N premiers caractres du texte principal de larticle. Avantage : on leste en volume de texte notre page en cours ce qui est intressant en rfrencement. Inconvnient : on risque de dmarrer un duplicate content. En effet, ce mme contenu, les N premiers caractres, sera affich dans la page ddie cet article. Scurit dabord : on naffiche rien ou moins de 30 caractres (N < 30). On peut aussi casser le rythme de lextrait affich en y insrant des mots ou un commentaire venant dune autre source entre chaque extrait.
c Fig. 2.13 : Chapeau puis extrait du texte de larticle en duplicate content interne avec le mme texte de larticle complet.
Insrer 35 50 caractres du texte de larticle dans la page rsum sous le chapeau augmente le volume de texte de notre page et renforce la cohrence du lien reliant cette page la page ddie larticle. Cela renforce mutuellement le rfrencement de nos deux pages.
92
c Fig. 2.14 : Larticle complet avec le mme chapeau et la rdition de lextrait en tte de texte.
Il est donc tentant pour un rfrenceur daller chercher la limite. Google change frquemment les seuils et stratgies de dclenchements des duplicate contents. Le risque existe davoir une sanction. Les deux pages sont lies par un backlink, donc le texte dupliqu est immdiatement visible. Google possde des seuils de tolrance et des rgles comportementales trs volutives et difficiles cerner dans le dtail. Pour faire simple, entre 35 et 50 caractres dupliqus, on est en zone orange : on a une probabilit davoir une pnalit. Au-del, on passe en zone rouge avec une probabilit de pnalit quasi certaine. En dessous, a priori, on ne risque rien. Mais attention, ces chiffres varient en fonction de plusieurs critres. Par exemple, des termes utiliss dans votre contenu : plus les mots utiliss, les formulations crites seront rares et peu usits, plus vite le seuil de duplicate content approchera. Conclusion : chaque rfrenceur de xer le curseur N qui lui semble souhaitable.
93
Des mots-cls cohrents avec la page appele et avec la page appelante puisque par dnition, article.php affiche titre et chapeau au minimum du texte qui sera affich. On peut mme avoir un extrait du texte dune longueur de 0 50 caractres. On renforce le positionnement de ces deux pages, celle affiche par article.php et celle affiche par zoom.php. Ce string est unique. Il est propre cet article. Il nous sert donc de cl pour accder au bon enregistrement dans la table article.
de la rubrique sous une forme permettant sa mise en URL. Ainsi on rcupre directement via lURL la rubrique do vient le clic. Cest pratique pour raliser un l de navigation mais hors sujet dans ce livre. On case aussi deux mots-cls cohrents et pertinents dans lURL, amliorant ainsi le positionnement.
RewriteRule ^([-_a-zA-Z0-9]+)/([-_a-zA-Z0-9]+).html&src=([-_a-zA-Z0-9]+)$ zoom.php?referencement=$1&url=$2&src=$3
LURL rcrite appelle zoom.php avec en argument referencement = le string de mots-cls, l URL permettant de rechercher larticle afficher dans la table article, et enn src = la rubrique dorigine du clic, permettant ainsi de grer un ventuel l de navigation.
94
if ($line = mysql_fetch_array($request)) { $title_page = $line["title"] ; $meta_description_content = $line["description"] ; // ce id article va nous permettre de grer laffichage // dinfo contextuelle dans la colonne de droite $id_Article = $line["id"] ; } } } MiseEnPage::haut($title_page,$meta_description_content,$rep); ?> <div id="sousban"> </div> <div id="pagegauchetete"> <?php MiseEnPage::MenuGauche() ; ?> </div> <!-- fin page gauche tete --> <div id="pagecentretete"> <!-- COLONNE DROITE --> <div id="pagedroite"> <?php MiseEnPage::ColDroite($id_Article) ; ?> </div> <!-- fin colonne droite --> <div id="pagetext"> <?php view_article($line); ?> <!--fin page texte --> </div> <!-- fin pagecentre --> </div> <?php MiseEnPage::bas() ; ?>
95
Si on a bien un paramtre URL pass par lappel zoom.php, on peut construire une requte SQL en charge de rcuprer larticle voulu dans la table article.
if (isset($_GET["url"])) { $sql = "SELECT * FROM articles WHERE url=".$_GET["url"]." LIMIT 1;"; if ($request = mysql_query($sql))
Dans lenregistrement article ainsi lu, on prend la valeur du title de page et on instancie la valeur du meta description content.
{ $title_page = $line["title"] ; $meta_description_content = $line["description"] ; $id_Article = $line["id"] ; } } } MiseEnPage::haut($title_page,$meta_description_content,$rep); ?>
On affiche tout le haut de la page. Ensuite, on passe laffichage du menu de gauche et de la colonne de droite. Le principe est identique article.php. Le ID de larticle permet dappeler une fonction PHP5 ColDroite() qui affiche le contenu de la colonne droite de notre page par rapport au numro ID de notre article.
<div id="sousban"> </div> <div id="pagegauchetete"> <?php MiseEnPage::MenuGauche() ; ?> </div> <!-- fin page gauche tete --> <div id="pagecentretete">
96
<!-- COLONNE DROITE --> <div id="pagedroite"> <?php MiseEnPage::ColDroite($id_Article) ; ?> </div> <!-- fin colonne droite -->
La fonction PHP4 view_article($line), localise dans php_inc/biblio_inc.php, a en charge dafficher larticle pass en paramtre $line.
97
La mise en page est gre en CSS. Le chapeau est affich entre balises <h2>, le texte est affich tel quel, ce qui permet davoir du HTML dans le champ texte de la table article. Cest pratique mais dangereux. Les squences HTML doivent tre compltes et correctes sous peine daffecter laffichage de la page pour cause de balises non fermes, par exemple. Un lien permet de revenir la page daccueil.
2.7 Rsum
Nous avons un outil logiciel de publication darticles. La version que nous venons de voir est simple. Elle va subir quelques amliorations dans les chapitres venir. Notre logiciel est crit en PHP, il y a des syntaxe dappels de fonction en PHP4 et en PHP5. Il est bas sur une version standard de MySQL. Ce logiciel de publication automatise un minimum dactions de rfrencement : gestion automatises des title de page, des meta description, du chapeau en balises h2 dans zoom.php, dun titre en h1 dans article.php.
98
Rsum
Nous avons gr un cas de duplicate content assez courant : lappartenance dune page plusieurs URL distinctes, quelles soient l pour faciliter la navigation (classement de produits/articles par crateur, propritaire, date, etc.) ou parce quun mme produit/article peut appartenir plusieurs catgories distinctes.
99
3
3.1 Introduction .............................................. 3.2 Principe dun backlink .................................. 3.3 Principe du Page rank (PR) ............................. 3.4 Algorithme, nuages de liens et landing pages ...... 3.5 La formule "officielle" du Page rank ................... 3.6 Piloter la stratgie de rfrencement .................. 3.7 Rsum de ce chapitre ................................. 102 102 103 106 110 113 131
3.1 Introduction
Google a t le premier utiliser lexistence des liens naturels entre pages HTML pour valuer la pertinence dune page face une requte dinternaute. Lutilisation des backlinks pour le calcul du positionnement a t fondamentale dans le succs de Google. Dsormais, sans backlinks, impossible dtre positionn, quel que soit le moteur de recherche. Le codeur lisant ces lignes doit se dire :"Mais les backlinks sont issus dautres sites, cest du web marketing pur, je nai rien voir avec a". Rien de plus faux. Le codeur est impliqu de diffrentes manires dans les backlinks :
j
Le site doit avoir la capacit gnrer des nuages de liens internes. Nous verrons plus loin en dtail pourquoi. ce stade du livre, il suffit de savoir quun nuage de liens bien conu permet de mettre en avant certaines pages du site ddies des mots-cls, les landing pages, vers lindex de Google et de tenter ainsi dobtenir la meilleure place possible. Le site doit pouvoir changer aisment de critres on page. Un processus automatique serait le bienvenu. Exemple : lajout via back office dun mot-cl sur une page doit permettre de mettre jour automatiquement tous les critres de cette page ainsi que les ventuels nuages de liens. Ainsi, depuis une table MySQL ou depuis le back office du site, il sera possible de piloter la stratgie de rfrencement de tout le site.
LURL de la page vise par le lien : obligatoire. Le libell texte : il sera considr comme constitu de mots-cls.
Ce libell de texte vhicule des mots-cls de la page de dpart, formation et webmestres, vers la page darrive. Dans le cas dune image la place du libell texte, le contenu de la balise ALT de cette image sera considr comme constitu de mots-cls.
102
Le Page rank de la page de dpart a un effet de levier dmultipliant lefficacit de ce backlink. Plus le PR de la page de dpart est lev, plus la pousse sur le positionnement de la page sur les mots-cls du libell sera fort. Des scurits anti-fraude de Google peuvent nanmoins annuler le backlink. Pour viter de tomber sur ces scurits, il convient de ne pas construire un backlink nimporte comment. Nous reviendrons sur ce point un peu plus loin.
Le Page rank de la page. Il est approximativement indiqu par le champ PR de la Google bar. Le nombre de backlinks sortant vers des pages externes. Ces liens sortants, dont celui que nous analysons pour calculer le PR de la page que nous examinons, se partagent le pourcentage de Page rank allou aux liens sortants de toute page.
103
Le nombre de mots du libell du lien reliant cette page vers la page dont on est en train de calculer le PR. Ces mots se partage le Page rank, donc la pousse dans lindex. Plus il y a de mots, plus la pousse de chaque mot sera faible.
Une page HTML est un sommet. Un lien entre 2 pages HTML est un arc entre ces 2 sommets.
Un site Internet est un ensemble de sommets. Chaque sommet est unique : il a une seule et unique URL. Pour les arcs (les liens), cest un peu plus compliqu. Dans le contexte Google, pour faire simple, il ne doit exister quun arc, lien, entre 2 sommets, 2 pages. En effet, un arc peut partir dun sommet (page) P1 unique, aller vers un autre sommet P2 unique. Mais on peut avoir ainsi plusieurs liens reliant une page P1 une page P2 au gr des besoins du webmestre pour faire passer des internautes dune page une autre. Le moteur face deux liens ou plus, partant dune mme page P1 et pointant une mme page P2 aura un seul comportement : il slectionnera un lien unique et ignorera les autres. Nous avons deux objets : sommet et arc. Dotons-les de proprits.
104
j j
texte du libell du lien dcompos mot par mot ; dates o ce lien a t dtect par le moteur la premire fois, la dernire fois, etc.
premier texte entre balises <h1> ; premier texte en balise ALT dune premire image ; texte n1 entre balise <p> ou quivalent, etc.
Dans le TITLE ? Autrement, on minore le transfert de Page rank de 20 %. Dans un titre H1 ? Autrement, on minore le transfert de Page rank de 10 %. Dans deux titres H1 ? Si cest le cas, on majore le transfert de Page rank de 5 % par titre H1 offrant ce mot-cl, etc.
On fait la mme chose avec la page darrive. Au nal, notre apprenti moteur de recherche arrive calculer un transfert de Page rank via un lien entre deux pages. Il suffit dadapter cet algorithme nos besoins.
Algorithme de cohrence
Plus la cohrence est bonne, plus la qualit du backlink est satisfaisante. Pour assurer une bonne cohrence, les mots-cls prsents dans le libell de texte du lien doivent tre rpartis sur lensemble des deux pages. Mais il ne faut pas tomber dans le spamdexing : multiplier les mots-cls partout en grand volume. Cela constituerait une
105
anomalie statistique ; il y aurait trop de densit. On peut appeler cela une optimisation trop agressive. Elle pourrait entraner une dsindexation de la page par Google. Nous tenons notre approche pour concevoir un algorithme capable de gnrer un nuage de liens. Cette base de rexion pourra tre perfectionne au l du temps et de ses acquisitions de connaissances par chaque lecteur. En valuant les mots-cls de deux pages, on peut valuer si un backlink compos de mots-cls pourrait les relier. Cest un bon dbut mais insuffisant. Il va falloir complter cette base dalgorithme avant de pouvoir passer un premier codage.
quitable : le Page rank boucle entre les pages dun mme thme. Ce qui sort par un lien dune page reviendra via un autre lien. 20:1 20 pages dun mme thme sont interconnectes par le mme nuages de liens prsent sur chacune dentre elles. Chaque page a en plus de son nuage, un lien en dur vers une page spciale : la landing page. Cette page na pas de nuages de liens vers ces 20 pages. Donc elle reoit beaucoup et donne moins. Cette landing page se retrouvera donc trs favorise par rapport aux autres pages de mme thme, sur ses mots-cls, face aux algorithmes de Google. Une combinaison des deux prcdentes formes. Une forme sert lisser et moyenner le Page rank entre pages de mme thmatique. On sait ainsi sur quoi tabler. Les anomalies de PR par Page sont ainsi partiellement corriges car lisses entre ces pages. Lautre forme de transfert sert favoriser une page au dtriment des autres pages.
Dans un nuage de liens, chaque lien pousse de un quelques mots-cls. Comme les pages dans un nuage bien conu sont de la mme thmatique, la cohrence est en gnral plutt
106
bonne entre la page de dpart de chaque lien et sa page darrive. Lefficacit du backlink est donc maximale. Le Page rank ne se perd pas et circule entre les pages du site. La page cible par toutes les pages de mme thme est appele landing page, page datterrissage. Elle est ddie, comme les autres pages du site, une ou quelques expressions cls. Ladministration dun nuage de liens ciblant une expression cl permet de slectionner la page datterrissage dune expression cl. terme, cette page sera la page mise en avant en premier par Google sur cette expression cl prcise. Nous en dduisons les critres dune bonne landing page :
j j j
Elle doit tre de prfrence en haut de la hirarchie de navigation. Elle a un menu de navigation. Son URL appartient un menu de navigation du site. Cela favorise la diffusion du PR rerout vers cette page
Trop de liens tuent le nuage
La formule du Page rank est dtaille plus loin. Un mcanisme de cette formule limite lefficacit dun nuage de liens si celui-ci a trop de liens. Un nombre de 15 20 liens constitue une premire limite maximale pour un nuage de liens.
107
Renforcer la cohrence.
Le contenu et la mise en page du texte affich peuvent tre insuffisamment optimiss pour les besoins du site. Quelques astuces permettent de limiter les dgts. Afficher en H2 dans un coin de la page le contenu du title de page permet dassurer ou de renforcer une cohrence. Afficher dans une partie de la page en H1 le contenu du champ expression_clef de la table article renforce la cohrence de manire encore plus prcise. Dernier point et non des moindres : pour viter de trop forcer sur la densit et donc risquer de faire ainsi du spamdexing, le volume de texte dune telle page doit tre dun minimum de quelques centaines de mots.
Une table contient les expressions cls du site. Exemple dune expression cl pour notre exemple : cration dentreprise. On cherche toute page contenant cette expression cl dans son title. On obtient une liste. On interconnecte les 20 premires pages de cette liste par un nuage de liens.
Une ligne de code pourrait afficher par dfaut en H2 le contenu du champ expression_clef. Nous allons vite rencontrer de nombreux problmes de mise en uvre. O et comment afficher en H2 le champ expression_clef ? Cela implique que ds la conception du site, ce champ soit pris en compte. Il pourrait tre utilis comme titre du nuage de lien. Avoir une liste de 20 backlinks ayant tous pour libell cration dentreprises nest gure pratique prsenter sur chaque page, et cela nous entranerait dans un spamdexing de 20 mots-cls sur les 20 pages du nuage de liens. Il faut changer cela. Pour chaque lien, le libell du backlink pourrait tre le title de page, tout simplement. Un nuage de 20 liens nest gure pratique afficher. Le plus simple consiste crer une zone rserve au nuage de liens dans la page, ainsi quun conteneur XHTML/CSS destin en grer laffichage. Le bas de la page est une des possibilits o lon pourrait poser ce conteneur XHTML/CSS.
Duplicate content tue les nuages de liens
Trop de nuages de liens identiques sont prsents sur diffrentes pages. Pass un seuil, une page peut tre dsindexe. Tous ses liens sont ignors, le PR de la page est perdu et un trou apparat dans la stratgie de rfrencement. Une astuce consiste ne pas afficher les liens du nuage dans le mme ordre.
108
Au-del dune trentaine de caractres, deux chanes de caractres identiques peuvent entrer en conit de duplicate content vis--vis de Google. Notre nuage de liens repique le contenu du title de la page de destination et on retrouve cette chane de caractres rpte jusqu 20 fois ou plus dans autant de pages. Pour liminer les risques trop levs de duplicate content, plusieurs approches complmentaires sont mettre en uvre an de "casser" la dtection :
j j j
Ne pas afficher les liens dans le mme ordre chaque fois. Limiter le nombre de caractres dun libell de lien de manire en avoir moins de 35. Afficher de manire alatoire un segment de N caractres conscutifs du libell du lien. Si le texte de lien, issu donc du title de la page de destination, fait 80 caractres de long, on en affiche 45 alatoirement quon extrait dun seul bloc. On limite ainsi les longueurs et le volume de duplicate content des title de liens Il faut sassurer que lexpression cl pousser est prsente dans le bloc retenu. Nous lvoquons ci-aprs.
Limiter le nombre de mots peut entraner llimination de notre expression cl. Il faudra donc sassurer de sa prsence dans laffichage du libell. On peut afficher les mots environnant notre expression cl, ou uniquement les 4 5 premiers mots-cls. Et sils ne sont pas prsents, on prxe lextrait du title de page par le contenu du champ expression_clef "Cration dentreprise : " et on affiche un extrait de 2 4 mots-cls maximum. Tout codeur pourra imaginer sa propre solution ce problme.
Plus de 20 liens en nuage pose de gros problmes
On peut percevoir ici quil vaut mieux se limiter une vingtaine de liens en nuage sur une expression cl donne. Passer plus entranerait le codeur rfrenceur vers des limites. Soit on commence saccrocher dans des duplicate contents cause de la rptition de la mme string sur trop de page ; soit on expose des pages du spamdexing. En tentant dloigner ces risques, on diminue la cohrence et la prsence de lexpression cl. Enn, trop de liens tuent les liens pour cause de trop de dispersion du Page rank. Il faudra passer dautres algorithmes de nuages de liens pour grer au mieux les ux de Page rank sur une expression cl stratgique sur laquelle on veut focaliser plus de 20 backlinks internes.
Nous venons de voir un algorithme de nuage de liens entre les pages. Il reste y intgrer le lien vers la landing page.
109
Nous disposons dune table o sont stockes les expressions cls exprimant la stratgie de notre site. chaque expression cl, associons une URL en dur, celle de la landing page. Cette URL et un court texte associ comme libell de lien seront affich au mme endroit que le nuage de liens.
Pige, le temps et lobsolescence des liens
Les pages interconnectes voluent mais pas les backlink avec leurs libells. Ils deviennent donc incohrents au l du temps et Google les invalide. En automatisant les nuages de liens, on vite ce pige. Les liens se recalculent rgulirement. Ils restent ainsi jour.
110
Tableau 3.1 : Formule du Page rank C(Tn) Le nombre de liens sortant de la page Tn. Chaque page T a plusieurs liens, enn au moins un, celui qui pointe vers la page A. C(Tn) comptabilise le nombre de liens sortants qui vont devoir se partager, parts gales, une partie du PR allou aux liens sortants. Coefficient damortissement. d est considr gal 0,85. Une astuce pour inuencer la convergence
D (1 d)
Le Page rank est affich dans la barre doutils Google pour Firefox ou Microsoft IE. Lchelle du Page rank est logarithmique. Cette formule volue probablement au l du temps et des mises jour par Google de ses algorithmes. Voici une chelle approximativement correcte. Limportant est de comprendre la tendance et den matriser les consquences. Prenons une chelle logarithmique de base 10 pour simplier nos calculs et bien illustrer notre propos.
Tableau 3.2 : Page rank affich et calcul PR affich (log base 10) PR 0 PR 1 PR 2 PR 3 PR 4 etc. Page rank "rel", calcul quelques dcimales prs, exprim sans log 0 1 10 100 1000 PR < 1 PR < 10 PR < 100 PR < 1000 PR < 10000
Chaque niveau de Page rank est 10 fois plus lev que le niveau prcdent. Exprim simplement, il faut 10 fois plus de travail et de backlinks vers une page pour passer de PR4 PR5 que pour passer de PR3 PR4. Pour tre plus prcis : il faut 10 fois plus de PR transfr via les backlinks pour passer du niveau PR4 PR5 que pour passer de PR3 PR4.
111
Non seulement le volume de backlinks compte, mais aussi leurs qualits prenant en compte la cohrence. La formule du PR de Google est rcursive. Le calcul de PR en cours a un impact sur les PR des autres pages utilises pour calculer le PR de notre page. Il faut donc le refaire, ce qui modie nouveau le rsultat, etc. Pour obtenir un rsultat juste, il faudrait attendre que le rsultat converge vers une valeur peu prs stable. Nous venons de voir une des raisons expliquant pourquoi Google met jour la petite barre verte seulement quelquefois par an. Il est inutile de la publier trop souvent, cela reprsenterait un travail important en mises jour pour une volution faible. Une mise jour de la barre verte de la Google bar quelques fois par an est suffisante.
j
Premire consquence de cette formule : si un site nvolue pas, son PR se dgrade au l du temps. En effet, le nombre de pages dans Internet augmentant continuellement, le nombre de liens C(Tn) aura tendance augmenter et le PR transfr depuis chaque page Tn diminuera. Deuxime consquence : le volume de backlinks depuis des pages faible PR ou depuis des pages surcharges de backlinks entrane beaucoup de travail pour un faible rsultat. Tant qu investir du temps, autant en investir une partie dans des backlinks de qualit : bon PR, rel contenu, peu de backlinks externes. Troisime consquence : Google na nul besoin de disposer des PR de toutes les pages. En itrant plusieurs fois le calcul, chaque itration fait converger le PR vers la valeur nale juste. En attendant, il peut prendre une valeur intermdiaire nayant pas ni de converger ou une valeur de 0.
Dtaillons le fonctionnement. Les pages Tn ont chacune un lien pointant vers notre page A. Peu importe si nous navons pas encore toutes les pages Tn et si le Page rank de certaines de ces pages nest pas encore nalis. En effet, imaginons un cas simple et fort courant : une boucle dans les liens. La formule est itre une premire fois, le lien de A vers B vient juste dtre cartographi. Une fraction du Page rank passe de la page A la page B. La formule est itre une nouvelle fois. Les calculs prennent en compte le nouveau PR de B. En quelques itrations, le PR de chaque page va converger vers sa valeur nale. Nous explorerons les consquences de cette formule pour le rfrenceur :
j j
Google lutilise pour lutter contre le spam de backlinks. Comment exploiter le Page Rank de manire optimale pour obtenir un bon positionnement sur les mots-cls stratgiques des pages dun site web ?
112
On doit associer les pages existantes ayant cette expression cl dans leurs title de page puis on doit interconnecter ces pages existantes entre elles via un nuage de liens renforant le rfrencement de ces pages les unes les autres. Dans chaque nuage de lien plac dans ces pages associes, on place un backlink vers la landing page (page datterrissage) ddie cette expression cl.
Nous allons mettre en place lalgorithme de gnration de nuage de liens sur notre site web exemple. En mme temps, tout en administrant le fonctionnement de cet algorithme, nous piloterons la stratgie de rfrencement naturelle de notre site. Rappelez-vous, un script article.php affiche une liste de rsultats. En cas de clic sur un rsultat prcis, un script zoom.php affiche le dtail de larticle ainsi slectionn. Le nuage de liens sera donc placer en bas de chaque page affiche par zoom.php. Regardons le code source et lalgorithme dans le dtail. Notre code source de zoom .php vu dans les pages prcdentes se terminait ainsi :
<?php view_article($line); ?> <!--fin page texte --> </div> <!-- fin pagecentre --> </div> <?php $map = MiseEnPage::bas() ; ?>
Aprs lappel la fonction view_article($line); et avant la n de la page, il va falloir insrer le code grant le nuage de liens.
113
Nous retenons lapproche simpliste mais aise comprendre de saisir en table chaque variante. Une autre approche plus sophistique aurait consiste identier la prsence de ces 2 mots dans le title.
114
Les avantages et inconvnients des deux approches sont opposs. Une ligne par variante dune expression cl dans la table permet davoir de multiples nuages de 20 liens maximum sur des expressions cls voisines : cration entreprise, cration dentreprise, etc. On augmente ainsi la volumtrie des liens internes. Les inconvnients :
j j
Risque de quelques duplicate contents involontaires mais de faible ampleur sur quelques pages. Travail fastidieux. Il faut penser toutes les variantes possibles.
Conversion des 2 strings
On peut diminuer ce travail fastidieux de recherche de variantes dune expression cl en convertissant les 2 strings lors des comparaisons an de les mettre sur un mme jeu de caractres via la fonction html_entity_decode() qui convertit toutes les entits HTML en caractres normaux. On vitera ainsi de comparer , son pendant HTML, par exemple, et davoir une erreur de comparaison.
On peut aussi les convertir en caractres non accentus et ainsi simplier encore plus les comparaisons et les variantes. Nous verrons cela dans le code source. Dans notre exemple, nous prfrerons la premire solution, un enregistrement par variante de lexpression cl. Cette approche est porteuse de plus dvolution et dadaptabilit grce la possibilit de grer plus de nuages de liens autour des diffrentes dclinaisons dune expression cl.
115
Un programme dont le lancement est automatique, un batch dans le jargon des informaticiens, utilisera donc les tables MySQL pour construire dans une table ddie, exp_clef_dynamique, le nuage de chaque page. Ainsi pour afficher le nuage de liens, il suffira dinterroger cette table. En un seul accs MySQL, on obtiendra les informations permettant de gnrer le nuage de liens. En temps rel, sans la prconstruction de tous les nuages en batch, chaque affichage de page impliquerait un traitement incluant des dizaines, voire des centaines de requtes SQL ; notre serveur web se serait effondr rapidement.
Chaque affichage par zoom.php affiche un article unique identi par une cl unique : ID de la table article. La table exp_clef_dynamique contiendra lID article de la page o poser un backlink du nuage de liens. Chaque backlink poser est dcrit sous la forme dun ID article, le champ id_article_cible, et du libell texte de ce backlink, libelle_BL. Un nuage de liens est donc un ensemble de triplets (id_article, libelle_BL, id_article_cible) dont le id_article est identique. Cest le script PHP batch_exp-clef_dynamique.php qui va remplir cette table des nuages de liens construire. Ce programme peut tre lanc une fois par jour ou plus, automatiquement ou manuellement. Une autre table est remplie par ce mme script PHP : landing_pages_id_article_url :
--- Structure de la table landing_pages_id_article_url -CREATE TABLE landing_pages_id_article_url ( id int(11) NOT NULL auto_increment,
116
id_article int(11) NOT NULL, libelle_lien varchar(255) NOT NULL, url_lien varchar(255) NOT NULL, PRIMARY KEY (id), KEY id_article (id_article) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ;
Chaque nuage de liens pos sur une page contiendra un backlink vers une landing page. Cette table va nous permettre de grer cela. Via chaque ID dun article, depuis le script zoom.php, on pourra afficher dans le nuage de liens ce backlink avec le libell libelle_lien qui pointera vers la page url_lien. Examinons le code source du script PHP batch_exp-clef_dynamique.php :
require_once("php_inc/MiseEnPage.inc.php"); require_once("php_inc/init.inc.php"); require_once("php_inc/biblio_inc.php"); ?> <h1>gestion dynamique des expressions clefs entre pages articles</h1> <?php // vider la table que lon va reconstruire // les liens en nuage $table = "exp_clef_dynamique" ; $sql = "TRUNCATE TABLE " . $table . " ;" ; $id_global = 1 ; // sera le ID de chaque enregistrement // dans table exp_clef_dynamique $id_landing_page = 1; // sera le ID de chaque row // dans la table // landing_pages_id_article_url if (!($request = mysql_query($sql) ) ) { echo erreur : table . $table . :: impossible de vider la table <br /> ; exit ; } echo info : table . $table . :: vide <br /><br /><br /> ; // vider la table que lon va reconstruire : // la landing page de chaque nuage $table = "landing_pages_id_article_url" ; $sql = "TRUNCATE TABLE " . $table . " ;" ; if (!($request = mysql_query($sql) ) ) {
117
echo erreur : table . $table . :: impossible de vider la table <br /> ; exit ; } echo info : table . $table . :: vide <br /><br /><br />;
On dnit les bibliothques de fonctions via des classiques require_once. Pour suivre la construction des tables et permettre tout dbogage, on affichera des informations sur une page HTML via de classiques echo ou print dans le script PHP. $id_global et $id_landing_page seront les ID respectifs de chaque enregistrement que nous allons crire avec le batch batch_exp-clef_dynamique.php dans les deux tables exp_clef_dynamique et landing_pages_id_article_url. On vide les tables exp_clef_dynamique et landing_pages_id_article_url puisque le batch doit les reconstruire compltement toutes les deux.
Boucle de niveau 1
Traiter chaque expression cl pour essayer de mettre en nuage :
$sql = "select * from expressions_clefs ;" ; if ($request = mysql_query($sql)) // on a toutes les exp clef de expressions_clefs explorer { while ($line = mysql_fetch_array($request)) // boucle niveau 1 { $expression = $line["expression"] ; $url_lien = $line["landingURL"] ; $sql = "select * from articles ;" ; if ( !($request2 = mysql_query($sql)) die(Erreur SQL !.$sql. .mysql_error());
On rcupre chaque expression cl depuis la table expressions_clefs. Pour chacune delles, on va essayer de trouver une page o dposer le nuage et toutes les pages affichant un article qui seraient cohrentes avec notre lien et la page de dpart. Pour chaque expression, on met de ct les informations an de construire un lien vers la landing page de lexpression cl. Ces informations sont : j Le libell du lien. Ici, nous prendrons lexpression cl elle-mme : $expression. j LURL du lien : $url_lien. Nous avons de quoi construire le lien sous la forme <a href="$url_lien "> $expression </a>.
118
Boucle de niveau 2
Recherche dune page dont le title possde une sous-chane (substring) correspondant lexpression cl, pouvant donc recevoir un nuage de liens :
// boucle niveau 2 while ($line_article = mysql_fetch_array($request2)) { $id_article = $line_article["id"] ; $s = $line_article["title"] ; $s_nohtml = html_entity_decode($s) ; // plus de HTML, on passe tout en iso standard basique $expression_nohtml = html_entity_decode($expression); $s_noAccent = strtr($s_nohtml, v Y, U AAAAAACEEEEEIIIINOOOOOUUUUY); $s_noAccent = strtr($s_noAccent, yy, aaaaaaceeeeiiiinooooouuuuyy); // du pur ascii 7bit - on simplifie les comparaisons $expression_noAccent = strtr($expression_nohtml, v Y, U AAAAAACEEEEEIIIINOOOOOUUUUY); $expression_noAccent = strtr($expression_noAccent, yy, aaaaaaceeeeiiiinooooouuuuyy); // on cherche expression clef dans title : oui ou non. if (stristr( $s_noAccent, $expression_noAccent ) ) { // si oui, on repre cet article son id), // on construit libell de lien puis faut chercher // tous les autres articles viser // on trace ce qui se passe pratique pour le debug // et pour comprendre echo boucle niv DEUX 2 : <b> . $expression_noAccent . </b> est inclus dans cette string ==>> <i> . $s_noAccent . </i> <br> ; // on construit le BL $id_depart = $line_article["id"] ;
119
// maintenant il faut lister tous les // ID articles cibler $sql = "select * from articles ;" ; if ($request3 = mysql_query($sql)) { // on commence par le lien vers la landing page $libelle_lien = $expression ; $sql2 = "INSERT INTO landing_pages_id_article_url VALUES($id_landing_page,$id_article, $libelle_lien , $url_lien) " ; mysql_query($sql2) or die(Erreur SQL !.$sql. .mysql_error()); echo <br /> article n . $id_article . . $libelle_lien . ===>>>> . $url_lien . <br /> ; $id_landing_page++ ; $compteur_BL = 0 ; // on compte le nombre de BL que lon va mettre dans // la table exp_clef_dynamique pour CE nuage de liens. // On ne dpasse pas 20
On rcupre son ID. Il nous sera ncessaire au cas o la page serait en adquation avec notre recherche sur le title. On rcupre son title de page dans la variable string $s. On transforme le title et lexpression en texte iso sans code HTML (ou un sexprime par exemple) via la fonction html_entity_decode. On limine tous les caractres accentus via la fonction strtr(). On recherche dans la chane (variable string $s_noAccent) contenant le title la sous-chane $expression_noAccent. Sil y a prsence de lexpression cl dans le title de la page affiche via zoom.php, on a une page o poser notre futur nuage de liens.
Pourquoi transformer en caractres latins basiques les contenus de la chane (le title de page) et de la sous-chane (lexpression cl chercher dans le title de page) ? Pour simplier la gestion du rfrencement et abiliser nos comparaisons. Il existe de multiples dclinaison autour dune expression cl comme cration entreprise.
120
Cration entreprises/creation entreprise/cration dentreprise/crtion entreprise/, etc. Avec accent, au pluriel, en mode HTML, de nombreuses variantes
existent. En liminant tout code HTML et toute prsence daccent, on simplie plusieurs choses :
j
La saisie imposer dans le title et les tests lis dans le script PHP. Peu importe dsormais que ce soit saisi en HTML ou non. La prsence des caractres accentus importe peu galement. Le traitement appliqu nous dbarrasse de ces problmes. Nos comparaisons fonctionneront. Ladministrateur de la table expression na plus qu se proccuper des variantes de texte : prsence ou non dun d avec apostrophe, sans apostrophe, cration au pluriel ou au singulier, etc.
Lautre point concernant lordre des oprations porte sur la abilit et la prennit de cette squence de code. Deux problmatiques sont rgler :
j
Il existe une multitude de jeux de caractres lis Internet ou non : sur 8 bits, 16 bits, 32 bits. En les recodant dans une police latine, on se dbarrasse de toutes les manires diffrentes de coder un mme caractre. La deuxime problmatique porte sur les accents. Un mme mot peut tre orthographi avec des caractres accentus divers, justes ou errons. La transformation de tout caractre accentu vers sa version non accentue abilise et simplie le travail de comparaison.
Revenons notre code source. Nous avons identi un article o poser un nuage de liens. Il nous faut tracer son ID darticle : la page de dpart de chaque lien du nuage. Il nous faut maintenant identier tous les liens poser dans le nuage dans une boucle de niveau 3. Nous prparerons cette boucle sur la table article. On charge tous les articles de la table article pour prparer la recherche, cohrence oblige, dautres articles ayant cette mme expression cl dans le title de page affiche par zoom.php. Pour dbuter, on insre dans la table landing_pages_id_article_url les informations qui nous permettront de coder la vole le lien vers la landing page de lexpression cl :
$id_landing_page : lID unique de chaque enregistrement de cette table ; $id_article : lID de larticle o poser le lien ; j $libelle_lien : le libell du lien ; j $url_lien : lURL de la landing page. j $compteur_BL. On doit limiter une vingtaine le nombre de liens dans un nuage. Ce
j j
121
vole du nuage. Dans une version amliore, les ventuels enregistrements darticles restant dans la vue en cours de traitement et compatibles avec lexpression cl pourraient tre utiliss pour un autre nuage. Dans le cadre de cet exemple, nous nous contenterons du progrs dj notable davoir un seul nuage de liens pour mettre en landing page une expression cl prcise.
Boucle de niveau 3
On parcourt les enregistrements de la vue et on compare lexpression la chane title de chaque enregistrement, comme dans la boucle de niveau 2 :
// boucle niveau 3 - gnration du nuage de liens // pour larticle id_depart while ($line_article_cible=mysql_fetch_array($request3)) { $s0_nohtml = html_entity_decode($line_article_cible["title"]) ; $s0_noAccent = strtr($s0_nohtml, v Y, U AAAAAACEEEEEIIIINOOOOOUUUUY); $s0_noAccent = strtr($s0_noAccent, yy, aaaaaaceeeeiiiinooooouuuuyy); if (stristr($s0_noAccent, $expression_noAccent) ) { // il faut entrer une ligne dans la table // expressions clef dynamiques echo boucle niv TROIS 3 : . $expression_noAccent . est inclus dans cette string ==>> . $line_article_cible["title"] . <br> ; $libelle_final = $line_article_cible["title"] ; $compteur_BL++ ; echo $compteur_BL . me de ce nuage de liens BL==>> . $libelle_final . <<== . ID cible = . $line_article_cible["id"] . <br> ; $cible = $line_article_cible["id"] ; $id_global++ ; $sql2 = "INSERT INTO exp_clef_dynamique VALUES($id_global , $id_depart,
122
// /:
//
$libelle_final , $cible) " ; if ($line_article["id"]==$line_article_cible["id"]) si on ne pointe pas sur la mme page de dpart / arrive le BL est ok, on peut linsrer { echo **** boucle sur lui-mme - pas de BL . $line_article["id"] . == . $line_article_cible["id"] . <br /> ; } else // on insre le BL gnrer ds la table { if ($compteur_BL <21) nuage de liens ne doit pas dpasser 20 { mysql_query($sql2) or die(Erreur SQL !.$sql. .mysql_error()); } else { echo <br /> Nuage de liens satur 20 max<br />; } } } }
chaque enregistrement compatible avec notre expression cl, on rcupre les informations ncessaires la construction du lien. On va les insrer dans la table exp_clef_dynamique :
j j j
insertion dans la table. $id_depart : cette variable a t instancie dans la boucle 2. Cest lID de la page de dpart du nuage de liens. $libelle_final : on rcupre le title de la page cible qui sera donc le libell de notre lien vers elle. Difficile de faire plus cohrent. Mais cette prcision nous limite une vingtaine de liens maximum dans un nuage pour une expression cl prcise. $cible : cest lID de la page cible. Grce lui, on pourra construire lURL vers la page.
123
Si les deux ID article et ID article cible sont identiques, on est en fait sur la page de dpart dont le title contient bien sr lexpression cl. On ne la traite pas. Si $compteur_BL atteint 21, on arrte dinsrer des liens pour ce nuage. Une amlioration future serait mettre en place ici pour crer un nouveau nuage de liens qui aurait pour objectif dutiliser un seul mot-cl composant lexpression cl en cours. Cest un excellent exercice faire pour mettre en uvre et amliorer ce que vous apprenez dans ce livre. Ci-aprs, on ferme proprement les accolades et la n de la page HTML affichant les messages de suivi de la construction des deux tables.
} } } } } echo <br><br> == fin du batch == ; ?> </body> </html>
Nous allons maintenant analyser le code source de zoom.php. Nous avons dj vu le code source de la version sans gestion des nuages de liens au chapitre prcdent ? Nous allons revisiter ce script avec cet ajout.
La table landing_pages_id_article_url contient le backlink pointant vers la landing page cible. La table exp_clef_dynamique contient les liens du nuage afficher dans la page de larticle.
Le script doit accder aux ventuels enregistrements concernant lID article quil affiche dans ces 2 tables. La cl daccs est la mme pour les deux tables : le champ id_article de la page article en cours de publication par zoom.php.
124
Cette ligne affiche larticle. Dans la version simple vue au chapitre prcdent, on ferme la page. Dsormais, on passe la gestion du nuage de liens :
view_article($line); // on commence par le lien vers la landing page $id_article_depart = $line["id"] ; // $sql_landing_page = "select * from landing_pages_id_article_url where id_article = " . $id_article_depart . " ;" ; if ( !($request2 = mysql_query($sql_landing_page)) ) die(Erreur SQL !.$sql. .mysql_error()); if ($landing_page = mysql_fetch_array($request2) ) // si on a au moins un lien afficher { // div de dbut des BL dynamiques echo <div class="jcmbparalarge"> ; echo Liens connexes : . $line["url"] . <br /><br /> ;
125
echo <a href=". $landing_page["url_lien"] . "> . $landing_page["libelle_lien"] . </a> <br /><br /> ; $sql_BL_a_poser = "select * from exp_clef_dynamique where id_article = " . $id_article_depart . " order by md5(rand()) ;" ; if ($request_BL_a_poser=mysql_query($sql_BL_a_poser)) // tous les BL poser pour larticle o nous sommes { while ($line_UN_BL_a_poser = mysql_fetch_array($request_BL_a_poser)) // liste des liens en nuage poser pour cet article { $sql5 = "select * from articles where ID = " . $line_UN_BL_a_poser["id_article_cible"] . " ; " ; $request5 = mysql_query($sql5); $line5 = mysql_fetch_array($request5) ; $url_article_cible = $line5["url"] ; // // quelle est la rubrique PS (primaire) // de cet article cible ? $sql3 = "select * from article_rubrique where id_article = " .$line_UN_BL_a_poser["id_article_cible"] . AND primaire > 0 . " ; " ; if ($request3 = mysql_query($sql3)) { // quel est le id_rubrique primaire // de cet article, cd la seule URL // href valide du site // (pour viter les dup content). $line3 = mysql_fetch_array($request3) ; //quel est le dtail de la rubrique ? // l on a juste son ID cd son n // (dont on a aussi besoin pour // construire lURL du BL $sql4 = "select * from rubrique where ID = " . $line3["id_rubrique"] . " ; " ; if ($request4 = mysql_query($sql4))
126
{ $line4 = mysql_fetch_array($request4) ; // // quelle est lURL gnrer // depuis la table rubrique ? // il faut article/url de larticle cible echo <a href="article/ . $url_article_cible . .html&src=. $line4["nom"] . "> . $line_UN_BL_a_poser["libelle_BL"] . </a> ; } } else { echo <br /><b> Pas de rubrique primaire pour cet article ? Impossible / bogue </b> ; } echo <br /><br />;// br a chaque passe du while } // accolade fin du while } // fin de BL dynamiques echo </div> ; // div de FIN des BL dynamiques } ?>
On commence par gnrer le backlink vers la landing page. Il nous faut pour cela les informations stockes dans la table landing_pages_id_article_url. Le code ci-aprs extrait ces informations.
view_article($line); // on commence par le lien vers la landing page. $id_article_depart = $line["id"] ; // $sql_landing_page = "select * from landing_pages_id_article_url where id_article = " . $id_article_depart . " ;" ; if ( !($request2 = mysql_query($sql_landing_page))) die(Erreur SQL !.$sql. .mysql_error()); // on rcupre notre landing page if ($landing_page = mysql_fetch_array($request2)) // si on a au moins un lien afficher
127
Si on a au moins un lien afficher dans le nuage, le backlink vers la landing page, on affiche le conteneur, le titre du nuage et le backlink avec le script ci-aprs. Dans cet exemple et dans la mthodologie de lexercice, $lien["url"] contient obligatoirement les mmes informations que le champ expression_clef de la table article. Cela nous dispense dafficher expression_clef dans zoom.php comme voqu prcdemment.
if ($landing_page = mysql_fetch_array($request2)) // si on a au moins un lien afficher { // div de dbut des BL dynamiques echo <div class="jcmbparalarge"> ; echo Liens connexes : . $line["url"] . <br /><br />; echo <a href=" . $landing_page["url_lien"] . "> . $landing_page["libelle_lien"] . </a> <br /><br /> ;
Par dfaut, une requte SQL renvoie les enregistrements dans lordre o ils sont trouvs dans la table. Or pour avoir un affichage alatoire des liens dans le nuage, il faut stocker dans un autre ordre les articles retourns dans la vue.
order by md5(rand()). Cet ajout dans la requte SQL dclenche un renvoi des articles
128
puis excuter la clause where. Sur un site web avec des tables volumineuses en enregistrements et des utilisateurs nombreux, on peut dclencher un effondrement des performances, prlude un crash du serveur.
Illustration de surcharge due rand() dans MySQL
Votre table article contient 5 000 enregistrements et votre clause where en isolera une douzaine. La fonction Rand() va tre excute sur toute la table, la table va tre trie et enn la clause where sera applique pour en extraire les lignes voulues dans le dsordre souhait. Cela consomme beaucoup trop de ressources disques, mmoire, processeur. Les temps de rponse seront lents, les performances globales du serveur fortement perturbes.
Pour notre site exemple, ce codage base de md5(rand()) est suffisant. Pour un site avec des bases plus importantes et de nombreux utilisateurs affichant des pages, il est obligatoire de coder son propre algorithme de tri alatoire dans un tableau. Une piste pour un algorithme peu gourmand en ressources :
j j
j j j
Dans un tableau deux dimensions : une pour les nombres, une pour les chanes de caractres. Dans la colonne chane de caractres, copier les enregistrements de la ressource $sql_BL_a_poser directement sous la forme de lien <a href= </a> raison de un lien par entre dans le tableau. Gnrer un nombre alatoire chaque ligne du tableau et le dposer dans la colonne numrique du tableau bidimensionnel. Trier le tableau . Afficher les chanes du tableau.
Lendroit idal pour faire cela est la n du script. Au lieu de lancer laffichage avec des
echo, on crit dans le tableau deux dimensions, on traite pour mettre dans un dsordre
alatoire, on affiche. Il existe plusieurs variantes autour de cette approche. Chacun pourra modier ou amliorer sa convenance. Dans cette bauche de routine coder, le traitement est effectu uniquement sur la vingtaine de liens autoriss, ce qui limite fortement la consommation de ressources.
129
while ($line_UN_BL_a_poser = mysql_fetch_array($request_BL_a_poser)) // liste des liens en nuage poser pour cet article { $sql5 = "select * from articles where ID = " . $line_UN_BL_a_poser["id_article_cible"] . " ; " ; $request5 = mysql_query($sql5); $line5 = mysql_fetch_array($request5) ; $url_article_cible = $line5["url"] ;
Pour chacun de ces liens poser, il va falloir construire le lien avec les mots-cls ncessaires pour lURL rewriting et viter des duplicate contents. Chaque lien doit utiliser les mots-cls prvus. La requte $request5 permet de rcuprer les mots-cl URL de larticle cibl. Rappel : le lien doit avoir la forme suivante :
<a href="article/ URL de larticle cibl.html&src=nom de la rubrique primaire">libell bas sur le TITLE de larticle</a>
Le nom de la rubrique primaire alourdit notre traitement mais nous permet de caser des mots-cls dans lURL. Cest un travail fort utile. Pour construire chaque lien de ce nuage, on a donc besoin de rcuprer :
j j j
lURL de article cible ; le nom de la rubrique PRIMAIRE de cet article ; le numro de la rubrique primaire.
Le code source ci-aprs ralise cet algorithme pour chaque lien. La dernire ligne de cet extrait affiche le lien construit.
// quelle est la rubrique PS (primaire) // de cet article cible ? $sql3 = "select * from article_rubrique where id_article = " . $line_UN_BL_a_poser["id_article_cible"] . AND primaire > 0 . " ; " ; ($request3 = mysql_query($sql3)) { // quel est le id_rubrique primaire de cet article,
130
Rsum de ce chapitre
// cd la seule URL href valide du site // (pour viter les dup content). $line3 = mysql_fetch_array($request3) ; $sql4 = "select * from rubrique where ID = " . $line3["id_rubrique"] . " ; " ; if ($request4 = mysql_query($sql4)) { $line4 = mysql_fetch_array($request4) ; // quelle est lURL gnrer // depuis la table rubrique // il faut article/url de larticle cible echo <a href="article/. $url_article_cible . .html&src= . $line4["nom"] . "> . $line_UN_BL_a_poser["libelle_BL"] . </a> ;
Le reste du script ferme les accolades ouvertes et traite une ventuelle erreur.
131
4
4.1 Pourquoi la gestion de session ? ...................... 4.2 Cookies et gestion de session par URL ............... 4.3 Les objectifs du codeur/rfrenceur en gestion de session ............................................... 4.4 Gestion de sessions en URL rfrences ............. 4.5 Protger son site des hackers .......................... 134 134 136 139 153
Quelles sont les pages visites ? Dans quel ordre ? Quels sont les mots-cls saisis dans un moteur pour arriver sur une des pages du site ? Quels sont les produits regards ?
Dans de nombreux autres cas, le gestionnaire du site aura besoin dauthentier un internaute puis de lui assurer un change scuris. La logique applicative du site pourra avoir besoin de connatre un paramtrage prcis :
j j
Linternaute a demand un ltre appliquer sur toutes ses demandes. Le site personnalise ses rponses en fonction de linternaute ou dun facteur externe.
Gestion de sessions et Google se comprennent mal
Les cookies, condition de ne pas tre obligatoires sur le site, ne gnent pas les bots de Google. Les URL surcharges peuvent perturber Google de diffrentes manires. Elles sont trop charges : Google les ignore. Plusieurs URL grant des sessions mnent une mme page : le site a gnr des duplicate contents avec les problmatiques de diminution des performances en rfrencement qui vont avec.
134
En xant une longue dure de vie son cookie, un site web peut ainsi construire des historiques sur ses internautes sans avoir besoin de les identier. Le chier du cookie peut stocker des informations, typiquement un code ou une paire didentiant type login/mot de passe. La logique applicative du site peut corrler ce code unique avec les traces laisses par les passages prcdents de ce mme cookie. Pour peu que linternaute se soit identi un moment quelconque lors de ses passages pour acheter ou demander quelque chose via un formulaire, le site peut savoir qui il est et "tracer" ses activits. Le cookie est dcrit dans la RFC2109 http://www.ietf.org/rfc/rfc2109.txt. Son fonctionnement est implment dans les outils des acteurs du Net via le suivi de cette RFC2965 : http://tools.ietf.org/html/rfc2965.
Le gestionnaire du site peut coder la gestion de session dans lURL avec plusieurs approches distinctes et complmentaires. LURL contient juste un code qui permet didentier linternaute. La logique applicative rcupre ce code chaque page, enregistre les actions. On trace ainsi lactivit de linternaute. On gre la personnalisation des pages envoyes cet internaute ainsi que ses droits daccs certaines informations ou ressources. Le comportement de linternaute sur la page ne peut pas toujours tre identi par le back office du site. Le codeur associe alors un lien des informations lies aux actions de linternaute : il a cliqu sur tel bouton quand celui-ci affichait ceci, etc. Ces informations sont passes via lURL.
Gestion de session par ID dans lURL
Les sessions gres par URL ne ncessitent pas laccord de linternaute, contrairement aux gestion de session gres par cookies. Elles ne laissent aucune trace sur son micro-ordinateur, sauf associer volontairement session et cookie. En PHP, les variables de session sont dites super globales car elles sont toujours prsentes mme si la page est recharge. Les variables de session permettent de transporter des actions de linternaute sur le site. La logique applicative du site peut alors ragir sur ces informations : les stocker pour historique, renvoyer une information prcise, calculer un affichage personnalis, vrier un droit daccs, etc.
Des utilisateurs nacceptent pas les cookies. Les bots des moteurs nacceptent jamais les cookies. Les bots des moteurs naiment pas les URL charges en paramtres. Les URL charges en paramtres sont en gnral contre productives en rfrencement/positionnement.
135
Nanmoins, il y a des demandes satisfaire et il va falloir coder en ne se faisant pas piger dans ces problmatiques.
Pourquoi les internautes naiment pas les cookies
Cest le parfait outil pour espionner le comportement, la vie prive, dun internaute travers de multiples sites. Voici le processus fort simple mettre en uvre : Un internaute charge une page Pa dun site Sa. Cette page Pa contient une image venant dun site Sz. Ce site Sz place un cookie Cz sur le navigateur de notre internaute. Notre internaute navigue sur le site Sa dont toutes les pages ont une image de Sz. Celui-ci enregistre toute la navigation de notre internaute grce au cookie plac ds la 1re page. Notre internaute quitte Sa et va naviguer sur le site web Sb. Une image de Sz est prsente sur toutes les pages de ce site. Le site Sz, grce au cookie Cz issu du 1er site Sa, vous a identi de nouveau et suit votre navigation sur le site web Sb. Voici une anecdote. Suite une fuite dun chier log, des personnes se sont amuses aux tats-Unis identier et deviner la vie prive des personnes ayant laiss des traces. Leurs vies prives et leurs identits ont ainsi t publies.
les fonctionnalits destines tracer les internautes pour constituer un historique ou personnaliser laffichage ; ce qui reste visible du site tout internaute.
Un exemple pour exposer cette mthodologie. Sur notre site exemple, on dsire offrir linternaute la possibilit de ltrer les articles par rgion. Actuellement, tout clic dans la navigation affiche des articles visant la France entire. Comment faire ? La table article possde un champ rgion qui accepte un entier. On pourra y saisir lID de la rgion. Par dfaut, ce sera lID de France entire. La table region dispose de trois colonnes : ID, nom, acronyme. Elle est prremplie avec les rgions de France :
--- Structure de la table region -CREATE TABLE region (
136
id int(4) NOT NULL auto_increment, nom varchar(255) default NULL, acronyme varchar(255) default NULL, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT=liste des regions franaises AUTO_INCREMENT=89; --- Contenu de la table region -INSERT INTO region (id, nom, acronyme) VALUES (1, France, France), (2, Alsace, Alsace), (3, Aquitaine, Aquitaine), (4, Auvergne, Auvergne), (5, Basse Normandie, B Normandie), (6, Bourgogne, Bourgogne), (7, Bretagne, Bretagne), (8, Centre, Centre), (9, Champagne-Ardenne, Champagne), (10, Corse, Corse), (11, Dpartements dOutre-Mer, DOM), (12, Franche-Comt, Franche-Comt), (13, Haute-Normandie, H Normandie), (14, Ile-de-France, IdF), (15, Languedoc-Roussillon, Languedoc), (16, Limousin, Limousin), (17, Lorraine, Lorraine), (18, Midi-Pyrnes, Mi-Pyrnes), (19, Nord-Pas-de-Calais, Nord-PdC), (20, Pays de la Loire, Loire), (21, Picardie, Picardie), (22, Poitou-Charentes, Poitou-Ch), (23, Provence-Alpes-Cte-dAzur, PACA), (24, Rhne-Alpes, Rhne-Alpes), (25, Territoires dOutre-Mer, TOM);
Un internaute, pour indiquer quil dsire voir les articles tris par rgion, doit cliquer sur la rubrique Slection par rgion. Cette rubrique affiche, selon dautres critres, les mmes articles que les autres rubriques du site exemple. Les mmes pages auront des URL diffrentes. Mais cette fonctionnalit, afficher les articles par rgion dappartenance, intresse les internautes. Il faut donc la laisser.
137
Pour protger notre rfrencement, nous modierons article.php et la fonction haut() de la classe MiseEnPage, du chier php_inc/MiseEnPage.inc.php.
public static function haut($title , $content , $repertoire , $follow_index) // du code identique <title> $title</title>" ; if ($follow_index == 0) // page region, ne pas indexer Print "<meta name=ROBOTS content=NOINDEX,NOFOLLOW>"; Print " <meta name=description content=$content /> // La suite du code ne change pas.
Nous avons un nouvel argument : $follow_index. La valeur 0 (zro) indique quil ne faut pas permettre au bot dindexer cette page. La valeur 1 (un) indique que le bot Google peut parcourir cette page sans risque pour le rfrencement du site web. La valeur 0 dclenche la pose du meta ROBOTS en noindex, nofollow. Ce meta interdit aux moteurs dindex de suivre les liens de cette page. Le lien pointant vers la rubrique Slection par rgion a depuis le dbut de notre site web exemple une balise rel="nofollow" indiquant Google de ne pas suivre ce lien. Ce lien est dans le menu gauche de la page. Nous avons remarqu, via la commande site:, que Google pouvait outrepasser lindication rel="nofollow". Par prudence, nous indiquons via $follow_index, un meta de blocage envers tout moteur. Revenons notre mthode. Nous avons spar dun ct ce qui est ncessaire linternaute et que lon peut rendre inaccessible Google. Dun autre ct, nous avons ce qui doit tre impeccable, ce que Google peut ou mme doit voir. Pour atteindre cet objectif, plusieurs approches pratiques sont possibles. En voici deux :
j
Comme dans notre exemple prcdent, nous avons isol dans une rubrique protge par des noindex nofollow la fonctionnalit pouvant perturber gravement notre rfrencement. La rubrique Slection par Rgion est ainsi inaccessible aux bots de Google et autres moteurs de recherche. Une approche mise en uvre par Amazon ou la Fnac consiste laisser accessible Google un site web trs hirarchis o aucun session_start() nest lanc. Dans le mme site web, les mmes pages et programmes, via une protection type noindex, nofollow ou autre technique quivalente, utilisent les mmes donnes MySQL avec des gestions de sessions permettant une gestion marketing plus efficace sur le comportement des internautes. Pour cela, on lance ou non session_start() selon le user agent HTTP.
138
Ce type dURL dclenche des duplicate contents. chaque visite, le bot de Google aura une URL diffrente pour une mme page. Voici lalgorithme qui sera implment dans notre site exemple : La page permettant linternaute de choisir son ltre est et reste en noindex, nofollow : la rubrique Slection par Rgion. Il est inutile de la laisser en accs Google. Tout bot est dtect et on ne lance pas le session_start() permettant dinitialiser la gestion de session. Ainsi, les bots ne voient quun site strictement hirarchis, conforme leurs possibilits de comprhension robotises. Tout internaute humain ou dtect comme tel :
j j
A un session_start() pour la page index : inutile mais pratique pour dboguer. A un session_start() pour tout affichage via article.php.
139
Na pas de gestion de session pour toute page affiche par zoom.php : inutile par dnition dans notre exemple. Un article prcis demand est par dnition vu travers lventuel ltre donc inutile de contrler quoi que ce soit.
Tout internaute ayant slectionn un ltre se voit attribuer une variable de session codant lID de la rgion ltrer.
Le code source dorigine servait traquer le trac des bots sur un site web via Google Analytics. Ce code source a t modi et adapt par Gilles Grgoire le 23/12/2008 pour remplacer un code de Gilles moins lgant et dont il tait plus difficile dassurer la maintenance. Cette fonction, session_region(), est en charge de suivre le comportement des bots sur des URL et des pages optimises SEO. Il bascule sur une action ou une autre selon le visiteur : bot ou humain. Plusieurs sites fournissent la liste ou des informations sur les bots en circulation :
http://www.robotstxt.org/db/schema.txt liste les principaux robots en circulation : plus de 2 000 actifs en 2008 selon ce site. Dans ce site, "notre" utilisation PHP du http user agent du robot correspond la ligne robotuseragent.
La liste des bots et le script patterns.php dans notre exemple proviennent de : BBclone
www.bbclone.de.
140
$log = 1 ; // on loggue le trafic de debug en ligne // Ouverture du fichier en criture $nomfic = "log.txt"; if(!($fic_log = fopen($nomfic, "a"))) { print("Erreur: "); print("Cration ouverture impossible de $nomfic \n"); exit; } $user_agent = getenv("HTTP_USER_AGENT" ); // si on est sur un PC de dv et sous Chrome if ((strpos(XX.$_SERVER[SERVER_NAME],127.0.0.1)>0) or (strpos(XX.$_SERVER[SERVER_NAME],localhost)>0)) //alors on est considr comme un moteur pour permettre les tests { if ($verbotten) echo <br /> Chrome Gilles <br /> ; $bot_moteur = strpos($user_agent , "Chrome") ; if ($bot_moteur > O) { $gilles = "Chrome" ; // chrome sur local => le codeur $user_agent = "Chrome" ; // tre pris pour un bot } } // par dfaut on considre que visiteur est un internaute $internaute = 1; # Sil existe un referer alors internaute humain # car les robots nont pas de referer. if( empty( $_SERVER["HTTP_REFERER"] ) ) { $internaute = 0; } if ($verbotten) echo <br /> HTTP_REFERER = . $_SERVER["HTTP_REFERER"] . Vide = Moteur possible sinon c un humain <br />; // Si le visiteur renvoie un OS connu // il ne sagit pas dun robot foreach($os as $pattern => $o) { if ( preg_match( #.$pattern.#msi , $_SERVER["HTTP_USER_AGENT"] ) == 1 )
141
{ $internaute = 1; $os_name = preg_replace ( "/\\s{1,}/i" , - , $o ); if ($verbotten) echo <br /> OS = . $os_name . internaute == . $internaute . ; if ($log) { $uri = $_SERVER["REQUEST_URI"]; $var_now = time(); //date du jour fputs($fic_log, $os_name = . "\t" . $os_name . "\r\n" . sur page : . "\t" . $uri . "\r\n" . : . "\t\t" . date(DATE_RFC822 , $var_now) . "\r\n" . ========== ."\r\n" . "\r\n"); } break; } } // en debug, chrome doit tre vu comme un bot. if ($debug) { array_push($bots, $gilles); if ($verbotten) echo <br /> debug : Chrome mis dans pattern $bots ; $internaute = 0 ; } if ( $internaute == 0 ) { #On verifie de quel bot il sagit foreach( $bots as $pattern => $bot ) { if ( preg_match( #.$pattern.#i , $_SERVER[HTTP_USER_AGENT] ) == 1 ) { //on recupre le nom du bot $botname = preg_replace ( "/\\s{1,}/i" , - , $bot ); $uri = $_SERVER["REQUEST_URI"];
142
//Resquested URI by Crawler - Page vue par le visiteur $var_now = time(); //date du jour if ($verbotten) echo <br /> $botname = . $botname . sur page : . $uri . : . date(DATE_RFC822 , $var_now); if ($log) fputs($fic_log, $botname = . "\t" . $botname . "\r\n" . sur page : . "\t" . $uri . "\r\n" . : . "\t\t" . date(DATE_RFC822 , $var_now) . "\r\n" . ======= ."\r\n" . "\r\n"); break; } } } if ($internaute == 1) // 1 = humain { session_start(); if ($verbotten) echo ******* debug gg *** START SESSION pour humain . $user_agent . <br> ; } else if ($verbotten) echo ******* debug gg *** PAS SESSION car robot . $user_agent . <br> ; if ($log) fclose($fic_log); } // accolade de fin de fonction
143
$debug = 0 ; // Mettre 1 pour passer Chrome en outil de debug // simule un bot donc on doit viter session start // $debug 0 : internaute, lancer session start() $log = 1 ; // on loggue le trafic de debug en ligne // Ouverture du fichier en criture $nomfic = "log.txt"; if(!($fic_log = fopen($nomfic, "a"))) { print("Erreur: "); print("Cration ouverture impossible de $nomfic \n"); exit; }
Ce sont les dclarations classiques. $debug permet de forcer un navigateur Chrome comme bot. Cest pratique pour la phase de mise au point ou dvolution. Il suffit de surfer avec Chrome et de regarder le log. $verbotten permet de passer en mode Bavard. $log valide le suivi en chier log de certaines actions et informations. Continuons :
$user_agent = getenv("HTTP_USER_AGENT" ); // si on est sur un PC de dv et sous Chrome if ((strpos(XX.$_SERVER[SERVER_NAME],127.0.0.1)>0) or (strpos(XX.$_SERVER[SERVER_NAME],localhost)>0)) //alors on est considr comme un moteur pour permettre les tests { if ($verbotten) echo <br /> Chrome Gilles <br /> ; $bot_moteur = strpos($user_agent , "Chrome") ; if ($bot_moteur > O) { $gilles = "Chrome" ; // chrome sur local => le codeur $user_agent = "Chrome" ; // tre pris pour un bot } }
On rcupre lagent http du visiteur. Sur le PC de dveloppement, on peut passer le navigateur Chrome comme un bot. Il faudra tester la version "humaine" avec un autre navigateur.
144
Ensuite :
// par dfaut on considre que visiteur est un internaute $internaute = 1; # Sil existe un referer alors internaute humain # car les robots nont pas de referer. if( empty( $_SERVER["HTTP_REFERER"] ) ) { $internaute = 0; } if ($verbotten) echo <br /> HTTP_REFERER = . $_SERVER["HTTP_REFERER"] . Vide = Moteur possible sinon c un humain <br />; // Si le visiteur renvoie un OS connu // il ne sagit pas dun robot foreach($os as $pattern => $o) { if ( preg_match( #.$pattern.#msi , $_SERVER["HTTP_USER_AGENT"] ) == 1 ) { $internaute = 1; $os_name = preg_replace ( "/\\s{1,}/i" , - , $o ); if ($verbotten) echo <br /> OS = . $os_name . internaute == . $internaute . ; if ($log) { $uri = $_SERVER["REQUEST_URI"]; $var_now = time(); //date du jour fputs($fic_log, $os_name = . "\t" . $os_name . "\r\n" . sur page : . "\t" . $uri . "\r\n" . : . "\t\t" . date(DATE_RFC822 , $var_now) . "\r\n" . ========== ."\r\n" . "\r\n"); } break; } }
145
On considre que tout visiteur est un humain. Sil y a un http_REFERER, on conrme que cest un humain. Il existe des navigateurs humains sans REFERER. Testons le systme dexploitation. Si lOs est connu, cest un humain. Autrement, on considre que cest un bot. En mode Bavard ou Log, on trace les caractristiques du visiteur :
// en debug, chrome doit tre vu comme un bot. if ($debug) { array_push($bots, $gilles); if ($verbotten) echo <br /> debug : Chrome mis dans pattern $bots ; $internaute = 0 ; }
Chrome est pass comme bot en mode Debug. Si le visiteur est un bot, qui est-il ? Traons son passage :
if ( $internaute == 0 ) { #On verifie de quel bot il sagit foreach( $bots as $pattern => $bot ) { if ( preg_match( #.$pattern.#i , $_SERVER[HTTP_USER_AGENT] ) == 1 ) { //on recupre le nom du bot $botname = preg_replace ( "/\\s{1,}/i" , - , $bot ); $uri = $_SERVER["REQUEST_URI"]; //Resquested URI by Crawler - Page vue par le visiteur $var_now = time(); //date du jour if ($verbotten) echo <br /> $botname = . $botname . sur page : . $uri . : . date(DATE_RFC822 , $var_now); if ($log) fputs($fic_log, $botname = . "\t" . $botname . "\r\n" . sur page : . "\t" . $uri . "\r\n" . :
146
ce stade, nous savons si nous avons un visiteur humain ou robot. Action entreprendre pour un humain ou un bot :
if ($internaute == 1) // 1 = humain { session_start(); if ($verbotten) echo ******* debug gg *** START SESSION pour humain . $user_agent . <br> ; } else if ($verbotten) echo ******* debug gg *** PAS SESSION car robot . $user_agent . <br> ; if ($log) fclose($fic_log); } // accolade de fin de fonction
Ce script PHP contient deux dclarations de tableau : $bots en premier, suivi la n du chier par $os :
$bots = array( Mediapartners-Google[ /]([0-9.]{1,10}) => Google Mediapartners, Mediapartners-Google => Google Mediapartners, Googl(e|ebot)(-Image)/([0-9.]{1,10})
147
=> Google Image, Googl(e|ebot)(-Image)/ => Google Image, ^gsa-crawler => Google, Googl(e|ebot)(-Sitemaps)/([0-9.]{1,10})? => Google-Sitemaps,
Quelques centaines de lignes dnissent moins de 1 000 bots. Le mme principe est appliqu aux systmes dexploitation :
$os = array (wi(n|ndows)? => windows, linux[ /\-]([a-z0-9._]{1,10}) => linux, linux => linux, Mac[ _]?OS[ _]?X[ /]([0-9.]{1,10}) => macosx,
148
<div id="sousban"> </div> <div id="pagegauchetete"> <?php MiseEnPage::MenuGauche() ; ?> </div> <!-- fin page gauche tete --> <div id="pagecentretete"> <div id="sousban800"> </div> <!-- COLONNE DROITE --> <div id="pagedroite"> <?php $rubrique = 999 ; MiseEnPage::MenuDroite($rubrique) ; ?> </div> <!-- fin page droite --> <!-- *** CONTENU DES PAGES zone centre *** --> <div id="pagetext"> <h1>Filter les rsultats par rgion franaises </h1> <p> Par dfaut, les rsultats des rubriques interroges sont des informations propres toute la France. <br /> <br /> Pour obtenir des rsultats dune rgion franaise prcise, vous pouvez fixer un filtre ci dessous. Un click vous affichera tous les articles dune rgion donne. Tous les click suivant seront filtrs. Pour rcuprer la visibilit sur les articles nationaux, il suffit de cliquer sur<strong> France entire</strong>. </p> <?php // afficher les regions avec un lien par region $sql_query="SELECT * FROM region order by id ASC"; if ($request = mysql_query ($sql_query)) { // $line : tableau des n rows rsultat de la requte while ($line = mysql_fetch_array($request)) { echo filtrage sur : <a href=\articles/region/ . $line["id"] . /1.html\ rel="nofollow" > . $line["id"] . . $line["nom"] . </a> <br /> ; } }
149
else { echo debug : la requte : . $sql_query . message SQL : . mysql_error() . n\a pu aboutir - Erreur <br /> ; } ?> <!--fin page texte --> </div> <!-- fin pagecentre --> </div> <?php $map = MiseEnPage::bas() ; ?>
On commence par les require_once pour charger les diffrentes routines dont nous aurons besoin et par la mise en service ou non du session_start() via la fonction session_region(). La page est affiche en nofollow, noindex. Elle doit rester invisible aux bots de Google. Continuons :
<div id="sousban"> </div> <div id="pagegauchetete"> <?php MiseEnPage::MenuGauche() ; ?> </div> <!-- fin page gauche tete -->
150
<div id="pagecentretete"> <div id="sousban800"> </div> <!-- COLONNE DROITE --> <div id="pagedroite"> <?php $rubrique = 999 ; MiseEnPage::MenuDroite($rubrique) ; ?> </div> <!-- fin page droite --> <!-- *** CONTENU DES PAGES zone centre *** --> <div id="pagetext"> <h1>Filter les rsultats par rgion franaises </h1> <p> Par dfaut, les rsultats des rubriques interroges sont des informations propres toute la France. <br /> <br /> Pour obtenir des rsultats dune rgion franaise prcise, vous pouvez fixer un filtre ci dessous. Un click vous affichera tous les articles dune rgion donne. Tous les click suivant seront filtrs. Pour rcuprer la visibilit sur les articles nationaux, il suffit de cliquer sur<strong> France entire</strong>. </p>
La mise en page de diffrents lments et donnes secondaires sont affiches, rien dextraordinaire. Avanons :
<?php // afficher les regions avec un lien par region $sql_query="SELECT * FROM region order by id ASC"; if ($request = mysql_query ($sql_query)) { // $line : tableau des n rows rsultat de la requte while ($line = mysql_fetch_array($request)) { echo filtrage sur : <a href=\articles/region/ . $line["id"] . /1.html\ rel="nofollow" > . $line["id"] . . $line["nom"] . </a> <br /> ; } } else
151
{ echo debug : la requte : . $sql_query . message SQL : . mysql_error() . n\a pu aboutir - Erreur <br /> ; } ?>
On affiche en colonnes les diffrentes rgions administres dans la table region. Chaque rgion est "cliquable". Le lien est constitu de :
j j j j j
Article/region : via URL rewriting, on va adresser article.php en passant une rgion ID en argument. LID de la rgion entre / (slash). 1.html indique article dafficher la page 1. Le nom de la rgion. Ce lien est balis en nofollow au cas o malgr tout, un bot passerait sur cette page.
Une URL modie serait utilise au lieu dune URL propre. Deux URL distinctes mnent la mme page mais lune nest pas accessible Google. La page o la pose de ltre intervient est totalement interdite Google. Les 2 pages seront donc identiques au nuage de liens prs qui sera ordonn diffremment.
Google na rien reprocher un tel site. Il ny a pas de risque de pnalit concernant notre approche. Existe-t-il des sites pratiquant ce type de technique ? Oui, amazon.com par exemple. Le bot est inconnu et il reoit une URL modie. 95 % des bots ne travaillent pas pour des moteurs. Cette erreur possible ne prsente pas de risque particulier sauf si Google (ou Microsoft, ou Yahoo) change le nom de son bot et que loutil ne soit pas mis jour. Linternaute est pris pour un bot. Il naura pas accs au fonctionnement avec le ltre. Cette erreur possible ne prsente pas de risque particulier. Elle importune un peu linternaute et notre suivi webmarketing sera fauss concernant cet internaute.
152
Seul Apache ou ladministrateur du site web ont besoin de pouvoir accder aux scripts PHP sensibles, ceux qui donnent accs ladministration des donnes typiquement. Il faut donc les regrouper dans un rpertoire quil sagira de dfendre contre les intrus de toute nature :
j j j
bot de moteur ; scan de rpertoire : aspirateur de site, logiciel traquant les faiblesses dun site, etc. ; accs direct.
La partie "publique" des scripts se contentant dafficher sera en rpertoire daccs libre dans cette version. Dans le rpertoire php_inc, nous allons :
j j
153
# fonctionne sur OVH -- protection simple pour rpertoire sans .htpasswd dedans AuthUserFile / voir chemin obtenu via script php /php_inc/mdp/.htpasswd AuthGroupFile /dev/null AuthName "Accs Restreint " AuthType Basic <Limit GET POST> require valid-user </Limit>
php_inc contient :
j j
les include PHP ncessaires pour se connecter MySQL ; les include PHP ncessaires pour accder aux fonctions permettant de raliser des entres/sorties sur la base.
Un des problmes des dbutants : comprendre quel chemin absolu indiquer. Une ligne en PHP permet de rcuprer une telle information.
echo realpath(admin_backoffice.php);
Le script admin_backoffce.php est situ dans le rpertoire protger : php_inc/. Il contient cette ligne. En excutant le script, realpath donnera le chemin absolu utilis par lhbergeur sur votre serveur pour accder au rpertoire protger. Il ny aura plus alors qu copier/coller cette information dans les chiers .htaccess ncessaires. Il faut un utilisateur valide pour accder aux contenus de ce rpertoire :
j j
Tout utilisateur possdant lidentiant plus le mot de passe grs dans le chier .htpasswd. Apache : lappel ces contenus via un require_once ne pose aucun souci. Le login/mot de passe ne sera pas demand.
154
Le plus simple pour gnrer un mot de passe est de passer par un site comme celui-ci : http://shop.alterlinks.com/htpasswd/passwd.php. Vous saisissez votre identiant, le mot de passe souhait et vous navez plus qu recopier cette ligne dans notre chier .htpasswd. Cette ligne dans le chier .htpasswd signie que lidentiant gregoire a pour mot de passe un lment crypt. Mais le cryptage nest pas suffisant. Il est trs facile casser depuis le code crypt publi :
g8/49Yjq2Xzs0. Des utilitaires permettent de renverser le code et didentier le vrai mot
de passe correspondant. Il faut donc bloquer tout accs ce chier .htpasswd. Ainsi personne ne pourra tenter de renverser le code contenu dans le chier et obtenir ainsi le couple (identiant, mot de passe) lui permettant de pntrer dans le rpertoire sensible. On va, dans notre exemple, interdire laccs tout le rpertoire. Dans le rpertoire php_inc/mdp/, on va crer un chier .htaccess :
AuthUserFile /homez.95/apicslil/blog/php_inc/mdp/.htpasswd AuthGroupFile /dev/null AuthName "Accs interdit" AuthType Basic deny from all
deny from all interdit le rpertoire et ses contenus quiconque. Seul Apache y a accs
ainsi, bien sr, que FTP an de pouvoir mettre jour ce chier. Si on veut pirater votre site, il faudra dabord pirater le serveur Apache ou le serveur FTP, ce qui est dj nettement plus difficile. Votre site sera ainsi beaucoup mieux protg. Le prsent paragraphe ne dispense nullement un codeur/webmestre de complter ses connaissances en scurit informatique pour protger son site web.
155
5
5.1 Web 2.0 et Google ................................... 5.2 Rseau social et rfrencement ........................ 5.3 Interactivit Web 2.0 et rfrencement automatis . 5.4 Rsum de ce chapitre ................................. 158 159 163 178
identier les pages dont on parle sur le Net ; identier les pages succs
158
Vous pouvez simplement placer un automate dtectant les mots-cls sensibles et bloquer la moindre saisie suspecte :
j j j
Le post-rejet avec message derreur. Ladresse IP dorigine en mode Ajout de commentaire sur une page La classe IP de la personne malintentionne en mode Ajout de commentaire sur une page. Tous les internautes de ce fournisseur daccs seront eux aussi bloqus. Vous pouvez les basculer en modration avant publication pour diminuer la gne occasionne.
Ajout de texte et de mots plus ou moins cls, plus ou moins cohrents. Le poids de la page augmente en nombre de mots. Il est possible de renforcer la densit, par rapport aux textes dorigine, des mots-cls sur la page par des nouveaux textes. Par exemple, lajout automatique dun titre rappelant le thme de la page tous les 5 posts. Des algorithmes plus sophistiqus pourront tre dploys. Dans le cadre de ce livre, nous ferons simple. Ajout au l du temps. Les script PHP ne permettent pas didentier la date de mise jour dune page car celle-ci est produite la demande. En revanche, un moteur comme Google peut identier lajout de texte une page en la comparant celle prsente dans son cache. Il peut tracer la frquence de mise jour dune page et identier les pages recevant frquemment du texte cohrent.
159
Ce site est cens donner un score de prsence dURL dans les rseaux sociaux accessibles tout bot ou tout internaute non membre. Peu importe que les informations donnes par cet outil soit justes ou non. Il nous sert juste de l conducteur. Testons-le sur www.lemonde.fr.
c Fig. 5.1 : Site web lemonde.fr : ses backlinks visibles dans les rseaux sociaux selon socialmeter.com
Il est donc possible de cartographier les URL dposes dans divers rseaux sociaux. Facilitons le travail des internautes en leur mettant disposition une barre leur permettant de se connecter dun simple clic sur leurs rseaux sociaux favoris. Ce serait intressant de disposer de statistiques sur lusage de cette barre. Le site web http://www.addthis.com fournit un tel outil (il y aussi http://justaddme.com/ ainsi que http://www.letsgetsocialnow.com/ : Voici un JavaScript prt lemploi pour permettre de bookmarker dun seul clic lURL en cours :
<!-- AddThis Button BEGIN --> <script type="text/javascript"> var addthis_pub = "VotreIdDeCompte chez addthis.com";
160
</script> <a href= "http://www.addthis.com/bookmark.php" onmouseover="return addthis_open(this, , [URL], [TITLE])" onmouseout="addthis_close()" onclick="return addthis_sendto()"> <img src="http://s7.addthis.com/static/btn/lg-share-en.gif" width="125" height="16" border="0" alt="" /> </a> <script type="text/javascript" src="http://s7.addthis.com/js/152/addthis_widget.js"> </script> <!-- AddThis Button END -->
c Fig. 5.2 : Suivi des clics de mise en rseau social sur Addthis.com
161
Addthis permet de personnaliser, dans certaines limites, la barre cliquer. Ci-aprs, voici un exemple :
var addthis_pub = "VotreIdDeCompte chez addthis.com"; addthis_brand = Crer sa Boite; addthis_options = favorites, email, yahoobookmarks, digg, delicious, myspace, facebook, google, live, twitter, yahoobkm, linkedin, blogmarks;
Le site web exemple ne sera pas quip de cette barre de boutons AddThis. En effet, il faut ouvrir un compte pour avoir un JavaScript capable de suivre les clics. Il est trs facile dinstaller ce JavaScript. Lautre technique consiste mettre en uvre sa propre barre de boutons ; un principe simple que chaque codeur pourra ensuite dvelopper loisir :
j j
un pictogramme reprsentant le rseau social ( rcuprer sur le site web du rseau social) ; un onclick lance lURL du rseau social o il faut se connecter en transmettant lURL o linternaute est prsent.
Ce code est insr dans la fonction MenuGauche() de php_inc/MiseEnPage.inc.php. Cest pour cela que les guillemets sont prcds de backslash :
<p> Partagez <a rel=\"nofollow\" style=\"text-decoration:none;\" href=\"http://www.facebook.com/\" onclick= \"window.open (http://www.facebook.com/sharer.php?u= +encodeURIComponent(location.href) +&t=+encodeURIComponent(document.title)); return false;\" title=\"Bookmark to: Facebook\"> <img style=\"padding-bottom:0px;padding-top:0px;\" src=\"artpackage/facebook.gif\" alt=\"Bookmark : Facebook\" name=\"Facebook\" border=\"0\"> </a> </p>
162
c Fig. 5.3 : Article servant dexemple. Cliquer pour poser une question
Lobjectif sera de permettre un internaute de poser une question ou de poster un commentaire sur le contenu dun article affich par zoom.php. Un lien permet de lancer un formulaire de saisie. Volontairement, pour sparer les codes sources, nous avons sorti ce formulaire vers une page autonome. Le formulaire aurait pu tre intgr la page elle-mme. Cela aurait t plus pratique.
163
Ce formulaire, trs simple, permet classiquement de saisir un commentaire. Si on remplit les champs obligatoires, le post sera pris en compte immdiatement par le site.
c Fig. 5.5 : Page Merci retour possible vers la page commente
Une classique page de remerciement, isole dans un script PHP, an de pouvoir utiliser son URL unique pour tracer des statistiques via Google Analytics, par exemple. Un lien permet de revenir vers la page commente lorigine.
164
j j j j
renforcer la cohrence de larticle affich ; rcuprer les variables denvironnement indispensables au bon fonctionnement des diffrents scripts ; lancer les scripts permettant dafficher les diffrents posts dj existants ; proposer un lien pour saisir un post.
$expression_clef_strategique = $line["expression_clef"] : nous allons avoir besoin de lexpression cl stratgique de larticle affich. Nous le rcuprons directement dans lenregistrement affich. $url_de_zoom = $_SERVER[REQUEST_URI] : nous aurons besoin de revenir la page commente. Il nous faut mmoriser o nous sommes. On aurait aussi pu recalculer lURL via lID de larticle. Mmoriser lURI de la page prsente quelques avantages en termes de souplesse et dvolutivit. MiseEnPage::message_cet_article($id_Article, $expression_clef_strategique, $url_de_zoom) : on regroupe dans la classe MiseEnPage la gestion des messages
existants pour cet article en particulier. La bibliothque php_inc/MiseEnPage.inc.php reoit la fonction suivante :
public static function message_cet_article($id_article , $expression_clef_strategique, $url_de_zoom ){
165
require_once("RecordPost.inc.php"); $url_de_zoom = str_replace("&","|",$url_de_zoom ); print <div class="jcmbparalarge"> <h1>Thme : . $expression_clef_strategique . </h1> <span> <a href="post_affiche_formulaire_saisie.php?id_article= . $id_article .&url= . $url_de_zoom . " rel="nofollow"> Cliquer pour poser une question ou donner un avis sur le contenu de cette page </a> </span> <br /><br/> ; echo <span> Message(s) ou question(s) dj publis </span>; $post = PostHelper::findTousById_Article($id_article); PostHelper::AfficheTousPost($post) ; echo </div> ; // div jcmbparalarge } // fin de fonction message_cet_article
dafficher tous les post dj existants pour larticle en cours ; de proposer de commenter larticle en cours. require_once("RecordPost.inc.php"). Cette bibliothque regroupe toutes les fonctions permettant de manipuler des objets type Post. Nous la dtaillons un peu plus loin. $url_de_zoom = str_replace("&","|",$url_de_zoom ). On va transmettre lURI de la page zoom affichant larticle. Or cette URI possde un caractre & incompatible avec une transmission par URL. On remplace & par le caractre US peu usit | (pipe). <div class="jcmbparalarge">. On manipule uniquement des affichages classiques. La feuille de style est l pour permettre toute adaptation de chacun. Elle est dtaille un peu plus loin.
166
<h1>Thme : . $expression_clef_strategique . </h1>. On renforce la cohrence de la page en affichant entre balises h1 lexpression cl stratgique de larticle. <a href="post_affiche_formulaire_saisie.php?id_article=. $id_article .&url= . $url_de_zoom . " rel="nofollow">. Ce lien emmne linternaute vers
j j
le formulaire de saisie de son post. Pour permettre le retour la page prcise dorigine, on transporte dans lURL diffrentes informations (ID de larticle, URI dorigine). $post = PostHelper::findTousById_Article($id_article). Cette fonction renvoie un tableau dobjets Post. Ce sont tous les Post existant dj pour cet $id_article. PostHelper::AfficheTousPost($post). Cette fonction affiche tous les objets Post de ce tableau dobjets Post.
Examinons la bibliothque de fonction autour de lobjet Post : php_inc/RecordPost.inc .php. Nous nous limiterons aux fonctions utilises dans notre exemple :
<?php // ddie aux manipulations de lobjet Post class PostHelper {
Class PostHelper regroupe toutes les fonctions manipulant les objets Post. Class Post regroupe toutes les fonctions crant un objet Post et les classiques
167
/* * findTousById_Article : renvoie un tableau dobjets Post * null ou avec les N Post afficher pour $id_article */ public static function findTousById_Article($id_article) { $query = "select * from post_article where id_article = ".$id_article ; $result = mysql_query($query) ; if (empty($result)) { $post = null ; } else { $i = 0 ; while ($record = mysql_fetch_object($result)) { $post[$i] = new Post($record); $i++ ; } } return $post; }
findTousById_Article($id_article) recherche tous les posts dun mme article et les renvoie dans un tableau dobjets Post.
/* * AfficheTousPost : affiche * les N post du tableau $post pass en argument */ public static function AfficheTousPost($post) { $i=0 ; echo <br /><br /> ; while ($post[$i]) { echo <div class="jcmbfilet570"> ; echo <b>Publi par : </b> . $post[$i]->nom; echo . $post[$i]->prenom . <br /> ; echo <h2> . $post[$i]->titre_post . </h2> ;
168
echo <b>Message ou question</b> <p> . $post[$i]->text_post . </p> </div> ; echo <br /> ; $i++ ; } }
class Post { /* * Attributs de lobjet Post */ public $id; public $id_article; public $nom; public $prenom; public $email; public $text_post; public $titre_post; /*
Notre objet Post est dsormais dni. Chacun pourra lenrichir sa convenance. Par exemple, lajout dun champ date permettrait de noter la date de publication de chaque post :
* Constructeur dun objet : de $record * dans les attributs de lobjet juste cr en mmoire */ public function __construct($record="") { if ($record) { $this->id = $record->id; $this->id_article = $record->id_article; $this->nom = $record->nom; $this->prenom = $record->prenom; $this->email = $record->email; $this->text_post = $record->text_post; $this->titre_post = $record->titre_post; } }
169
post_article. Nous sparons la manipulation des donnes des contraintes daffichage. Dans php_inc/ MiseEnPage.inc.php, la fonction message_cet_article appelle le <div class="jcmbparalarge">. Ensuite, cette fonction affiche via de simples balises type h1, h2, span et p. Le comportement et laffichage des contenus grs par ces balises sont pilots par la feuille de style dont voici un extrait :
.jcmbparalarge { width:570px; height: auto; padding: 5px 3px 0 3px; float:right ; } .jcmbparalarge h1 { font-size:14px; color:#2C6A93;
170
background-color:inherit;height:25px; font-weight:bolder} .jcmbparalarge h2 { font-size:12px; color:#2C6A93; background-color:inherit;height:25px;} .jcmbparalarge p { font-size:12px; color:black; background-color:inherit; border:1px solid grey; padding: 5px 3px 0 3px; font-weight:normal} .jcmbparalarge span { font-size:14px; color:#2C6A93; background-color:inherit;height:25px; font-weight:bolder} .jcmbparalarge a{ color:#2C6A93; background-color:inherit; text-decoration: underline} .jcmbparalarge a:hover{ color:#ffbe33; background-color:inherit; text-decoration:underline} .jcmbfilet570{ width:570px; height: auto; padding: 5px 3px 0 3px; float:right ; border:1px solid #2C6a93;}
La feuille de style du formulaire de notre exemple est drive dun exemple ou dinformations techniques exposs dans ces pages :
http://www.cssdebutant.com/formulaire-css.html ; j http://www.babylon-design.com/site/index.php/2007/09/24/192-boutons-extensibles-css-compatiblestous-navigateurs.
j
La voici :
.cssform p{ width: 400px; clear: left; margin: 0; padding: 5px 0 8px 0; padding-left: 155px; /*width of left column : the label elements*/
171
border-top: 1px dashed #2C6A93 ; height: 1%; } .cssform label{ font-weight: bold; color:#2C6A93 ; float: left; margin-left: -155px; /*width of left column*/ width: 250px; /*width of labels. Should be smaller than left column (155px) to create some right margin*/ } .cssform input[type="text"]{ /*width of text boxes. IE6 does not understand this attribute*/ width: 250px; } .cssform textarea{ width: 250px; height: 150px; } /* Bouton avec effet - ne marche pas en IE6 ? */ input[type=submit], input[type=reset] { border:2px outset #EAEAEA ; background-color: #E3E3E3 ; font-weight:bold; color:#2C6A93 ; cursor:pointer; } input[type=submit]:hover, input[type=reset]:hover { border:2px outset white; background-color:white; } input[type=submit]:active, input[type=reset]:active { border:2px inset #A6BEDE; background-color:#2C6A93; color:black; }
172
En cliquant sur le lien pour ajouter un post la page, nous accdons au formulaire, volontairement mis lcart du code source de zoom.php. Chaque fois quon isole les codes sources dans des chiers spars, se pose la question des passages darguments et de la compatibilit avec le rfrencement sur Google. Le plus simple est de tout grouper dans une page mais cela alourdit le code source. Dans notre exemple, nous sommes dans un formulaire dont lURL sera propre chaque page article de dpart. Pour viter de massifs duplicate contents, les pages formulaires sont en noindex, nofollow, et tout lien menant elles sera en rel="nofollow". Voici le code source du formulaire :
c Fig. 5.6 : Le formulaire afficher <?php // post_affiche_formulaire_saisie.php require_once("php_inc/MiseEnPage.inc.php"); $title_page = "crer sa boite - formulaire poster un commentaire" ; $meta_description_content = "crer sa boite - formulaire poster un commentaire" ; $rep = "./" ; $follow_index = 0 ; // pas de dup content
173
Pour viter des duplicate contents cause de ce formulaire identique pour tous les articles, on le passe en noindex, nofollow :
MiseEnPage::haut($title_page , $meta_description_content , $rep , $follow_index ) ; ?> <div id="sousban"> </div> <div id="pagegauchetete"> <?php MiseEnPage::MenuGauche() ; if (isset($_GET["id_article"])) $id_article = $_GET["id_article"]; if (isset($_GET["url"])) { $url_de_zoom = $_GET["url"]; // o il faudra retourner }
On mmorise les deux arguments passs en paramtres : id_article et url. En fait, lURL contient uniquement lURI de la page zoom.php dorigine. Comme nous le verrons dans le prochain script, cest suffisant et cela scurise notre application. En effet, une URL ne peut dpasser 255 caractres. En utilisant strictement lURI bien plus courte que lURL complte, on reste loign de cette limite :
?> </div> <!-- fin page gauche tete -->
<div id="pagecentretete"> <h1> Poser une question ou commenter un contenu de page </h1> <form id="Formulaire_saisie_post" name="Formulaire_saisie_post" method="post" class="cssform" action="<?php $s = post_traite_formulaire_saisie.php ?id_article= . $id_article . &url= . $url_de_zoom ; echo $s ;?>" >
La seule mthode pour passer une URL avec des arguments dans un champ action dune form consiste faire un echo PHP de la chane de caractres :
<p> <label for="nom_posteur">Nom : <br /><i>Obligatoire</i></label>
174
<input type="text" name="NOM" value="" /> </p> <p> <label for="prenom_posteur">prnom : </label> <input type="text" name="PRENOM" value="" /> </p> <p> <label for="email">Votre Email : <br /><i>Obligatoire, ne sera ni affich, ni communiqu</i></label> <input type="text" name="EMAIL" value="" /> </p> <p> <label for="titre">Titre de votre question ou avis </label> <input type="text" name="TITRE_POST" value="" /> </p> <p> <label for="comments">Votre question ou commentaire : </label> <textarea name="TEXT_POST" rows="10" cols="40"></textarea> </p> <div style="margin-left: 250px;"> <input type="submit" value="Validez" /> <input type="reset" value="Annuler" /> </div> </form> </div> <!-- fin pagecentre tete --> <?php MiseEnPage::bas() ; ?>
Le reste du formulaire est classique et ne demande pas de remarque particulire. Un clic sur Envoyer lance le script post_traite_formulaire_saisie.php.
<?php // post_traite_formulaire_saisie.php require_once("php_inc/init.inc.php"); require_once("php_inc/RecordPost.inc.php"); require_once("php_inc/MiseEnPage.inc.php");
175
On mmorise les informations pour construire le lien qui nous renverra vers la page dorigine :
if( ($_POST[NOM] == "") || ($_POST[EMAIL] == "") ) { $champ_non_saisi = "Nom ou email non saisi ... Ces donnes sont obligatoires - Merci de les saisir" ; }
176
j j
une chane de caractres exempte de tout code HTML ou autres. ereg_replace("<[^>]*>" retire toute balise HTML. Cette fonction est en doublon apparent avec strip_tags(). une (lointaine) poque, strip_tags() ntait pas aussi able quactuellement. Trim()supprime les caractres invisibles comme les tabulations, par exemple. strip_tags()retire toute balise HTML ou PHP.
aucun code HTML perturbant laffichage ; aucun caractre invisible perturbant laffichage ou le fonctionnement des scripts PHP.
Le caractre & est ltr lors des passages darguments. On ne se retrouve donc pas avec des URI amputes quand on les passe en argument. En remplaant & par | puis en inversant quand on a besoin de lURI originale, on rgle ce problme.
Print " <h1> Merci </h1> <h3> Nous vous remercions davoir pos une question ou davoir comment cette page <br /><br /><br /> <a href=http://". $_SERVER[HTTP_HOST] . $url_de_zoom . "> Retour la page dorigine </a>
177
On reconstruit lURL complte compose de http:// concatne au nom de domaine $_SERVER[HTTP_HOST] puis lURI dorigine. On ne peut pas faire autrement. En effet, un JavaScript pilotant lhistorique pour faire deux coups en arrire ne recharge pas la page. Donc le post nouvellement ajout ny gure pas. Voil pourquoi on mmorise depuis le dbut lURI de notre page de dpart. Ctait pour pouvoir y retourner avec un rechargement complet de la page donc avec le post juste ajout.
</h3>" ; } else { Print " <h1> Erreur de saisie </h1> <h3> Nom ou email non saisi ... Ces donnes sont obligatoires Merci <br /><br /><br /> <a href=javascript:history.back()> Retour au formulaire contenu dj saisi maintenu</a>
Linternaute peut retourner au formulaire dont la saisie a t conserve. Il peut ainsi corriger et cliquer une nouvelle fois :
<br /><br /> <a href=index.php> Retour la page daccueil </a> </h3> "; } MiseEnPage::bas() ; ?>
Dans notre exemple, nous nous sommes contents de grer des questions ou commentaires dinternautes par page publiant un article complet.
178
Rsum de ce chapitre
Dautres aspects, dautres "jeux" incitant les internautes intervenir sur une page du site, et ainsi contribuer son rfrencement, pourront tre mis en uvre :
j j
Nous avons vu quil valait mieux viter de laisser Google indexer les formulaires. Il est si facile de crer des duplicate contents ds quon code avec des passages darguments en URL. Une rgle est ainsi rappele : pas de passage darguments en URL ou ces pages ne sont pas soumises indexation auprs de Google. Nous avons entraperu une autre approche technique : plutt que de prvoir N pages se rpartissant les scripts, uniez tout sur une page. Cela simplie les passages darguments en URL. Cela peut poser quelques problmes avec Google Analytics par exemple (ncessit de disposer dune URL ddier un remerciement pour pouvoir suivre des objectifs). Les algorithmes de base vus dans ce chapitre sont dclinables linni selon vos cas et besoins particuliers.
179
6
6.1 Symptmes et causes. .................................. 6.2 Pages mal positionnes : dautres causes ............ 6.3 Flash et le rfrencement dans Google .............. 6.4 Rsum de ce chapitre ................................. 182 184 193 195
pages absentes de lindex de Google ; pages mal positionnes sur leurs expressions cls.
Gnralement, plusieurs causes se combinent pour aboutir un de ces deux symptmes. Refaisons un point sur ce que nous avons vu dans les chapitres prcdents pouvant occasionner ce type de symptme. Nous tudierons ensuite les nombreuses autres causes.
j j j
Dsindexation de page : la page est difficile trouver. La commande site permet de lafficher ainsi quune recherche sur un bloc entier de la page. La Google bar indique une mesure grise. Dsindexation partielle : sur certaines phrases pourtant prsentes en contenu, la page est trs difficile faire apparatre en SERP de Google. Quand elle apparat, elle est seule dans le rsultat. Liste noire : toutes les pages du site sont inexistantes dans lindex de Google. Page absente mais dautres pages du site sont prsentes. Le retrait de Page rank. Les pages suspectes davoir des liens trop incohrents voient leurs Page rank fondre.
Les dsindexations sont des pnalits Google classiques pour diffrentes formes et diffrents volumes de duplicate contents. La mise en liste noire sanctionne des optimisation trop agressives, typiquement du spamdexing. Il ne vous reste plus qu faire une demande de rinclusion. Nous conseillons vivement de suivre les recommandation de cette page : http://www.mattcutts.com/ blog/reinclusion-request-howto/. Une page absente quand dautres pages du site sont prsentes indique potentiellement :
j
Une inaccessibilit de la page par un lien valide. Cherchez les liens en JavaScript ou en Flash vers cette page, vous les trouverez. Cherchez des liens en dur classiques ; vous devriez dcouvrir quils sont inaccessibles aux bots de Google. Il est donc impossible davoir la page indexe.
182
Symptmes et causes.
La page est enfouie trs profondment dans une hirarchie de niveaux. En conjuguant cela avec un Page rank faible, vous obtenez une page qui mettra du temps avant dtre prise en compte dans lindex de Google.
j j j j
Duplicate content : de nombreuses maladresses en gestion de contenus ou en programmation peuvent aboutir la dsindexation dune partie des pages dun site. Les diffrents paragraphes des chapitres prcdents sur lURL rewriting, les URL avec passage darguments, les copis/colls maladroits traitent de ce sujet. Une optimisation trop agressive ou maladroite dclenchant un spamdexing et entranant des pnalits de Google. La mise en uvre de volumes de liens incohrents avec vos contenus faisant passer vos pages pour des fermes de liens louer, des fermes de paidlinks. Avoir mis en uvre des techniques de triche, hors paidlinks, et stre fait prendre par Google. .htaccess mal cod entranant des duplicate contents.
Labsence de qualit dans le travail de rfrencement noccasionne pas uniquement des pnalits actives de Google. Cela peut tout simplement faire effondrer le positionnement de toutes les pages du site sur tous les mots-cls viss. Illustration :
j j j j
Un site web peut avoir une page daccueil avec un Page rank de 5. De nombreux backlinks pointent vers lui. Toutes les pages internes possdent un Page rank confortable, de 2 4. Aucune pnalit nest prsente sur une page du site. Mais toutes les pages du site sont absentes de toute expression-cl, sauf la page daccueil sur le nom de domaine du site. L, cest dsastreux.
Nous avons vu au chapitre 1 diffrentes approches mettre en uvre pour russir un rfrencement. Ngliger ces approches nimplique pas des pnalits actives de Google. Cela peut simplement signier une absence en positionnement faute de rfrencement. Vous pourrez avoir tous les backlinks du monde, cela ne changera rien. Vos pages seront mal positionnes faute de rfrencement de qualit.
183
Nous avons vu que le rfrencement puis le positionnement russi de pages prcises sur des expressions cls prcises est issu de la qualit du travail de rfrencement sur toutes les pages du site. Si une partie des pages reoit des pnalits, cest toute la stratgie de rfrencement qui est affecte. Ainsi, des causes apparemment indirectes peuvent se cumuler avec dautres erreurs ou maladresses et aboutir un positionnement rat.
Ils ont commenc avant vous et les algorithmes de Google donnent une forme de "prime" lanciennet, visant essentiellement ceux qui sont arrivs les premiers en page 1 des SERP. Chaque internaute qui clique sur une URL depuis une SERP Google enrichit des bases de statistiques et cette URL se trouve renforce dans son positionnement. Difficile dobtenir ce genre de bonus si on est justement absent des places en or dans les SERP de Google. Si lexpression cl vise fait lobjet dune concurrence acharne entre de nombreux acteurs, le moindre dfaut dans le rfrencement des pages aboutit un recul immdiat et important. Un seul critre incohrent et cest un recul immdiat de plusieurs places, ce qui entrane un taux de clics moindre et donc, si rien nest fait, le dbut dun dcrochage possible hors des places en or dans les SERP.
Le nombre dexpressions cls propres une profession est plus ou moins limit. Quand on loue des bureaux par exemple, le nombre dexpressions cls est trs limit. Vu le nombre de socit louant des bureaux, vides ou meubls, sur Paris par exemple, on voit
184
tout de suite que ds que toutes ces socits auront professionnalis leurs sites et le rfrencement associ, la bataille pour "location bureau Paris" va devenir acharne.
Les backlinks
Les sites concurrents ont des backlinks de meilleures qualit et en plus grand volume que votre site. Si vos concurrents grent des tags cloud et pas vous, sils ont automatis leur rfrencement et pas vous, vous savez ce quil vous reste faire. Mais il y a aussi les backlinks externes. Nous quittons alors le domaine de ce livre et passons au web marketing. Je vous renvoie sur ce sujet au Guide Complet du rfrencement sur Google dit chez Micro Application.
JavaScripts
Tout lien insr dans un JavaScript est invisible pour un bot de Google. Si tous vos menus sont en JavaScript, il va falloir prendre dautres mesures :
j j
remplacer ces menus droulants JavaScript, en gnral trs sympathiques et trs jolis, par lquivalent en HTML par exemple ; laisser les menus en place et doubler ces menus par des arborescences de liens en bas de page.
Notre prfrence va paratre surprenante ; la deuxime option : doubler les menus JavaScripts par les liens en bas de page.
185
Voici pourquoi :
j j
Les menus JavaScript sadressent exclusivement aux internautes humains. On peut faire tout ce que lon veut. Aucun impact sur le rfrencement. Les arborescences de liens en bas de page sont peu visibles pour les humains. Ils ne choquent personne. On vient simplement de dcliner une forme de tags cloud, de nuage de liens. Il nest pas vident de russir coder un menu droulant en HTML, qui soit lisible par tous les navigateurs, valid par le web marketing, accessible techniquement aux bots des moteurs de recherche et qui contiennent les mots-cls dont le rfrenceur a besoin.
Personne ne sait exactement comment ragit et comment ragira Google sur les liens en bas de page. Existe-t-il des pnalits quand ils ne sont pas en haut de page ? Quelques tests nont rien montr de tel. Par prudence, il serait bien de :
j j j
Faire apparatre des lments aprs larborescence de liens : un pied de page avec "mentions lgales " et autres rptitions, des lments de charte graphique, etc. crire ces liens dans une taille de police de 10 minimum. Appliquer les mme rgles de prudences en lutte contre le duplicate content que pour les nuages de liens. Lordre des liens doit changer, les mots-cls doivent varier, le texte des liens doit lgrement changer chaque page.
Au vu de nombreux audits et tests, actuellement, le pire ennemi dune arborescence de liens en bas de page est le duplicate content et non le risque de voir Google ne pas prendre en compte des liens placs trop bas dans une page.
Frame
Le traitement technique pour les frames est trs simple : la poubelle. Les raisons dexister de cette technique ont disparu :
j
Dbit lent et cher du rseau : qui se souvient de RNIS 2 canaux B 64 kbit/s facturs par France Telecom au double du tarif communication nationale pour un dbit rel oscillant entre 1,5 et 5 fois un modem classique ? Les notes Internet taient de 2 000 francs HT/mois en moyenne. (En tenant compte de lination, cela fait 500 600 euros HT/mois daujourdhui.) Les frames diminuaient le besoin de bande passante. De tout petits crans sur les PC et les Mac.
De nombreuses tudes ont montr que les usagers naimaient pas les sites utilisant des frames.
186
Des spcialistes ont dvelopp des techniques pour russir le rfrencement de sites utilisant des frames : pourquoi pas. Mais si on doit conjuguer la complexit des frames et celle automatisant le rfrencement tel quon le voit dans cet ouvrage, les codes sources vont prendre un fort embonpoint prjudiciable une maintenance aise et rapide.
Votre codeur XHTML/CSS a dni des classes titres propres au site en feuille de style. Elles sont srement trs jolies mais sans utiliser les balises Hn, le rfrencement de votre page sera srieusement handicap. Un titre devrait tre cod ainsi pour quil soit accessible techniquement et smantiquement Google :
<div class="maclasse"> <h1>Titre avec mots clefs </h1> <span> Titre destins aux internautes humains, jeux de mots, humour etc. autoris ici </span> </div>
On dnit une classe. Dans celle-ci, on va rednir toutes les balises notre convenance, graphique, mais aussi pour le rfrencement :
.maclasse h1 {
187
Cette balise H1 est personnalise pour le site mais, avec une taille de 14px, elle est plutt discrte pour une balise de cette importance. Elle nous permettra de faire des titres truffs de mots-cls mais relativement peu visibles.
.maclasse h2 { font-size:12px; color:#2C6A93; background-color:inherit;height:25px;}
Mme chose pour cette balise H2 ; elle est plutt discrte en visibilit sur une page. An de ne pas abuser des balises H1 sur une page, on pourra utiliser bon escient cette dnition de H2.
.maclasse p { font-size:12px; color:black; background-color:inherit; border:1px solid grey; padding: 5px 3px 0 3px; font-weight:normal;}
Ce span, lui, est exceptionnel. Colori, 20px en taille de font, gras, un texte entre balises <span> sera trs visible sur la page. Lusage en est tout trouv : il servira pour les titres destins aux humains. Vous pourrez faire usage dhumour, de jeux de mots, etc. Pour Google ce nest que du texte, quelques mots bizarres noys dans les mots de toute la page. Les consquences ngatives sont inmes, ngligeables. Rsumons-nous : on a bien redni les balises Hn et elles restent lisibles comme balises Hn, ce qui est fondamental pour le rfrencement russi dun site.
188
Splash Page
Les splash pages permettent de regrouper des informations directionnelles sur la page daccueil. Ici, sur le site de lUnion europenne, le choix est offert de choisir parmi les 22 langues actuelles de lUnion europenne (le Groenlandais nest pas encore une langue officielle ; inutile de la chercher dans la liste). Une splash page est trs pratique quand on ne sait pas trop comment rediriger un internaute humain : choix de la langue, choix du mtier de lentreprise, etc. Mais une splash page est une catastrophe pour le rfrencement dun site :
j j
Elle bloque avec des informations sans intrt la page daccueil qui aurait mieux faire. Elle gaspille le Page rank. Chaque saut dans un niveau hirarchique cote en gnral un point de PR, en tout cas sur un site hirarchis, sans nuages de liens et sans interfrences avec des backlinks externes.
189
Impossible de placer un nuage de liens sur une telle page : elle nest cohrente avec rien.
Vous laurez compris : lUnion europenne peut se permettre une splash page ; faute de concurrence, les inconvnient cits prcdemment ne feront gure de mal son trac. Le site web dune PME lui ne peut se permettre un tel luxe pour un usage aussi inutile et superu.
Splash page
On peut dclarer comme Splash page toute page daccueil ne contenant pas de texte ou presque pas de texte et servant rediriger les internautes vers des sous-choix : par langues, par produits, par types de spectacle, etc.
On la laisse et on ajoute un copieux bas de page an de lester cette page en volume de caractres.
c Fig. 6.3 : Un bas de splash page sous forme dun copieux texte
La page daccueil du site de la gure C06-30 a tendance tre une splash page. Pas assez de texte unique, texte de page daccueil pas assez ou mal centr sur les mots-cls, nous avons l une splash page. En ajoutant un copieux bas de page strictement composs de textes uniques et utilisant les mots-cls du mtier, de balises Hn, le positionnement de cette page daccueil a russi.
j
Lautre approche : on conoit une page daccueil intgrant la redirection des internautes vers des sous-destinations.
190
Pour le codeur, le problme est simple rsoudre. Soit la page est conue une nouvelle fois pour liminer la splash page, soit il suffit de coder une zone de Hn et de <p> pour permettre le lestage en mots-cls et autres textes de la home page.
Spamdexing involontaire
Que ce soit en JavaScript ou en script PHP ct serveur, voici la mise en uvre de divers algorithmes pas assez tests peut aboutir la cration de spamdexing :
j j
Police de caractre ayant la mme couleur que le fond de page. Texte variant selon le prol de linternaute : il accepte ou non les cookies sur une page ayant la mme URL. Attention, cela revient afficher un texte selon lorigine, un moteur de recherche ou un humain : nous avons alors un cloaking. La mme base MySQL fait fonctionner diffrents sites avec les mme donnes.
Les possibilits derreurs sont vastes. Les calques DHTML sont une source doptimisation intressante mais aussi de bogues dgnrant en spamdexing. Un texte reste verrouill en hidden sans aucune possibilit de le faire revenir en visible. Vous avez un spamdexing trs facile dtecter.
191
Un point = un calque. Un arc = le basculement dun tat vers un autre : visible vers hidden et inversement. Un bot anti-fraude suit le l de la page et cartographie, dans le code JavaScript, les calques et les changements dtat. Un programme sur le serveur transpose ceci dans une matrice. Trs vite, les boucles non fermes sur hidden apparaissent. Chacune de ces boucles non fermes correspond un calque restant bloqu sur hidden, donc un texte invisible linternaute, mais ce mme texte est lu par les bot "normaux" de Google et index comme du texte normalement apparent aux humains : spamdexing dtect. Cette technique ou des variantes sont appliques dans de nombreux domaines du gnie logiciel, notamment pour abiliser des codes critiques : missiles, fuses, avionique Pour conclure cette illustration : aucune technique de triche en programmation ne peut rester indtectable. Pour aller chercher les limites de Google, il faut aller sur des terrains "mouvant" o lhumain, le code et lenvironnement se mlangent et saturent ses algorithmes anti-fraudes. Cest un des points abords au chapitre suivant.
ALT est une balise utilise par les terminaux pour mal voyant. Elle "traduit" le
contenu dune image. TITLE est une balise info bulle destination des voyants. Elle complte le visuel par un texte saffichant quelques secondes ct de limage. En clair, il ny a aucune raison que ces descriptifs changent pour chaque page pour un mme visuel.
192
Utiliser les script PHP/MySQL pour personnaliser outrance le contenu dune page en personnalisant les balises des images rptes sur chaque page du site est donc un pas trop vite franchi. On peut aussi personnaliser les pictogrammes, les traits, etc. L, on obtient une optimisation trop agressive et facile dcouvrir. Les mme chiers images changent de balises ALT et TITLE chaque page du site. Puisque cest facile dcouvrir, utilisons une base MySQL et un script PHP pour changer les noms des chiers images et les personnaliser pour chaque page en mme temps que leurs balises ALT et TITLE. Mauvaise ide. En effet, lheure o Google tente de naliser un logiciel capable dindexer une image daprs son contenu, il serait maladroit de laisser une mme image dans des chiers diffrents pour des pages distinctes et avec une personnalisation adapte chaque page. Nul doute que cela fonctionnera un certain temps. Seul Google sait combien de temps il laissera des black hat ouer ainsi ses algorithmes avec des optimisations trop agressives.
Une optimisation pour demain
Utiliser une bibliothque graphique pour automatiser la personnalisation des images elles-mmes en fonction du contenu de la page est une ide creuser, prometteuse. Sur ces images ainsi modies, on pourra greffer sans crainte une personnalisation des balises ALT et TITLE.
La nuance est importante en rfrencement. Il nest pas possible de rfrencer correctement un "site" en ash, cest--dire des animations interconnectes entre elles via des liens ash. Les philosophies de dveloppement de programmation sont trop loignes des normes Google et du W3C pour permettre une adaptation aise de lun lautre. Mme avec laide de Adobe, Google pourra difficilement atteindre la qualit technique quil a atteint sur le HTML classique. Dautres raisons militent pour une prise en compte minore des animations ash :
193
j j j
Tant que Google ne pourra pas injecter du AdWords dans les animations ash, rfrencer des sites ash complets revient se tirer une balle dans le pied. Les SEO black hat pourraient proter de la situation pour mettre au point des stratgies en charge de ouer les algorithmes de Google. Nous ne voyons pas comment un lien social ou un bookmark pourrait pointer une partie prcise lintrieur dune animation ash. Cest loppos de la philosophie Google actuelle.
En revanche, des animations ash simples, stockes individuellement sur des pages HTML relies entre elles par de classiques liens offrent dexcellentes perspectives. On peut rfrencer ces pages. En effet, petit petit Google devrait rentrer dans les animations simples pour y lire certaines donnes. Mais surtout, le plus important est que nous disposons de la page elle-mme pour effectuer le travail classique de rfrencement. Et puis touche nale, en considrant une animation ash comme un objet multimdia parmi dautres, on ne contrarie en rien la stratgie de Google. La lecture des informations publies par Google conforte cette approche quand on les lit entre les lignes.
SWFobject2 constitue un indniable progrs pour les dveloppeurs. Mme les rfrenceurs y trouvent des amliorations. En dtaillant la nouvelle formule SWFobject2, on dcouvre de nombreuses amliorations concernant lintgration de Flash au monde HTML, mais cest hors contexte du prsent livre et les quelques possibilits offertes en rfrencement. Il est retenir aussi que linitiative SWFobject2 semblerait devenir le standard pour lancer une animation Flash. Un contenu alternatif peut tre dni et soumis pour chaque animation ash au navigateur de linternaute. On rejoint la balise ALT pour les images en HTML. Le contenu alternatif lanimation Flash est soumis Google et aux autres moteurs de recherche. En examinant de prs ce contenu alternatif, nous avons :
j j
194
Rsum de ce chapitre
En clair, il y a tout ce quil faut pour aider au rfrencement dune animation Flash simple. Si votre animation Flash contient la totalit de votre "site", vous aurez juste un bloc de texte pour dcrire le tout, ce qui se rvlera totalement insuffisant face des concurrents ayant des sites en HTML. Il ne vous restera plus qu doubler votre site Flash par un site en HTML.
195
7
7.1 Les rgles du positionnement vont changer .......... 7.2 Intrts des rsultats de recherche personnaliss .... 7.3 Arrive de Personalized Search Results .............. 7.4 Les informations personnelles utilisables .............. 7.5 Pourquoi Personalized search results ? ............... 7.6 Les limites imposes Google ........................ 7.7 Baisse ou hausse du trac ............................. 7.8 Rfrenceur 2.0 ......................................... 7.9 Rsum de ce chapitre ................................. 198 202 204 205 208 210 213 215 230
le contenu et son rfrencement dans le site lui-mme ; les backlinks internes ou externes.
Depuis de nombreuses annes, Google enrichissait petit petit ces deux approches par un ltrage nomm personnalized search [results] en anglais. Lobjectif de ce ltrage est dliminer des SERP les propositions de site inutiles pour linternaute. Cela explique pourquoi une requte effectue Bruxelles naffiche pas toujours la mme SERP que la mme requte saisie la mme seconde depuis Paris. Les premires rgles de ltrage ont t simples ; elles concernaient essentiellement la golocalisation.
198
Un exemple : Un internaute est en rgion parisienne et saisit le mot-cl parking depuis son navigateur habituel, Google Chrome, avec lequel il consulte son compte Google, mais il nest pas connect sur ce compte au moment de la requte. Il est cens tre anonyme.
199
Le numro IP a t interprt par Google. Il est manifestement en France, probablement en rgion parisienne. Linternaute sest connect ce matin son compte Google mais sest ensuite dconnect. Les serveurs Google ont manifestement interrog un cookie sur le navigateur Chrome. La soi-disant session anonyme est en fait parfaitement authentie. Google ne sen cache mme pas sur son blog officiel en sous-entendant que, connect ou non, Google tentera didentier tout internaute utilisant ses services (voir un peu plus loin et dans le chapitre annexe webographie les URL consulter sur ce point). Le rsultat est personnalis :
j j
De nombreux parking en rgion parisienne sont proposs. Un Google map locator offre des parkings, le plus prs possible de la ville du domicile de linternaute. Clairement, Google a utilis un cookie et les informations personnelles du compte, en loccurrence son adresse, pour le localiser aussi prcisment. Hors la zone gographique, Google na aucune information pour personnaliser davantage cette SERP. Lhumoriste Gustave Parking gure dans les premiers rsultats ainsi que le site de la socit Noparking qui commercialise un logiciel. Les algorithmes de Google proposent un mix de rsultats couvrant les diffrents thmes dpendant de ce mot-cl : essentiellement des parkings pour vhicules, un humoriste, un diteur de logiciels.
La mme requte depuis Firefox et aucun historique ou cookie sur mon compte Google dans ce navigateur modient la SERP. Le rsultat est plus faiblement personnalis :
j j
Comme auparavant, de nombreux parkings en rgion parisienne sont proposs. Hors ma zone gographique, Google na l aussi aucune information pour personnaliser cette SERP. Lhumoriste Gustave Parking, le site de la socit Noparking (logiciel en gestion du temps) et Wikipedia gurent dans les premiers rsultats. Plus loin, la SERP affiche des parking en France mais hors rgion parisienne : Marseille et quelques autres grandes villes. Il ny a aucun Google map locator proposant des parkings le plus prs possible de la ville correspondant au domicile de linternaute.
Les rsultats de recherche personnaliss en 2009
Ce mode de recherche est mis en uvre par dfaut ; il concerne actuellement uniquement une personnalisation gographique de linformation. partir de 2009, cela changera. Google exploitera davantage dinformations personnelles an de personnaliser les SERP de chaque internaute.
200
201
Les autres applications de la golocalisation concernent essentiellement la localisation dans le pays ou non des sites. Les sites en .fr ou en .com hbergs avec une adresse IP franaise seront privilgis par rapport aux autres sites. Lobjectif pour Google est toujours dviter de noyer linternaute avec des informations inutiles. Une nouvelle version prenant en compte lhistorique de linternaute tait en prparation depuis plusieurs annes. Elle est apparue aux tats-Unis en 2008 et devrait arriver en Europe en 2009.
Luminaire. De nombreux autres internautes ont saisi lampe et ont cliqu sur des site de luminaires. Magasin lampe. De nombreux internautes ont saisi la requte magasin lampe ou ont cliqu sur des sites voquant les termes magasin et lampe. Magasin luminaire. Des internautes ont saisi lampe et ont cliqu sur des site de magasin luminaire.
202
c Fig. 7.3 : SERP Google sur la requte lampe sans personnalisation pousse
203
Le systme de thsaurus mis jour par les comportements des internautes met en vidence ces trois expressions cls en rapport avec le mot-cl lampe. La SERP les propose en ides de requtes notre internaute peu bavard dans sa requte. On peroit tout de suite la diffrence de qualit. Dun ct, lampe dcoration orientale avec une forte probabilit davoir touch juste, de lautre des rsultats mixant de nombreux lments (lampe pour bibliothque, annuaire de luminaires, luminothrapie, dcoration), faute de comprendre ce que dsire linternaute. Personalized Search Results promet un avantage comptitif Google face ses concurrents disposant dun public bien plus faible et donc dun thsaurus moins complet, moins able.
Des algorithmes "adroits" effectuent des calculs simples. Les calculs simples sont raliss sur dimmenses volumes de donnes. Ces calculs utilisent un thsaurus mis jour par les internautes eux-mmes via leurs usages de Google.
Personalized Search a besoin dun thsaurus parfaitement au point, rd et possdant des mises jour ables et continues. En effet, toute logique calculant un positionnement par rapport :
j j
des mots-cls saisis dans Google ; des mots supposs cls par Google dans des pages cliques par un mme internaute ;
aura besoin dun thsaurus oprationnel. Autrement, comment valuer efficacement ce que recherche un internaute en fonction de son historique ? Rappelez-vous lexemple tudi prcdemment, sur lampe.
204
historique sur lutilisation de Google ; chier log des possesseurs de cookies, notamment ceux des rgies publicitaires ; Google Chrome ; Google toolbar.
Tout ce qui a t cliqu depuis Google, toutes les requtes et les clics affrents sont mmoriss par Google par rapport un cookie ou un numro IP. Un cookie pos par une rgie publicitaire peut tre lu uniquement par cette rgie, auteur de la pose du cookie. Hors une mme rgie peut avoir des milliers, voire des millions de sites comme clients. Cette rgie peut donc vous suivre dans votre navigation. Google a rachet la plus grosse rgie publicitaire du secteur : doubleclic. Cela lui laisse laccs aux chiers de cette rgie. En rapprochant les informations avec comme cl de jointure le numro IP et la date, Google a la possibilit dexploiter une masse de donnes personnelles gigantesques. Nous verrons un peu plus loin quelques intrts stratgiques de Google lis une telle approche.
205
En effet, la quasi totalit des Internautes ne grent pas les diffrentes options proposes dans leurs navigateurs ou dans les prfrences des outils Google. 95 % et plus des internautes ne vont pas grer leurs historiques et laccs leurs donnes personnelles par Google. Donc celui-ci y accdera sans problme. Google sengage utiliser uniquement les donnes :
j j
Gographiques fournies par votre adresse IP. Issues de vos rcentes recherches, les mots-cls utiliss dans vos requtes. Cette dnition propose par Google est intressante. Que signie "rcent" ? Lgalement, ce serait 18 mois maximum. Ce ltrage est actif que vous soyez ou non connect votre compte Google. Traduction : Google authentie personnellement chaque internaute via cookie. Il vous authentie chaque passage sur un des ses services. Peut-tre garde-t-il en rserve la possibilit didentier un internaute via son adresse IP, mais cette mthode est thoriquement peu able dans 20 % des cas, voire plus. Dans la pratique, avec le nombre de collecteurs de donnes de Google (Toolbar, doubleclic, Chrome), ladresse IP est une mthode dauthentication qui peut tre abilise grce des recoupements. Issues de lhistorique web quand vous tes connect sur votre compte Google, un trs joli texte indique que vous tes propritaire de cette historique et que vous pouvez le supprimer ou lamender votre convenance. Il manque un dtail dans le blog officiel de Google : les donnes personnelles saisies lors de louverture dun compte Google sont aussi utilises.
Dans des interviews de 2007 (http://searchengineland.com/googles-matt-cutts-on-personalization -and-the-future-of-seo-10649), Google indique ne pas vouloir insrer plus de deux rsultats issus de la personnalisation des rsultats de recherche sur 10 affichs dans une SERP classique. Google indique aussi laisser intact les premiers de chaque position sur une expression cl. Des interviews de la mme poque prcisent que Google commencera en douceur pour ne pas heurter ses usagers. Mais ces mme interviews indiquent aussi que plus Google aura conance en cette technologie, plus elle sera utilise. Les limites dusage indiques prcdemment ne tiendront donc clairement pas longtemps. Une limite naturelle existe : ne pas sanctionner les sites qui prsentent un vrai plus pour les internautes. Chaque fois que Google met au point une technique anti-fraude, une question se pose : Cela ne va-t-il pas sanctionner des contenus lgitimes ? En effet, si trop de contenus lgitimes sont exclus par une technique, anti-fraude, anti-paidlink, personnalisation des rsultats de recherche, cela quivaut pour Google se tirer une balle dans le pied et rendre possible le retour dun autre moteur de recherche.
206
j j
Personalized search resultats va changer les SERP de nombreux internautes, faisant voler en clats une partie de travail du rfrencement et, au minimum, la manire de mesurer le positionnement. Google ajoutera au l du temps de nouvelles donnes prises en compte. Il officialisera cela ou non. Google peut par exemple prendre en compte les donnes issues des Google toolbar ou de Chrome en lannonant ou non. Limmense majorit des internautes laisseront faire. La personnalisation des rsultats de recherche va bouleverser le travail de rfrencement ; cela aura donc un impact sur le travail du codeur. Nous lvoquerons un peu plus loin. Google amliorera les algorithmes lis Personalized search resultats mis en place et de plus en plus de SERP sloigneront du modle de ranking habituel.
207
plus de revenus de AdWords ; plus de partenaires AdSense et donc de revenus lis ; plus de revenus publicitaires lis dautres outils Google ; affaiblissement de la concurrence directe : Microsoft et les autres moteurs.
Le navigateur ou loutil de mesure devront avoir limin tous les cookies de toute nature. Google sait que les adresses IP ne sont pas ables. Renouveler son adresse IP pour ne pas tre suivi par Google nest nullement obligatoire pour abiliser une mesure de positionnement et viter un ltre personnel autre que gographique. Il ne faudra pas tre connect sur un compte Google bien sr et si possible utiliser Firefox sans Googlebar si vous tes un professionnel en SEO. Autrement, cette prcaution est inutile. Il faudra songer bloquer la personnalisation de la recherche dans Google/ Prfrences.
Il sera ncessaire de rednir le travail du rfrenceur et de rednir la mesure de la qualit de son travail. Nous lvoquerons plus loin.
208
La crise conomique
Lconomie est durement touche par la crise (subprime, Madoff et autres excentricits de la nance amricaine). Face une possible baisse de revenus, la stratgie commande dinnover pour conserver ses revenus. Deux gisements de bnces sont ainsi viss par Google : laminer encore plus la concurrence et repousser les nues de moustiques rfrenceurs freinant les revenus AdWords.
Une puissance de calcul gigantesque : Google dispose de centaines de milliers de serveurs. Une algorithmique bien travaille et optimise : Google a dj d relever de tels challenges et a acquis un indniable savoir-faire face de telles problmatiques. Nous y reviendrons plus loin. De disposer de vastes historiques pour chaque internaute ou presque. Cest le cas. Qui na pas un historique associ un cookie chez Google ? Gmail, Google Map, presque 200 services Google de qualit sont disposition des internautes de la plante, en des dizaines de langues, le tout gratuitement.
De fait, seul Google dispose des ressources diverses ncessaires lancer un service aussi lourd. Cette mise en place amliorera son service, augmentera son avance et renforcera un cercle vertueux : plus il y a dutilisateurs, plus on a de donnes, mieux on peut personnaliser et plus Google gagne en revenus. Google dispose galement de rserves en informations et historiques pour poursuivre son avance sur Personalized search results. Ces rserves ne sont pas officiellement utilises ou pas encore : Google toolbar, Chrome, Doubleclic Google est une socit qui a pour habitude de prendre son temps. Son avance actuelle lui permet de longuement tester et prparer la personnalisation des rsultats de recherche, depuis 3 ans environ. Cela lui donne le confort dune mise en service progressive sans risque.
209
c Fig. 7.4 : Dtection par Google lors dune requte sur ~auto : AUTOplus, AUTOreex
210
Les internautes via une requte incluant "auto" et cliquant sur de nombreux sites ayant auto accol un autre mot dans leurs noms de domaines duquent Google sur lexistence du mot auto, synonyme de automobile. De mme, le thsaurus utilis par la personnalisation des rsultats de recherche devrait automatiquement sentretenir. Les comportements des internautes et leurs ventuelles corrections vont apprendre au systme o sont les erreurs et il pourra ainsi automatiquement les corriger.
Illustration
Un internaute saisit une requte, lampe, aprs avoir navigu sur des sites web de dcoration de maison. La personnalisation lui propose une SERP avec majoritairement des pages/URL sur le thme "lampe dcoration". Il ne clique sur rien et saisit une autre requte : lampe ptrole. Dans la SERP renvoye, il clique sur une page ayant pour thme "lampe ptrole pour la dcoration dune maison". Si plusieurs internautes font cela, le thsaurus de Google prendra en compte que lampe dcoration [maison || intrieure] doit inclure aussi des URL lampe ptrole. Il pourrait en faire gurer une ou deux dans la SERP type renvoyer vers toute requte. Le thsaurus a t automatiquement mis jour.
Qui fait quoi ? Lorganisation probable de Google
Google dveloppe et dploie les algorithmes gnriques de personnalisation des rsultats de recherche. Ces algorithmes utilisent les donnes organises par un thsaurus. Lusage des utilisateurs des diffrents services Google duque le thsaurus sans intervention humaine. Le thsaurus utilis par les multiples services Google est issu du comportement rel de la majorit des internautes. Nous tenons une des cls qui permettront de raliser le rfrencement sur le Google de demain. Les historiques dun internaute contiennent :
j j
Les mots-cls de ses requtes : ils dgagent des tendances. Son historique web, cest--dire les URL sur lesquelles il a cliqu depuis les SERP de Google.
Hors chaque URL correspond une page, un objet ayant des proprits : TITLE, titres H1, backlinks, etc. Ces proprits ont des contenus en mots-cls et en syntaxe. Elles dgagent des thmatiques : recette de cuisine, dcoration dintrieur..., chacune associe une orientation plus prcise : recette de cuisine sur les gteaux au chocolat moelleux, luminaire pour la dcoration dintrieur, etc. Le classement en thmatiques, en orientations plus prcises, est gr par le thsaurus. Celui-ci cre automatiquement de nouvelles catgories,sous-catgories en fonction du comportement des usagers de Google comme nous lavons dj vu.
SUITE
211
La personnalisation des rsultats de recherche va analyser la requte de linternaute vis--vis de ses historiques qui dgagent thmatiques et orientations selon le classement du thsaurus de Google. Les SERP contiendront des URL positionnes dans lindex sur le rsultat du ltrage slectionn par la personnalisation : golocalisation, thmatiques, orientations, mots-cls calculs pour correspondre aux attentes de linternaute.
212
Cette modication majeure dans les algorithmes de SERP peut avoir des effets trs bnques en trac sur un site web :
j j j j j j
dont le contenu et la valeur ajoute sont rels ; qui prsente pas ou peu de duplicate contents ; qui a une organisation apparente trs hirarchise pour Google ; qui possde une stratgie de rfrencement centralise et cible (landing pages, expression cl) ; qui met en uvre une politique de rfrencement concentre sur les mots/expressions cls et leurs multiples dclinaisons ; qui possde une stratgie de netlinking.
En effet, avoir lexpression cl, celle calcule par la personnalisation du rsultat de recherche Google, dans la landing page cest bien, mais faut-il encore tre bien positionn dessus. Hors le nombre de dclinaisons rfrenables dans une page web na pas chang :
213
approximativement 5 mots-cls centraux, une dizaine maximum autour. Ensuite, il ny a plus de place en URL rewriting et en title de page. Il faudra donc identier, trier, classer et cibler hirarchiquement les multiples dclinaisons et variantes dune expression cl sur sa landing page :
lampe lampe j lampe j lampe j lampe
j j
Une landing page russie sur cette expression cl, lampe dcoration orientale, devra donc dtailler les endroits o on peut la mettre (salon, etc.), sa composition (cuir de chvre et mtal), son origine (marocaine, orientale), sa fonction (dcoration, dcorative, clairage). Cela nous montre une landing page dote de textes, de titres, de visuels si on dsire augmenter le trac. Ce qui tait vrai, avant la mise en service de la personnalisation des rsultats de recherches sur Google, est encore plus dactualit aprs.
Les constantes
Un site sera toujours compos de contenu, de backlinks internes et externes. Cela sera toujours pris en compte. En effet, Google doit :
j j
fournir des SERP aux internautes sans historique ; disposer dune base dindexation sur laquelle personnalisation des rsultats de recherche.
appliquer
des
ltres
de
Un site mal conu aura des statistiques potentiellement incomprhensibles et difficiles interprter. La personnalisation pourra avoir un effet dvastateur sur le trac dun tel site. La qualit en structure (navigation claire et fortement hirarchise pour les bots de Google), la qualit en rfrencement (pas de duplicate content, critres bien grs, accessibilits technique et smantique), la qualit et le volume des informations (texte, vido, images, animations ash , bref le rich media), la qualit de la mise en page (des titres, des sous-titres, un chapeau, des paragraphes clairement dlimits, des phrases correctement construites et formes, etc.) sont actuellement des critres exigs pour russir son positionnement via une campagne de netlinking.
214
Rfrenceur 2.0
Ce sera accentu par lvolution de Google vers des SERP personnalises selon lhistorique de linternaute :
j
Google pnalise indirectement les contenus mal prsents. Une thmatique mal perue noie la page dans le n fond de lindex. (Mais on peut avoir du Page rank malgr tout si on a des backlinks externes.) Il est toujours plus facile dinterprter le web analytics dun site clairement organis. Un rfrenceur pourra mieux travailler.
Un thsaurus construit par lusage des internautes eux-mmes du moteur de recherche. Ce thsaurus fournit les mthodes de classement, bref tout ce quil faut pour comprendre et classer le contenu des pages des sites dun ct et les pages des sites web visits depuis des SERP de lautre. Les historiques propres chaque internaute ayant un compte Google et ayant t authenti par Google via un cookie.
215
Pour simplier, nous partirons du principe que tout internaute a un compte Google (GMail, etc.) et quil aura donc un historique. terme, vu le poids grandissant de Google, vu son statut juridique et ses mthodes, une majorit dinternautes auront sous une forme ou une autre un compte Google ou quivalent, avec lesdits historiques associs. Lorganisation des donnes du thsaurus est partiellement consultable via les commandes adquates dans Google. Par exemple : ~ (tilde) qui permet de lister les synonymes dun mot selon ce thsaurus auto duqu de Google.
216
Rfrenceur 2.0
Selon le thsaurus de Google, lampe a pour synonyme lacronyme LAMP (Linux Apache MySQL PHP). Dans notre cas, cela noffre aucun intrt. On notera lusage massif du mot lampe pour parler dampoule dans de nombreux sites web. Le thsaurus de Google na pour le moment pas pris en compte ce synonyme potentiel lampe ampoule.
Plus intressant, ~lampe dcoration saisi en requte dans Google nous apprend que deco est un synonyme de dcoration. On peut ainsi diminuer la longueur des URL et le title de la page. En rdactionnel, on pourra mixer les deux termes. Via ces exemples, nous venons de voir quelques rsultats de quelques rgles rgissant le thsaurus de Google.
217
Dautres outils Google permettent de dtecter dautres formes dassociations et rgles que ce thsaurus ralise : loutil de recherche de mots de AdWords, par exemple : https:// adwords.google.com/select/KeywordTool.
218
Rfrenceur 2.0
KeywordTool nous donne de prcieuses indications mme si elles ne sont pas assez prcises :
j j j
Nous avons le trac des recherches sur le mot-cl lampe, sur ses dclinaisons. Nous obtenons aussi des mots-cls valuer selon Google cause des associations lies lampe et ralises par les internautes lors de leurs recherches. Il nous manque des chiffres plus prcis. Mais ceux-ci sont en fait plus ou moins disponibles dans la gestion de compte AdWords. En plaant des enchres durant une priode de quelques semaines, on peut obtenir de trs nombreuses informations complmentaires.
219
Certaines associations suggres sont intressantes, associer lampe dcoration intrieur, maison, deco. En faisant un travail itratif sur les multiples combinaisons et extensions proposes par loutil, on peut mieux cerner la logique du thsaurus. En testant ces combinaisons via Google en ayant un compte Google ouvert, en simulant un historique, en effaant cet historique (ce que permet Google ce jour, tout au moins officiellement) et en recommenant, on pourra en tirer des informations essentielles sur la logique associative lui permettant de recrer une nouvelle requte incluant de nouveaux mots-cls pour le compte de lutilisateur an de personnaliser le rsultat de sa recherche. De ce que lon peroit aujourdhui, Google transformera probablement une expression cl, celle saisie lorigine par lusager, en une autre requte pour le compte de cet usager via la personnalisation. On ne connatra pas lexpression nale gnre et utilise, cest vident. Mais le rfrenceur aura accs aux mots-cls saisis lorigine dans la requte sur Google car ils sont vhiculs dans lenvironnement de linternaute arrivant sur la premire page du site. Le rfrenceur pourra deviner ou calculer ou estimer, avec laide dun logiciel de suivi performant et dun site bien conu, la requte calcule par lalgorithme de personnalisation. Peut-on en conclure tout de suite que le rfrenceur naura donc pas accs des expressions cls/historiques mal prises en compte par le site rfrencer ? Non. En effet, mme mal positionn sur un mot-cl, un site a tout de mme un peu de trac sur une expression ou mot-cl mal rfrencs. Il appartient au rfrenceur de les dtecter, de comparer le trac potentiel existant (on vient de voir quil y a des outils Google pour cela) au trac mesur en audience, den dduire les expressions cls pas assez travailles dans des landing pages et de corriger ces oublis ou ces erreurs. Il est probable que Google remploiera le thsaurus utilis par dautres services et applications de Google. En effet, pourquoi en prendre un autre ? Seul Google a accs aux donnes de lhistorique de tout internaute ayant un compte Google, donc reconstituer lalgorithme sera impossible ou trs difficile. Mais un rfrenceur expriment, avec un solide sens de la programmation, pourra auditer un site, des expressions cls et en dduire les dclinaisons capables de gnrer du trac de qualit, personnalisation des rsultats de recherche ou non. Certes, il ne pourra probablement pas calculer toutes les dclinaisons, mais il pourra en identier suffisamment pour doper le trac dun site web.
220
Rfrenceur 2.0
Nous avons vu quen utilisant la thorie des graphes puis les notions dobjets et de proprits, on a dni un premier objet, URL, dote de proprits : titre de page, meta description, titre(s) H1, etc. Ces diffrentes proprits contiennent des mots. Des algorithmes permettent den dduire les mots-cls. Un autre objet a vite t dni, backlink, avec 3 proprits pour faire simple : lURL o son ancre est pose (lURL dpart du backlink), le texte du libell du lien, lURL vise. Avec un peu de mathmatiques simples, inclusion, intersection, pondration, on a vu que trs vite on pouvait construire un algorithme capable de calculer le positionnement dune page prcise sur une expression cl prcise face dautres pages candidates tre positionnes sur cette mme expression cl. Trs certainement, Google utilise des algorithmes bien plus sophistiqus pour comprendre le contenu de chaque page. Ces algorithmes existent depuis des annes. Le challenge consiste les faire sexcuter correctement sur des masses gigantesques de donnes et mettre disposition de centaines de millions dinternautes des temps de rponse rapides lors de leurs recherches ou utilisation des multiples services et fonctionnalits de Google. tendons cette logique la personnalisation des rsultats de recherche. Lobjectif nest pas de tenter de faire un reverse engineering de Google, mais juste de poser quelques principes. Cela nous permettra de mieux apprhender les actions et mthodes pour russir un rfrencement. Un historique est compos de trois objets au minimum :
j j j
requte : les mots-cls saisis dans une requte ; URL visite : une URL clique dans une SERP Google elle-mme renvoye vers un compte Google ayant envoy une requte ; compte Google : un usager utilisant au moins un service Google comme Gmail, Google Analytics, etc.
Nous percevons immdiatement les proprits videntes accrocher ces objets. Voici une premire approche logique dans la ligne de ce que nous avons dj peu prs tabli du fonctionnement des algorithmes de Google. Requte :
j j j j
identiant requte ; compte Google auteur de la requte ; date et heure, minute, seconde ; mots-cls.
221
URL visites :
j j j
identiant requte lorigine de la SERP do lURL a t clique ; date et heure, minute, seconde o le clic a t fait ; ID URL (pour accder aux proprits de la page visite ; mme objet que celui vu prcdemment).
Thmes prfrs sur les N derniers mois. Illustration : si un internaute saisit de nombreux mots-cls lis la dcoration dune maison, toutes recherches sur des mots-cls comme tissu ou lampe verront leurs rsultats personnaliss sur lampe dcoration et tissu mobilier ou tissu dcoration maison plutt que lampe ampoule et tissu pour vtement. Logiquement, les composantes du prol de linternaute seront organises pour tre compatibles avec le fonctionnement du thsaurus. Mots-cls frquemment utiliss, en requtes ou prsents dans les URL visites, sur les N derniers mois. Une pondration est possible pour permettre un classement par ordre dimportance des mots-cls utiliss sur cette priode.
Une telle structure offre de nombreux avantages. Elle permet dtre "compatible" avec la structure prcdente. Elle est apparemment simple mettre en uvre. Elle permettrait de multiples rglages la vole diminuant ou augmentant la consommation de ressources. Elle est compatible avec les rares dclarations de Google sur le sujet. Elle prsente au moins un inconvnient : elle est potentiellement trs consommatrice de ressources. Si pour chaque personnalisation de rsultats de recherche, le serveur ausculte 18 mois dhistorique, il risque dy avoir une trop forte consommation de ressources informatiques. Ce scnario est incompatible avec le maintien de temps de rponses rapides qui est une des caractristiques de Google comme moteur de recherche. De multiples approches algorithmiques sont possibles pour allger le cot en consommation de ressources informatiques :
j
Prconstruire le prol, les mots-cls et les thmes prfrs dun compte Google. Cela viterait de parcourir et traiter des centaines ou mme des milliers denregistrements pour valuer en temps rel la personnalisation dun rsultat de recherche. Cela permet galement une meilleure efficacit. Le traitement tant en batch, une fois de temps en temps, Google pourrait utiliser des algorithmes plus complexes, bass sur de lIA (Intelligence Articielle), pour mieux comprendre les contenus visits par linternaute et donc mieux classer et catgoriser son prol en respectant le systme du thsaurus.
222
Rfrenceur 2.0
Consulter en temps rel la dernire heure (dernire 30 minutes ou les 100 dernires utilisations, etc.) dhistorique en requtes et en URL visites lies ces requtes.
Le peu dinformations donnes par Google sur leur architecture, si ces informations sont vraies, indiquent que les techniques de comprhension des textes sont plutt bases sur de lIA et quils en sont particulirement contents depuis dbut 2008, o, nous citons en traduisant, "un saut qualitatif trs net leur permet de plutt bien apprhender dsormais ce que raconte une page [de site web]" (interview en anglais dun des directeurs techniques de Google). Des tests sur 2008 ont montr effectivement un saut qualitatif trs net. Par exemple, en 2007 les SERP taient truffes dURL dont les pages avait du soi-disant contenu mais dont la valeur ajoute relle tait nulle. Exemple : les annuaires de liens et autres site contenus bidons taient bien mieux rfrencs sur des mots-cls lis au tourisme. Ils encombraient les SERP sur des recherches pour louer un appartement ou une maison. Dsormais, ils ont pratiquement disparu des SERP. Le contenu, quoique existant et truff des bons mots-cls, nest plus pris en compte par Google. Diffrentes campagnes de tests et de comparaisons permettront daffiner ou damender ce modle.
223
224
Rfrenceur 2.0
c Fig. 7.9 : Google Analytics : les mots-cls utiliss pour arriver sur une landing page
Google Analytics indique les mots-cls utiliss par les internautes arrivant sur une premire page dun site : Contenu/Principales pages de destination/Mots cls utiliss (page dentre). Dans la gure, cette landing page, un exemple rel, nous lappellerons "kit", cible lexpression cl kit associ quelques autres mots-cls. 71 dclinaisons diffrentes utilisant une dizaine de mots-cls ont amen 653 affichages de cette landing page (106
225
avec cette page comme page darrive dans le site) lors de 379 visites uniques environ (lors dune visite, le visiteur peut consulter deux fois la mme page). Les expressions cls affiches sont celles vhicules par lenvironnement de linternaute lors de son arrive sur cette page ou sur une autre page du site. Contenu/Principales pages de destination/Rcapitulatif de navigation permet didentier clairement, dans Google Analytics, lusage en landing page (page darrive) ou en page sur le chemin dune visite. On voit que le taux de rebond est faible, moins de 15 % en moyenne pour lexpression cl cible par notre landing page, on a 33,85 % sinon pour la moyenne de toutes les visites. Le taux de sortie immdiate est galement trs faible, de lordre de 12 % pour lexpression cl cible par notre landing page. On a 19,91 % autrement pour la moyenne de toutes les visites. Il serait intressant de savoir ce quont fait ces internautes ensuite. Mais Google Analytics ne sait pas dlivrer un dtail prcis dun internaute. On peut obtenir une squence dbut : page prcdente notre landing page page suivante. Mais cest insuffisant. Et Google Analytics nest pas l pour aider un rfrenceur, mais un webmestre utilisant AdWords. La personnalisation va accentuer les diffrences de besoins en outils des AdWorders dun ct et des rfrenceurs naturels de lautre. Les outils actuels de Google devraient encore moins correspondre aux futurs besoins des rfrenceurs naturels. Demain, avec la personnalisation, le rfrenceur aura besoin de visualiser le chemin complet dun internaute prcis pour tenter de reconstituer une expression cl gnre par Google. Il lui faudra au minimum isoler les mots-cls utiliss pour arriver sur telle landing page par des internautes et isoler chaque chemin ralis ensuite par chacun de ces internautes. Le rfrenceur avait dj besoin de faire un peu de web analytics pour suivre lvolution dun rfrencement. Cela va devenir indispensable.
Web analytics
Pour sadapter la personnalisation des rsultats de recherche de Google, le rfrenceur 2.0 va devoir matriser les outils daudience. Le rfrenceur codeur aura peut-tre besoin de coder certains utilitaires lui-mme, notamment pour se faciliter la tche de reconstituer lexpression cl construite par la personnalisation. Une certaine forme de web analytics va devenir primordiale dans le mtier de rfrenceur. Lusage web analytics du rfrenceur sera orient sur la slection, le classement, la priorisation des mots et expressions cls. Les autres spcialits du web analytics essaient dextraire dautres logiques, comportementales par exemple, pour transformer un internaute prospect en client acheteur.
226
Rfrenceur 2.0
| signie : ou exclusif, soit un terme soit lautre, jamais les deux en mme temps. || signie : ou inclusif, soit un terme soit lautre, soit les deux en mme temps.
227
j j j
Le mot-cl central stratgique est : lampe. Il doit apparatre dans un maximum de critres de page : TITLE, Meta Description, ALT, H1, etc. Lampe doit tre associ dco, synonyme de dcoration selon le thsaurus de Google. Lampe de dcoration doit tre prsente dans tous les critres de page. Lampe doit tre associ orientale ou marocaine, synonyme de Maroc selon le thsaurus de Google. Ces expressions cls doivent tre prsentes dans tous les critres de page. Puis on peut combiner lampe dcoration avec soit orientale, soit marocaine. Puis on peut combiner ces expressions cls avec soit maison, soit intrieur. Et enn, on peut combiner avec les mots dcrivant la composition de la lampe, du cuir de chvre et du mtal.
En une ligne exprimant une factorisation, on rsume les objectifs en expressions cls dune landing page : ordonnancement des mots et priorisation. Nous avons vu dans les chapitres prcdents comment implmenter, dans une table MySQL, de telles proprits et comment les manipuler en script PHP. Cela automatise partiellement ou totalement laccessibilit smantique de chaque page au sein dune stratgie globale de rfrencement.
Google writing
Pour russir le positionnement via laccessibilit smantique, faire prendre en compte les bons mots-cls par Google pour chaque landing page, les comptences en Google writing devront tre utilises bien plus quauparavant. Il va falloir dcliner correctement chaque factorisation dexpressions cls.
reconstituer, mme approximativement, une expression cl gnre par Google lors de la personnalisation de rsultats de recherche ; puis corrler avec le taux de transformation an didentier les expressions cls capables dapporter des internautes transforms, cest--dire devenant clients.
Dun outil collectant les mots-cls des internautes arrivant pour la premire fois sur une landing page dun site. En clair, on a besoin de connatre les performances de
228
Rfrenceur 2.0
collecte en premiers arrivants de chaque landing page. Sert-elle quelque chose ? Est-elle bien positionne sur ses expressions cls, avec ou sans personnalisation des rsultats de recherche ? A-t-elle assez de trac par rapport aux informations issues des outils de Google ? De disposer pour chaque internaute arrivant via une landing page donne, de tout son parcours sur le site. On obtient ainsi les performances de transformation de chaque landing page. Il suffit de dtecter le passage de linternaute sur les pages adquates : remerciements pour un formulaire rempli, visibilit de plus de 10 secondes de telle promesse marketing, etc. Davoir valu pour une expression cl, via des simulations dhistoriques, le comportement de Google.
Un nombre limit de mots-cls (lampe, dcoration, orientale, etc.) pouvant composer des centaines de combinaisons dexpressions cls. Ces mots-cls sont infrieurs 15 voire moins et sont parfaitement identis. Ils sont prsents dans une table MySQL. Normalement, si on suit ce qui a t expliqu auparavant, on a pu identier certaines des expressions cls utilises par Google en personnalisation et elles sont intgres dans la factorisation de mots-cls de la landing page. Moyennant un bon usage de Google Analytics ou mieux, un petit programme, on peut identier les mots-cls utiliss par un internaute arrivant sur une premire page puis suivre son parcours sur tout le site, y compris sil revient (via un cookie). On a pu exporter dans une table MySQL (chaque mois, chaque trimestre via un chier .csv par exemple) depuis un outil Google comme keywordTool le trac en requtes estim ou mesur rel sur telle ou telle expression cl, en large (cest--dire toute expression cl contenant les termes indiqus dans nimporte quel ordre) ou en strict, cest--dire cette expression cl trs prcise. Un quelconque outil de positionnement nous donne les positions de la landing page sur ces expressions cls directement dans une table MySQL
Nous avons les donnes, il ny a plus qu automatiser corrlations et suivi dans le temps. Pour chaque landing page, on afficherait :
j
Les expressions cls des premiers arrivants sur les N derniers jours (N = 30 par exemple). Un programme de collecte de ces donnes via $_SERVER en PHP est idal pour cela.
229
j j j
Le taux de transformation (une transformation signie latteinte dune URL comme "merci davoir pass commande" par un internaute) de ces premiers arrivants sur la landing page. Grer $_SERVER et un cookie permet de tracer le parcours de linternaute dans un chier .txt puis dimporter ce chier, la nuit par batch, dans une table MySQL an de pouvoir identier si tel internaute est pass par cette URL de remerciement ou non. Les mots-cls principaux de la page ou mme la factorisation retenue (on peut ajouter un champ la table article pour prvoir cette possibilit). Le trac existant sur ces expressions cls dans Google, en large et en respect strict de lexpression cl. Le positionnement de la landing page dans Google, expression cl par expression cl.
Ces informations permettraient de cadrer dun coup dil les performances de chaque landing page sur les 30 derniers jours. On peut amliorer lapproche en introduisant la notion de suivi sur N mois, de comparaison avec les statistiques globales du site, de comparaison entre landing pages, de benchmarker les positions des sites concurrents sur les expressions cls de chaque landing page, etc. Mais nous avons l le cur dun systme de suivi des performances.
230
Rsum de ce chapitre
Le mtier du rfrenceur va se concentrer sur les mots-cls et leurs prises en compte par le moteur (les bons mots-cls sur les bonnes pages avec la bonne mise en exergue). En apprhendant mieux les principes de programmation dune personnalisation des rsultats de recherche, on peroit mieux comment procder pour disposer dun rfrencement efficace.
Mesurer lefficacit du rfrencement
Une bauche dun algorithme permettant de suivre la qualit de son rfrencement vous permettra de dmarrer une nouvelle approche pour mesurer lefficacit de votre rfrencement et de votre rfrenceur.
231
8
8.1 Outils pratiques ......................................... 8.2 Conseils, astuces et dpannages ..................... 8.3 Rsultats de recherche personnaliss ................. 8.4 Normes et manuels ..................................... 8.5 URL de codes sources .................................. 234 236 237 237 238
Annexe Webographie
V
j j
ous trouverez dans ce chapitre diffrentes URL pointant des astuces, des conseils, des outils prsentant un intrt direct ou indirect avec les sujets abords dans ce livre : rfrencement ; forum sur le web marketing dont le rfrencement naturel nest quune des composantes ; programmation web ; outils divers facilitant la mise au point de programmes.
j j
vous de jouer !
Annexe Webographie
header http. Il savre trs pratique quand on met au point un .htaccess en charge de faire des redirections. http://ip-to-country.webhosting.info/node/view/36 renvoie le pays correspondant une adresse IP. En effet, avant de faire hberger un site, il est important de savoir o sont installs physiquement les serveurs sous peine de perdre btement du trac. Rappelez-vous, le ltrage Google donne priorit aux "locaux" pour les locaux. Si votre site en .com est hberg en Allemagne ou aux tats-Unis par une socit franaise, vous serez vu comme un tranger au march franais. Vous garantissez ainsi une perte de trac notable votre site. Ce nest certes pas une bonne affaire si vous passez par un tel hbergeur pour conomiser 0,5 euros par mois.
Adresse IP
Capturez ladresse IP de votre fournisseur : la commande UNIX ping, disponible sous lmulateur DOS sur les machines sous Windows, vous la donnera.
C:\> ping www.lemonde.fr
Cette commande vous renverra 193.159.160.139, hberg physiquement en Allemagne. Cest un nom de domaine en .fr, donc il est automatiquement vu comme un site franais o quil soit hberg. Un autre exemple : le serveur de www.webrankinfo.com a pour adresse IP 194.146.226.133 localis en France.
j j
j j
Google vous permettra dvaluer des expressions cls. Cest un des outils indispensables pour auditer des mots et expressions cls. www.google.com/webmasters/tools/?hl=fr. Google webmasters tools donne accs au webmestre de nombreux outils facilitant le travail de rfrencement. http://yoast.com/seo-tools/link-analysis/. Le site nerlandais propose des outils gratuits, payants ou en version dessai qui aident le rfrenceur. Il existe par exemple un plugin Firefox qui affiche le Page rank des backlinks lists dans Google webmasters tools. Cela offre un gain de temps pour apprcier en quelques coups dil une partie de la qualit des backlinks dun site.
234
Outils pratiques
http://noscript.net/. Add on pour Firefox an de scuriser votre navigateur en limitant la consommation de ressources par les ash mal cods et trop gourmands en ressources de votre processeur. http://www.wampserver.com/. Lenvironnement de dveloppement utilis : Windows, Apache, MySQL, PHP5 de Anaska. Il permet de dvelopper dans un environnement identique 99,95 % celui de votre serveur Linux de production. Les diffrences notables qui peuvent piger le codeur dbutant portent :
- Sur des dtails dimplmentation de .htaccess. Les hbergeurs OVH, Nuxit et quelques autres ont une tendance "personnaliser" des dtails qui peuvent perturber WAMP et rendre un .htaccess WAMP incompatible avec celui destin au serveur Linux de lhbergeur. - Le paramtrage Apache de votre serveur WAMP peut tre impossible reproduire sur un serveur mutualis, notamment lURL rewriting. - Certains hbergeurs prsentent des comportements dURL rewriting alatoirement surprenants ncessitant une modication substantielle du .htaccess ou de la programmation PHP des liens HREF gnrs. Exemple : lURL du site, nomDeDomaine.com/article/chargessociales/12/1.html est remplace par une string du style /gp60/stylez~/article/chargessociales/12/1.html.
j
Pour gnrer une entre dans un chier .htpasswd, voici une des multiples URL proposant un outil en ligne : http://www.htaccesstools.com/htpasswd-generator/.
235
Annexe Webographie
j j j
des personnes de tout niveau, du dbutant lexpert. Ce forums et bien dautres donnent accs des astuces pour coder en expressions rgulires, en PHP, sans avoir lire et comprendre toute la documentation sur le sujet. On y trouve aussi des astuces, conseils, coups de main pour se dpanner ou avoir une ide face une situation incomprhensible. Voici un excellent exemple de bonne publication par ce site : http://www.webrankinfo .com/actualites/200812-le-referencement-en-2009.htm prsente un excellent topo du mtier du rfrencement en 2009 par rapport 2008. http://www.webmaster-hub.com/index.php est un autre forum classique et pratique pour le rfrencement, les problmes de programmation, les astuces, les coups de main. http://www.forum-marketing.com/index.php : un dernier forum francophone sur le rfrencement. http://www.mattcutts.com/blog/ : le blog de Matt Cutts, patron de lantispam team Google. On y trouvera des sujets inintressants (les photos de son chat, les logiciels prfrs de ses parents ), des informations intressantes touchant au rfrencement, plus ou moins prcises et des astuces intressantes (les conseils pour rinclure un site en black list, par exemple). Googlez interview matt cutts permet dobtenir de relles informations intressantes sur le rfrencement et Google. Une autre expression cl Google : Matt Cutts + terme de rfrencement. Exemple : Matt Cutts Duplicate Content renvoie une SERP contenant cette URL pointant une page en franais avec des informations intressantes sur le traitement par Google du propritaire original dun contenu : http://wordpress-tuto.fr/complements-de-matt- cutts-surle-duplicate-content-307. Pour sinitier facilement et comprendre les principes de la scurisation du back office dun site web, mais avec une faille de scurit, donc lire mais ne pas implmenter tel que : http://www.siteduzero.com/tutoriel-3-14649-proteger-un-dossier-avec-un-htaccess.html.
.htpasswd inviolable
Tout .htpasswd doit tre dans un rpertoire ddi accompagn dun .htaccess en deny all an de limiter laccs .htpasswd Apache et au protocole FTP ou autre retenu pour mettre jour le chier. Cette prcaution tait omise dans cette page dexplications par ailleurs trs bien faite pour expliquer les principes de la scurisation dun rpertoire dans un site web.
236
Normes et manuels
Pour obtenir des pages sur la programmation dans un .htaccess pour de lURL rewriting ou de la redirection par exemple, "googlez" tutorial .htaccess.
j j
Le blog officiel de Google est : http://googleblog.blogspot.com/. Des informations utiles pour mieux comprendre comment optimiser vos snippet et balises sur vos pages : http://googlewebmastercentral.blogspot.com/2007/12/answering-morepopular-picks-meta-tags.html.
Dnition des cookies : la RFC 2109 : http://www.ietf.org/rfc/rfc2109.txt. Sa remplaante, la RFC 2965 : http://tools.ietf.org/html/rfc2965.
Les codeurs utilisant ash trouveront de lintrt dans ces deux URL :
j
http://code.google.com/p/swfobject/wiki/documentation ou comment implmenter une animation ash en lui donnant un texte alternatif accessible aux bots de Google (et des autres moteurs). lURL de la traduction franaise de SWFobject2 : http://egypte.olympe-network.com/ swfobject-francais.html.
237
Annexe Webographie
branche des mathmatiques devrait sy plonger pour mieux apprhender le gnie logiciel et Google, bien sr. Voici quelques URL sur le sujet :
http://www.laas.fr/~lopez/cours/GRAPHES/graphes.html ; j http://fr.wikipedia.org/wiki/Thorie_des_graphes ; j http://www.apprendre-en-ligne.net/graphes/.
j
Le code source dorigine servait traquer le trac des bots sur un site web via Google Analytics. Ce code source a t modi et adapt par Gilles Grgoire le 23/12/2008 pour remplacer son propre code moins lgant et dont il tait plus difficile dassurer la maintenance. Un bogue gurait dans le code source dorigine. Il a t signal aux codeurs dorigine qui ont mis jour leurs sources. Plusieurs sites fournissent la liste des bots en circulation (plus de 2 000 actifs en 2008 selon lun de ces sites). Il est recommand de mettre jour rgulirement cette liste depuis un de ces sites :
j j
La liste des bots utilise dans notre exemple provient de : BBclone www.bbclone.de ainsi que le script patterns.php. Un autre site rgulirement mis jour diffuse une liste tlchargeable automatiquement et quun codeur pourra utiliser pour mettre jour sa liste de bots automatiquement : http://www.robotstxt.org/db/schema.txt. Le http user agent du robot, la variable utilisable en PHP, correspond la ligne robotuseragent dans le chier tlchargeable.
238
Feuille de style
Certaines parties des feuilles de style de notre exemple ont t drives dexemples ou dinformations techniques exposs dans ces pages :
j j
http://www.cssdebutant.com/formulaire-css.html ; http://www.babylon-design.com/site/index.php/2007/09/24/192-boutons-extensibles-css-compatiblestous-navigateurs.
Rseaux sociaux
Un des exemples de codes sources pour faciliter le bookmarking dune page dun site web dans un site rseau social est de lauteur. Dautres exemples peuvent tre librement pris dun de ces sites :
j j j
http://justaddme.com/.
Lexemple utilise un code source issu de ce site qui permet de disposer de statistiques sur les clics des usagers : http://www.addthis.com/. http://www.letsgetsocialnow.com/.
239
INDEX
!
.htaccess ............................................................................. 65-66, 68-69, 71-72 contrle daccs ....................................................................................... 153 .htpasswd .................................................................................................... 154 inviolable ................................................................................................. 236
A
Accessibilit smantique ........................................................................................... 33, 56 technique .............................................................................................. 33, 56 Addthis ....................................................................................................... 162 Adresse IP ............................................................................................ 37, 234 AdWorders .................................................................................................. 226 AdWords ............................................................................................... 36, 158 Algorithmes ................................................................................................. 164 de cohrence ............................................................................................ 105 ALT .............................................................................................................. 46 Ancres ........................................................................................................... 35 Anomalie statistique .................................................................................... 106 Anti-fraude .................................................................................................... 36 Antispam team .............................................................................................. 27 Arc .............................................................................................................. 104 Article.php ............................................................... 72-73, 75, 79, 88, 94, 113 Articles.php ................................................................................................... 73 Article_rubrique ............................................................................................ 88 Automatiser (liens dun nuage) ................................................................... 107
B
Backlink .............................................. 27, 29, 32, 34, 40-41, 46, 55, 101, 103 effcacit ................................................................................................... 107 internes ...................................................................................................... 94
242
INDEX
qualit ...................................................................................................... 105 Barre verte .................................................................................................. 112 Black hat ..................................................................................................... 192 Bot .......................................................................................... 23-24, 26, 36-37 liste des bots et des OS ............................................................................ 147
C
Cartographier les URL ................................................................................ 160 Chapeau ........................................................................................................ 48 Chef de projet ............................................................................................... 16 Cloaking .......................................................................................... 37-38, 191 CMS ............................................................................................................. 44 Codage maladroit .................................................................................... 24, 37 Codeur .................................................................................................... 17, 28 Cohrence .................................................................. 32, 35, 92, 105-106, 108 Cohrent ................................................................................... 49, 76, 79, 104 Content Management System (CMS) ............................................................ 44 Converge ..................................................................................................... 112 Cookie ............................................................................................ 24, 38, 134 dnition .................................................................................................. 134 Copier-coller maladroit .................................................................................. 39 Cot du rfrencement .................................................................................. 44 Critres ......................................................................................................... 35 dans une page ............................................................................................ 45 de cohrence ..................................................................................... 103-104 quantitatifs ............................................................................................... 103
D
Densit ........................................................................................................ 106 Dpannages ................................................................................................. 236 Dsindexation .......................................................................... 26, 39, 106, 125 Dtection dincohrence ................................................................................ 77
243
INDEX
Duplicate content .................... 26, 38, 76, 79, 87, 91 93, 109, 125, 130, 183 interne ................................................................................................... 38-39 involontaires ..................................................................................... 115, 125 seuil ........................................................................................................... 93
E
chelle logarithmique .................................................................................. 111 Efficacit du backlink .................................................................................. 107 Enjeux du spamdexing .................................................................................. 36 Erreur codage en URL rewriting ........................................................................... 39 de codage ................................................................................................... 39 humaines .................................................................................................... 36 mthodologique .......................................................................................... 12 Exemple (site web) ....................................................................................... 45 Expression cl ................................................................................................... 20, 34-35 rgulire .......................................................................................... 68-69, 72 Expressions_cls .......................................................................................... 114 Exp_clef_dynamique ................................................................................... 116
F
Feuille de style ............................................................................................ 239 limites ...................................................................................................... 187 Fil de navigation ........................................................................................... 67 Flash (indexer) ............................................................................................ 194 Flux de Page rank ....................................................................................... 101 Formule du Page rank ................................................................................. 110 Frames ........................................................................................................ 186
244
INDEX
G
Gestion de nuages de liens .................................................................................... 124 de session par id dans lURL ................................................................... 135 Google .......................................................................................................... 28 Google bar ....................................................................................... 103, 112 Google writing ................................................................................... 24, 227
H
Historique ................................................................................................... 200 Hn ................................................................................................................. 45 HTACCESS .................................................................................................. 68
I
Incohrence (dtection) ................................................................................. 77 Indexer du Flash ......................................................................................... 194 Informations personnelles utilisables ........................................................... 205 Interactivit Web 2.0 ................................................................................... 163 IP (adresse) ........................................................................................... 37, 234
J
JavaScript .............................................................................................. 37, 185 Joomla .......................................................................................................... 44
K
KeywordTool ............................................................................................... 219
245
INDEX
L
Landing page .... 19, 22, 28, 31 34, 47, 55, 84, 107, 109, 113, 117, 121, 127 Landing_pages_id_article_url ...................................................................... 127 Levier sur les mots-cls ................................................................................ 35 Liens ............................................................................................................. 26 cohrents .................................................................................................. 106 en dur ........................................................................................................ 26 spam .......................................................................................................... 40 Linkbaiten ..................................................................................................... 40 Linkbuilding .................................................................................................. 33 Logiciel CMS ........................................................................................................... 44 de publication ...................................................................................... 57, 85 de publication de pages HTML .................................................................. 44 Longues tranes ............................................................................................. 21
M
Maladresses de codage .................................................................................. 24 Map locator ................................................................................................. 200 Matt Cutts ................................................................................................... 224 Md5(rand()) ................................................................................................. 128 Meta description ........................................................................................... 45 Mise en page fonctionnelle ......................................................................... 227 Mots-cls .......................................................................... 20, 32 35, 40, 102 dune URL ................................................................................................. 76 levier .......................................................................................................... 35 stratgique .......................................................................................... 46, 107
N
Netlinking .................................................................................... 32-33, 40, 54 interne ........................................................................................................ 55
246
INDEX
Normes et manuels ..................................................................................... Nuage de liens ............... 14, 32-33, 41, 55, 94, 106 108, 113, 120, 124, automatiser ............................................................................................... trop semblables ........................................................................................
O
Optimisation page HTML .......................................................................................... 31, 54 trop agressive ........................................................................................... 106
P
Page absentes de lindex de Google .................................................................. 182 datterrissage ........................................................... 19, 20, 34, 56, 107, 113 HTML ........................................................................................................ 25 mal positionnes ....................................................................................... 184 splash ....................................................................................................... 190 une page une langue ................................................................................ 191 Page rank ........................................................................... 27, 35-36, 103, 111 ux ........................................................................................................... 101 formule ..................................................................................................... 110 PR sculpting ............................................................................................. 131 Paidlink ...................................................................................... 36, 39-40, 183 Pnaliser le rfrencement ............................................................................. 38 Personnalized search results ........................................................................ 198 Pertes en positionnement ............................................................................... 76 PHP .............................................................................................................. 37 Popularit dune page HTML ....................................................................... 27 Positionnement ..................................... 19, 28, 30, 32, 34, 36, 41, 43, 55, 103 dun site Internet .................................................................................. 32, 55 pertes ......................................................................................................... 76 russir ........................................................................................................ 55
247
INDEX
PR (voir Page rank) .................................................................................... 112 PR sculpting ............................................................................................. 131 transfert .................................................................................................... 106 Principes rfrencement naturel ................................................................................. 54 Proprits dun backlink ........................................................................................... 104 dune page ............................................................................................... 105
Q
Qualit du backlink ..................................................................................... 105
R
Random ....................................................................................................... 128 R criture la vole des URL .................................................................................... 66 dURL ........................................................................................ 68-69, 71-72 rgle ...................................................................................................... 69-70 Rfrencement ............................................................................ 32, 34, 36, 41 naturel ............................................................................................ 19, 31, 54 naturel dun site ................................................................................... 44, 55 tricher ou pas ............................................................................................ 35 Region.php .................................................................................................. 148 Rgle de rcriture dURL ....................................................................... 69-70 Rel=nofollow .......................................................................................... 88, 91 Rseaux sociaux ............................................................................ 29, 158, 239 Russir un positionnement ............................................................................ 55 RewriteEngine on .......................................................................................... 69 RewriteRule .................................................................................................. 69 RFC 2109 ................................................................................................... 135 RFC 2965 ................................................................................................... 135 Rubrique ....................................................................................................... 28
248
INDEX
S
Search Engine Results Page(s) ................................................................ 12, 20 SERP ..................................................... 12, 20, 22, 31 33, 35, 38, 47, 54-55 Session ..................................................................................................... 25-26 invisible pour Google ............................................................................... 238 Session_region() .......................................................................................... 140 Session_start() ..................................................................................... 139, 150 Seuil de duplicate content ............................................................................. 93 Site web exemple .......................................................................................... 45 Snippet .......................................................................................................... 77 Soumettre une URL .................................................................................... 235 Sous rubriques .............................................................................................. 28 Spam de liens ............................................................................................... 40 Spamdexing .............................................................. 24, 34 38, 40, 105, 108 enjeux ......................................................................................................... 36 involontaire .............................................................................................. 191 page ........................................................................................................... 36 Splash page ................................................................................................. 190 Statistique (anomalie) .................................................................................. 106 Stratgie de mots-cls ............................................................................................... 56 de rfrencement .......................................................................... 14, 34, 113 globale de rfrencement ............................................................................ 43 Structure de proprits ............................................................................................ 104 de site ........................................................................................................ 28 SWFobject2 ................................................................................................. 194
249
INDEX
T
Tags clouds ................................................................................. 14, 32, 41, 94 Techniques de triche ............................................................................... 36, 40 Texte des ancres .................................................................................................. 45 dupliqu ..................................................................................................... 93 Thorie des graphes .................................................................................... 237 Title ........................................................................................ 22, 45, 109, 113 de visuel ..................................................................................................... 46 TOP5 ............................................................................................................ 35 Traffic manager .................................................................................. 15-16, 55 Transfert de PR ........................................................................................... 106 Tricher ou non en rfrencement .................................................................. 35
U
URL ................................................................................................... 25-26, 37 cartographier ........................................................................................... 160 de codes sources ...................................................................................... 238 diffrentes ................................................................................................... 38 humaine ..................................................................................................... 68 machine ...................................................................................................... 68 rewriting ...................................................................... 65-66, 68, 72-73, 130 soumettre .................................................................................................. 235 unique ........................................................................................................ 38
W
Web 1.0 ........................................................................................................ 31 Web 2.0 ..................................................................................... 29-30, 41, 158 interactivit Web 2.0 ................................................................................. 163 Web analytics .............................................................................................. 226
250
INDEX
Z
Zoom.php ................................................................. 93-94, 113, 116, 124, 164
251
Notes
Notes
Notes
Notes
Notes
Notes
Notes
Notes
Notes
Notes
Notes
Notes