{"id":268,"date":"2010-06-02T22:09:53","date_gmt":"2010-06-02T20:09:53","guid":{"rendered":"http:\/\/grummfy.be\/blog\/?p=268"},"modified":"2010-06-04T05:00:58","modified_gmt":"2010-06-04T03:00:58","slug":"url-rewriting-et-seo-duplication-de-contenu","status":"publish","type":"post","link":"https:\/\/grummfy.be\/blog\/268","title":{"rendered":"URL rewriting et SEO : duplication de contenu"},"content":{"rendered":"<p>Cet article pr\u00e9sente rapidement l&rsquo;<acronym title=\"Uniform Resource Locators\">URL<\/acronym> rewriting et ce qu&rsquo;est SEO pour arriver au c\u0153ur du sujet, \u00e0 savoir, la probl\u00e9matique de la r\u00e9\u00e9criture d&rsquo;URL : la duplication de contenu. Pourquoi la duplication de contenu est g\u00eanante et surtout comment l&rsquo;\u00e9viter sont expliqu\u00e9 dans la suite!<!--more--><\/p>\n<h2>Mise en bouche<\/h2>\n<p>L&rsquo;URL rewriting ou r\u00e9\u00e9criture d&rsquo;<acronym title=\"Uniform Resource Locators\">URL<\/acronym><sup class='footnote'><a href='#fn-268-1' id='fnref-268-1' onclick='return fdfootnote_show(268)'>1<\/a><\/sup> permet de r\u00e9\u00e9crire de mani\u00e8re plus ou moins dynamique des URL (par exemple transformer http:\/\/www.example.com\/ en http:\/\/example.com\/ avec une redirection ou encore http:\/\/example.com\/contact\/moi\/par\/formulaire en http:\/\/example.com\/contact.php).<\/p>\n<p>SEO ou Search Engine Optimization consiste \u00e0 optimiser le r\u00e9f\u00e9rencement d&rsquo;un site.<\/p>\n<h2>Exemple<\/h2>\n<p>Afin de d\u00e9buter, il convient de donner un exemple fonctionnel. Reprenons donc un fichier .htaccess de base :<code><br \/>\n&lt;IfModule mod_rewrite.c&gt;<br \/>\nRewriteEngine on<br \/>\n#si votre fichier se trouve dans \/chemin vers votre r\u00e9pertoire de base de votre serveur\/test\/<br \/>\nRewriteBase \/test\/<br \/>\n#<br \/>\n#On \u00e9limine les fichiers et r\u00e9pertoires qui existent d\u00e9j\u00e0 de la r\u00e9\u00e9criture<br \/>\nRewriteCond %{REQUEST_FILENAME} !-f<br \/>\nRewriteCond %{REQUEST_FILENAME} !-d<br \/>\n#r\u00e9\u00e9crit l'url<br \/>\nRewriteRule ^(.+)$ index.php?path=$1 [QSA,L]<br \/>\n&lt;\/IfModule&gt;<br \/>\n<\/code><br \/>\nJe suppose que vous tester votre script localement, que vous \u00eates dans le dossier test et que le fichier php est index.php (qui suit).<\/p>\n<pre lang=\"PHP\"><?php\r\n#\r\necho '<pre>';\r\nvar_dump($_SERVER['SCRIPT_FILENAME']);\r\nvar_dump($_SERVER['REDIRECT_QUERY_STRING']);\r\nvar_dump($_SERVER['REDIRECT_URL']);\r\nvar_dump($_SERVER['REQUEST_URI']);\r\nvar_dump($_SERVER['SCRIPT_NAME']);\r\nvar_dump($_SERVER['PHP_SELF']);\r\nvar_dump($_SERVER['QUERY_STRING']);\r\nvar_dump($_REQUEST);\r\necho '<\/ pre>';\r\n#\r\n# EOF\r\n<\/pre>\n<p>Si vous testez le script, essayez d&rsquo;y acc\u00e9der par http:\/\/localhost\/test\/ceci-est_un-test?toto=tata puis par http:\/\/127.0.0.1\/ceci-est_un-test?toto=tata . Dans le deuxi\u00e8me cas, une redirection 301 (fichier bouger de mani\u00e8re permanente) est effectu\u00e9e. Concernant, l&rsquo;explication en d\u00e9tail de la r\u00e9\u00e9criture d&rsquo;URL je vous renvoi vers votre moteur de recherche favoris.<\/p>\n<h2>Double acc\u00e8s<\/h2>\n<p>Maintenant, un  probl\u00e8me se pose. En effet, votre site est accessible par plusieurs URL diff\u00e9rentes pour un m\u00eame contenu, les moteurs de recherche interpr\u00e9teront cela comme du duplicata de contenu <sup class='footnote'><a href='#fn-268-2' id='fnref-268-2' onclick='return fdfootnote_show(268)'>2<\/a><\/sup>! Pour r\u00e9soudre ce probl\u00e8me, il faut simplement faire en sorte que seule une seule et unique adresse soit accessible.<\/p>\n<p>Premi\u00e8rement, v\u00e9rifier que l&rsquo;on provient du bon domaine (par exemple : n&rsquo;autoriser que example.com et non pas www.example.com ou uniquement localhost et non pas 127.0.0.1), le fichier .htaccess devient :<br \/>\n<code><br \/>\n&lt;IfModule mod_rewrite.c&gt;<br \/>\nRewriteEngine on<br \/>\n#si votre fichier se trouve dans \/chemin vers votre r\u00e9pertoire de base de votre serveur\/test\/<br \/>\nRewriteBase \/test\/<br \/>\n#<br \/>\n#test si on est bien sur le domaine localhost et non 127.0.0.1 ou autre chose<br \/>\nRewriteCond %{HTTP_HOST} !^localhost<br \/>\n#QSA pour transmettre le query string<br \/>\n#L pour dire de sortir de la boucle de r\u00e9\u00e9criture<br \/>\n#R pour rediriger avec le code HTTP 301<br \/>\nRewriteRule ^(.*) http:\/\/localhost\/test\/$1 [QSA,L,R=301]<br \/>\n#<br \/>\n#On \u00e9limine les fichiers et r\u00e9pertoires qui existent d\u00e9j\u00e0 de la r\u00e9\u00e9criture<br \/>\nRewriteCond %{REQUEST_FILENAME} !-f<br \/>\nRewriteCond %{REQUEST_FILENAME} !-d<br \/>\n#r\u00e9\u00e9crit l'url<br \/>\nRewriteRule ^(.+)$ index.php?path=$1 [QSA,L]<br \/>\n&lt;\/IfModule&gt;<br \/>\n<\/code><\/p>\n<p>Ensuite, il faut dire aux moteurs de recherche de ne pas indexer les URL du genre index.php?mesparametres. Pour cela, on cr\u00e9\u00e9 ou modifie le fichier robots.txt<sup class='footnote'><a href='#fn-268-3' id='fnref-268-3' onclick='return fdfootnote_show(268)'>3<\/a><\/sup> :<br \/>\n<code>User-agent: *<br \/>\nDisallow: \/test\/index.php<br \/>\nAllow: \/test\/<\/code><\/p>\n<p>Maintenant, si vous testez le script, que cela soit par  http:\/\/localhost\/test\/ceci-est_un-test?toto=tata ou par  http:\/\/127.0.0.1\/ceci-est_un-test?toto=tata seul localhost est accessible, l&rsquo;autre effectue une redirection HTTP 301.<\/p>\n<h2>Le mot de la fin<\/h2>\n<p>Dans le cadre de la r\u00e9\u00e9criture d&rsquo;URL, il faut se m\u00e9fier des possibilit\u00e9s d&rsquo;inversion de param\u00e8tre. En effet, avec <a href=\"http:\/\/grummfy.be\/blog\/zend-framework\">ZF<\/a> par exemple, une URL telle que http:\/\/example.com\/test\/controller\/action\/param1\/var1\/param2\/var2 est \u00e9quivalente \u00e0 http:\/\/example.com\/test\/controller\/action\/param2\/var2\/param1\/var1 mais les moteurs de recherche marqueront le contenu comme dupliqu\u00e9. Dans ce cas-l\u00e0, ce n&rsquo;est plus du c\u00f4t\u00e9 d\u2019apache qu&rsquo;il faut regarder mais bien du c\u00f4t\u00e9 du moteur de votre site &#8230;<\/p>\n<div class='footnotes' id='footnotes-268'>\n<div class='footnotedivider'><\/div>\n<ol>\n<li id='fn-268-1'> On devrait dire <acronym title=\"Uniform Resource Identifiers\">URI<\/acronym> selon la RFC 3986 mais <acronym title=\"Tout Le Monde S'En Fout\">TLMSF<\/acronym> <span class='footnotereverse'><a href='#fnref-268-1'>&#8617;<\/a><\/span><\/li>\n<li id='fn-268-2'> au pire vous serez blacklinker, au mieux votre r\u00e9f\u00e9rencement en p\u00e2tira <span class='footnotereverse'><a href='#fnref-268-2'>&#8617;<\/a><\/span><\/li>\n<li id='fn-268-3'> Pour rappel, ce fichier se place \u00e0 la base de votre URL, soit pour que dans notre exemple (http:\/\/www.example.com\/test\/) le fichier soit accessible via http:\/\/www.example.com\/robots.txt <span class='footnotereverse'><a href='#fnref-268-3'>&#8617;<\/a><\/span><\/li>\n<\/ol>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Article pr\u00e9sentant l&rsquo;URL rewriting et ce qu&rsquo;est SEO pour arriver \u00e0 la probl\u00e9matique de la r\u00e9\u00e9criture d&rsquo;URL : la duplication de contenu et comment l&rsquo;\u00e9viter.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[9],"tags":[36,94,98,100,37],"class_list":["post-268","post","type-post","status-publish","format-standard","hentry","category-dev","tag-apache","tag-referencement","tag-seo","tag-url-rewriting","tag-web"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts\/268","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/comments?post=268"}],"version-history":[{"count":18,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts\/268\/revisions"}],"predecessor-version":[{"id":294,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts\/268\/revisions\/294"}],"wp:attachment":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/media?parent=268"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/categories?post=268"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/tags?post=268"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}