Pourquoi Google Indexing Friendly URL est-il mélangé avec des tirets et% 20?

J’ai développé un blog à partir de rien et les choses se sont bien passées jusqu’à présent. J’ai finalement réussi à écrire mon premier article / article, et j’attendais que Google indexe cette page spécifique pour s’assurer qu’il n’y ait aucun problème. Eh bien, Google indexe actuellement la même page 4 fois, j’ai (avec l’aide des utilisateurs de stackoverflow) un mod_rewrite sur mon htaccess pour réécrire toutes les URL en tirets provenant d’un fichier spécifique (article.php).

La page de mon article se présente comme suit. exemple: www.site.com/article.php?article_id=10&article_title=friendly url goes over here

avec mod_rewrite j’ai changé les URL à la suivante.

www.site.com/article/id/friendly-url-goes-over-here

mais Google semble indexer la même page 4 fois comme ça ..

 www.site.com/article/10/friendly-url-goes-over-here www.site.com/article/10/friendly-url-goes%20over%20here www.site.com/article/10/friendly-url%20goes%20over%20here www.site.com/article/10/friendly%20-url%20goes%20over%20here 

Pourquoi indexe-t-il 4 de la même page? Il semble indexer les pages combien de fois chaque tiret est inséré, donc s’il y avait 10 tirets, je suppose que Google indexerait 10 de la même page. Voici tout mon fichier htaccess.

 RewriteEngine on # add www before hostname RewriteCond %{HTTP_HOST} ^oddify\.co$ [NC] RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=302,L,NE] # if on article page, get slugs and make into friendly url RewriteCond %{THE_REQUEST} \s/article\.php\?article_uid=([^&]+)&article_title=([^&\ ]+) RewriteRule ^ /article/%1/%2/? [L,R=302,NE] # if page with .php is requested then remove the extension RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC] RewriteRule ^ /%1/ [R=302,L,NE] RewriteRule "^(article)/([^ ]*) +(.*)$" /$1/$2-$3 [L,R] # Force a trailing slash to be added RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{THE_REQUEST} \s/+([^.]+?[^/.])[\s?] [NC] RewriteRule ^ /%1/ [R=302,L] # allow page direction to change the slugs into friendly seo URL RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (?:^|/)article/([^/]+)/([^/]+)/?$ /webroot/article.php?article_uid=$1&article_title=$2 [L,QSA,NC] # silently rewrite to webroot RewriteCond %{REQUEST_URI} !/webroot/ [NC] RewriteRule ^ /webroot%{REQUEST_URI} [L] # .php ext hiding RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.+?)/?$ $1.php [L] 

J’ai écrit cette question il y a quelques jours, je me suis assuré de désindexer les pages de Google, puis maintenant google les a ré-indexées de la même manière.

Voici les pages Google montrant les 4 pages d’index: page de recherche google

Essayez de changer cette redirection en 301:

 RewriteRule "^(article)/([^ ]*) +(.*)$" /$1/$2-$3 [L,R=301] 

Le statut 301 indique à Google (et au navigateur et aux autres clients) que la redirection est permanente et que l’ancienne URL (celle contenant des espaces) ne doit plus être prise en compte.

Le problème avec votre fichier .htaccess est que pour chaque espace du titre, il effectuera une redirection. Cela peut ou non être résolu en utilisant une redirection permanente ( 301 ), mais même alors, le navigateur donnera une erreur (boucle de redirection détectée) si trop d’espaces apparaissent dans le titre. Vous pouvez résoudre les deux problèmes en faisant tout simplement sur le serveur:

 RewriteRule ^article/([^\ ]*)\ ([^\ ]*\ .*) /article/$1-$2 [N] RewriteRule ^article/([^\ ]*)\ ([^\ ]*)$ /article/$1-$2 [L,R=301] 

La première règle correspond si au moins 2 espaces apparaissent dans l’URL, et réécrira l’un des espaces et ordonnera à Apache de parcourir à nouveau le fichier .htaccess ( [N] ). S’il ne rest qu’un seul espace, la seconde règle correspondra et, en plus de réécrire ce dernier espace, elle redirecta également l’utilisateur. Ce ne sera qu’une redirection, et j’espère que la redirection permanente fera que seule la nouvelle URL sera visible dans Google.

S’il y a plus d’espaces dans l’URL que de récursions internes autorisées par Apache, cela entraînera une erreur de serveur interne. Si vous avez access à httpd.conf , vous pouvez modifier LimitInternalRecursion pour autoriser davantage de récursions internes. Attention: réglez ceci sur un numéro SANE. Si, pour une raison quelconque, vous avez une boucle sans fin dans vos règles Rewrite et que ce nombre est incroyablement élevé, vous verrouillez votre serveur jusqu’à ce qu’il atteigne cette limite. Voir la documentation .