Redirect selon HTTP_REFERER

WRInaute discret
Bonjour,

J'ai une page (A) de faible qualité (à la place de celle que je voudrais (B)) qui arrive à bien se positionner sur plusieurs mots clé principaux pour mon site.

J'ai réfléchi aux options possibles (balise no index, dégradation de la qualité de la page (A),etc.) mais j'aimerai me tourner vers une redirection vers la page (B) lorsque l'internaute arrive sur la page (A) à partir des moteurs de recherche.
Je sais que cette méthode est facilement contournable mais ça ne me dérange pas car la page (A) doit être accessible mais pas quand on arrive des SERP (au moins Google et Bing).

J'ai commencé à écrire des règles dans mon .htaccess mais je n'y arrive pas du tout.

Voilà mon .htaccess, fonctionnel.

Code:
RewriteEngine ON

# Redirect non-www to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^.*/pagequelconque.php
RewriteRule ^(.*)pagequelconque.php$ /$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^.*/pagequelconque2.html
RewriteRule ^(.*)pagequelconque2.html$ /$1 [R=301,L] 

Rewritecond    %{REQUEST_FILENAME}  !-d
RewriteCond    %{REQUEST_FILENAME}  !-f
RewriteRule .* router.php

J'aimerai rajouter quelque chose du genre (ça ne fonctionne pas):

Code:
RewriteCond %{HTTP_REFERER} !^https://www.google.com [NC]
RewriteRule ^(.*)$ http://www.example.com/pageB.html [R=301,L]

Mais la page est redirigée trop de fois et ne s'affiche pas.

Avez vous des pistes pour que je puisse faire des recherches ?
Ou directement une solution fonctionnelle ? :)

Cordialement.
 
WRInaute discret
J'ai l'impression que tu prend le problème à l'envers.
Si ta page A est bien positionner alors tant mieux même si elle n'est pas parfaite.
Ce qu'il faut c'est que tu améliore la page B, si elle est moins bien positionner c'est que google ne la trouve pas mieux et tu risque de perdre en positionnement.
Incité les personnes sur la page A à aller sur la page B est plus cohérent que les forcer.
 
WRInaute discret
Bonjour, merci pour ta réponse.

A vrai dire, la page (A) est une page qui ne devrait pas être accessible directement via les SERP, c'est pour ça que j'ai pensé à une balise noindex mais je n'aimerai pas perdre son positionnement.
Je préférerai que les internautes atterrissent sur la page (B) quand ils cliquent sur cette page dans les SERP.
Le but est de ne pas toucher à la page (B).
La méthode que je veux utiliser n'est peut être pas optimale mais je n'en vois pas d'autres.
 
WRInaute discret
Ah oui...
Du coup je vais devoir abandonner cette idée.

Si quelqu'un a la solution pour le .htaccess, ça m'intéresse quand même pour ma culture personnelle et pour faire des tests perso.

Merci pour vos retours.
 
Membre Honoré
Bonjour,
klp a dit:
j'aimerai me tourner vers une redirection vers la page (B) lorsque l'internaute arrive sur la page (A) à partir des moteurs de recherche.
Redirection 301 et adapter la page B pour qu'elle se positionne à la place de la page A.

Cordialement.
 
WRInaute accro
klp a dit:
Code:
RewriteCond %{HTTP_REFERER} !^https://www.google.com [NC]
RewriteRule ^(.*)$ http://www.example.com/pageB.html [R=301,L]

Mais la page est redirigée trop de fois et ne s'affiche pas.
Essaie plutôt quelque chose comme ceci:
Code:
RewriteCond %{HTTP_REFERER} ^https?://www\.google\.
RewriteRule ^pageA.html$ http://www.example.com/pageB.html [L,R]
Avec ton code, la redirection s'applique si le referrer n'est pas Google et elle s'applique un nombre infini de fois puisqu'elle s'applique à toutes les adresses, donc aussi à pageB.html.

Dans mon code, ces problèmes devraient être réglés. De plus, j'utilise une redirection 302 au lieu d'une 301 car, avec une 301, Internet Explorer met la redirection en cache, ce qui rend impossible l'accès à pageA.html dès qu'il y a eu une redirection.
 
WRInaute discret
Bonjour,

Merci pour ton explication.
J'ai testé ta solution mais ça ne fonctionne malheureusement pas.
 
WRInaute accro
klp a dit:
J'ai testé ta solution mais ça ne fonctionne malheureusement pas.
Si tu souhaites plus d'aide, il faudrait en dire un peu plus :mrgreen:

1. peux-tu copier ici le code que tu as ajouté dans ton .htaccess, celui qui "ne fonctionne malheureusement pas" ?

2. que veut dire "ne fonctionne malheureusement pas" : "aucune redirection ? redirection vers une mauvaise adresse ? boucle infinie de redirections ?
 
WRInaute discret
J'ai testé ta solution :

Code:
RewriteCond %{HTTP_REFERER} ^https?://www\.google\.
RewriteRule ^pageA.html$ http://www.example.com/pageB.html [L,R]

Sans succès, il n'y a pas de redirection.

Puis j'ai modifié un peu en tâtonnant, comme à chaque fois avec les redirections, avec par exemple :

Code:
RewriteCond %{HTTP_REFERER} ^https://www\.google\.fr
RewriteRule http://www.example.com/pageA.html$ http://www.example.com/pageB.html [L,R]

J'ai enlevé le "?" de la première ligne et rajouté "fr"
J'ai rajouté le chemin absolu de la page A

Toujours sans succès, aucune redirection n'est faite.

Merci encore.
 
WRInaute accro
Merci pour la réponse.

Je confirme qu'il ne faut pas mettre le chemin absolu de la page A, uniquement "pageA.html" (pas de / devant).

Ta rewritecond avec google.fr me semble correcte (redirection seulement si le referrer est google.fr)

Il faut évidemment placer ceci avant toute règle qui changerait le nom pageA.html en autre chose.

Pour info, j'utilise une redirection comme celle-là sur un site et elle fonctionne sans problème. La seule différence est que c'est la page d'accueil que je redirige vers une autre page quand le referrer est un certain site.

Tu peux peut-être essayer de rediriger la page d'accueil pour voir ce que ça donne:
Code:
RewriteCond %{HTTP_REFERER} ^https://www\.google\.fr
RewriteRule ^$ http://www.example.com/pageB.html [L,R]
 
WRInaute discret
Toujours sans succès :(

Voici l'intégralité de mon .htaccess
Code:
RewriteEngine ON

# Redirect non-www to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ /$1 [R=301,L]

#RewriteCond %{THE_REQUEST} ^.*/pageB.html
#RewriteRule ^(.*)pageB.html$ /$1 [R=301,L] 

RewriteCond    %{REQUEST_FILENAME}  !-d
RewriteCond    %{REQUEST_FILENAME}  !-f
RewriteRule .* router.php

RewriteCond %{HTTP_REFERER} ^https://www\.google\.fr
RewriteRule ^$ http://www.example.com/pageB.html [L,R]

J'ai une règle qui concerne aussi la page B mais je l'ai temporairement commenté, sans succès. J'ai aussi placé la solution que tu me donnes avant, toujours sans succès.

Les redirections, plus j'en fais, moins je comprends...
 
WRInaute accro
Je ferais un essai en remontant les deux dernières lignes juste après la partie "Redirect non-www to www".
 
WRInaute discret
Ça fonctionne !

Voici mon .htaccess si quelqu'un a besoin de la solution :
Code:
RewriteEngine ON

# Redirect non-www to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTP_REFERER} ^https://www\.google\.fr
RewriteRule ^pageA.html$ http://www.example.com/pageB.html [L,R]
...

Merci à tous pour vos retours et plus particulièrement à toi jeanluc !

Je vais pouvoir tester l'impact d'une telle technique sur un site.

Bonne journée
 
Discussions similaires
Haut