SEO et trailing slash /

J’essaie tant bien que mal d’enlever les / à la fin de mes URL pour éviter le contenu dupliqué sur mon wordpress (entre les www.alpagasfibrefine.com/bas et www.alpagasfibrefine.com/bas/, genre) J’ai essayé d’utiliser ça:

RewriteRule ^(.)/(?.)?$ $1$2 [R=301,L]

Mais ça fonctionne plus ou moins (mon navigateur n’accède plus à certaines page parce qu’il dit qu’il y a trop de redirections…

Il y a quelqu’un qui a une idée sur ce qui se passe ? La formule est correcte ?

as-tu un exemple de page qui ne fonctionne pas

Là elle fonctionne avec et sans le / à la fin, donc j’ai théoriquement un contenu dupliqué. Je n’ai pas mis le RewriteRule que j’ai mis plus haut parce que mon site ne fonctionne plus super quand je l’ai…

La dernière fois, j’avais une erreur disant que la page était innaccessible à cause de trop de redirection et en ce moment (fouille-moi pourquoi !) j’ai soit une erreur 500 ou mon .css ne fonctionne plus. Ça dépend où je le mets.

RewriteEngine On
RewriteBase /2018fibrefine/
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /2018fibrefine/index.php [L]

Quand je le mets à la fin de cette séquence, j’ai une erreur 500 et après RewriteBase /2018fibrefine/, c’est mon .css qui ne fonctionne plus…

C’est pas mon fort, les .htaccess !

Notez que tant que vos URL canoniques sont correctement définies, Google indexera l’URL souhaitée, même sans ce correctif.

pour le .htaccess j’aime mieux laisser des expert comme @Vincent_Poirier te répondre…

mais si tu veux te risquer, moi j’utilise ça au début de mon .htaccess et garde tes autres Rewrite que tu as à part…

# Force trailing slash
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301]
1 J'aime

Ton code n’a malheureusement pas fonctionné… :frowning:

Et j’ai essayé de remettre mon code à part et en haut du .htaccess et je retrouve mon problème du départ avec cette mention dans le navigateur:
CETTE PAGE NE FONCTIONNE PAS
www.alpagasfibrefine.com vous a redirigé à de trop nombreuses reprises

Salut Karine,
C’est un peu du essai et erreur, car c’est une configuration “contextuelle”.
Il faudrait voir le .htaccess au complet, car d’autres règles pourraient entrer en conflit.

1 J'aime

Salut!

Tu as clairement un problème avec ta configuration :confused:

Ton serveur prend une éternité à répondre!!!

Quel est ton hébergeur? Essaie de désactiver tous tes plugins pour voir l’impact sur le temps de chargement! Ça a pas d’allure 20 secondes :scream:!

ça devrait être un problème temporaire

Ah merde… me semblait aussi qu’il était beaucoup plus long des fois, je voulais faire un tour pour vérifier plus en détail mais j’avais pas pris le temps encore… :frowning: Je suis sur inmotion hosting.
Tout ça date de la nouvelle version de mon site internet, soit le nouveau thème pour la boutique. Clairement j’ai amélioré mes fonctionnalité pour la boutique, mais j’ai détérioré ma vitesse en fou !!! :cry:

J’avais des bien bien meilleures performances quand j’avais mon theme «from scratch», mais les ajouts de fonctionnalités étaient pénibles parce que je suis plus une «patcheuse de code» qu’une codeuse actuellement… Et en plus, j’ai perdu 3 semaines de ma vie à attendre après celui qui a fait le theme (il me répondait de nuit, donc c’était long…) pour qu’il finisse par me dire que les custom post type ne fonctionnent pas avec son système de block.

Finalement, mon site a un thème boutique qui répond à la moitié des utilités de mon site, des plugins thrive theme pour mon accueil et il faudrait que je fasse une page archive pour mes fiches d’animaux from scratch parce qu’ils sont dans un custom post type… Je me demande si c’est pas tout ces trucs qui le ralentissent…

Votre avis;

  • Je remet mon ancien thème et j’apprend le code pour l’améliorer
  • Je persiste à trouver une solution avec ce thème
  • Je trouve un autre theme

j’ai déjà eu des problème avec inmotion …souvent rapide mais à l’occasion des temps de fou pour loader…

et oublie pas que gtmetrix calcul le temps pour que ta page soit complètement loader…

ton site semble pas si pire

1 J'aime

Donc si tu étais à ma place, tu persévèrerais avec ce thème.

Je vais tenter de trouver un autre hébergeur l’an prochain peut-être si la lenteur occasionnelle persiste…

perso je suis jamais un fan de donner du trouble à Google, même quand théoriquement c’est pas un problème (menu javascript, 302, trailing slash). C’est peut-être old school mais je pense que ca vaux la peine de faire les choses comme il se doit

2 J'aimes

@Pascal_Cabana @Olivier_Lambert

J’ai réussi à accélérer un brin ! :wink:


Est-ce que vous savez comment ajouter les «add expires headers» qu’il me nomme… premièrement, savez-vous si ça se fait; parce que ça me semble provenir tous de services externes (Facebook, google…) ?

oublie les expires headers qui sont externe a ton site

ça semble être bon, il y a le server respond time qui dépassait légèrement les 200ms quand j’ai testé mais rien de trop long non plus

En condition réel d’utilisation c’est le changement de catégorie dans ta boutique que je trouve un peu long…

1 J'aime

Ok, je vais essayer de simplifier ça ! Je ne trouvais pas ça optimal non plus… Merci !!! :slight_smile:

5mb pour une page web, c’est lourd!

Utilises-tu ça?

J’avais installé ça;

Mais je remarque que ce n’est que mon accueil qui a 5mb, les autres pages, j’ai en bas de 2mb. Je viens de trouver 2 foutues images qui n’ont pas été compressées à l’accueil et je ne m’explique pas pourquoi… mais bon, je vais m’arranger pour changer ça tout de suite ! :slight_smile:

J’ai toujours pas réussi avec mes trailing slash, par contre ! J’essaie de m’y remettre demain !

tu peux copier ton .htaccess ici on pourra peut être aider

Il me semble qu’il n’y a pas grand chose avec quoi rentrer en conflit;
WP Rocket que j’utilise pour le cache et l’accélération
Itheme security
Finalement les redirection de wordpress

# BEGIN WP Rocket v3.1.3.1
# Use UTF-8 encoding for anything served text/plain or text/html
AddDefaultCharset UTF-8
# Force UTF-8 for a number of file formats
<IfModule mod_mime.c>
AddCharset UTF-8 .atom .css .js .json .rss .vtt .xml
</IfModule>

# FileETag None is not enough for every server.
<IfModule mod_headers.c>
Header unset ETag
</IfModule>

# Since we’re sending far-future expires, we don’t need ETags for static content.
# developer.yahoo.com/performance/rules.html#etags
FileETag None

<IfModule mod_alias.c>
<FilesMatch "\.(html|htm|rtf|rtx|txt|xsd|xsl|xml)$">
<IfModule mod_headers.c>
Header set X-Powered-By "WP Rocket/3.1.3.1"
Header unset Pragma
Header append Cache-Control "public"
Header unset Last-Modified
</IfModule>
</FilesMatch>

<FilesMatch "\.(css|htc|js|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|json|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|tif|tiff|ttf|ttc|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$">
<IfModule mod_headers.c>
Header unset Pragma
Header append Cache-Control "public"
</IfModule>
</FilesMatch>
</IfModule>

# Expires headers (for better cache control)
<IfModule mod_expires.c>
ExpiresActive on

# Perhaps better to whitelist expires rules? Perhaps.
ExpiresDefault                          "access plus 1 month"

# cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5)
ExpiresByType text/cache-manifest       "access plus 0 seconds"

# Your document html
ExpiresByType text/html                 "access plus 0 seconds"

# Data
ExpiresByType text/xml                  "access plus 0 seconds"
ExpiresByType application/xml           "access plus 0 seconds"
ExpiresByType application/json          "access plus 0 seconds"

# Feed
ExpiresByType application/rss+xml       "access plus 1 hour"
ExpiresByType application/atom+xml      "access plus 1 hour"

# Favicon (cannot be renamed)
ExpiresByType image/x-icon              "access plus 1 week"

# Media: images, video, audio
ExpiresByType image/gif                 "access plus 1 month"
ExpiresByType image/png                 "access plus 1 month"
ExpiresByType image/jpeg                "access plus 1 month"
ExpiresByType video/ogg                 "access plus 1 month"
ExpiresByType audio/ogg                 "access plus 1 month"
ExpiresByType video/mp4                 "access plus 1 month"
ExpiresByType video/webm                "access plus 1 month"

# HTC files  (css3pie)
ExpiresByType text/x-component          "access plus 1 month"

# Webfonts
ExpiresByType application/x-font-ttf    "access plus 1 month"
ExpiresByType font/opentype             "access plus 1 month"
ExpiresByType application/x-font-woff   "access plus 1 month"
ExpiresByType application/x-font-woff2  "access plus 1 month"
ExpiresByType image/svg+xml             "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"

# CSS and JavaScript
ExpiresByType text/css                  "access plus 1 year"
ExpiresByType application/javascript    "access plus 1 year"

</IfModule>

# Gzip compression
<IfModule mod_deflate.c>
# Active compression
SetOutputFilter DEFLATE
# Force deflate for mangled headers
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
# Don’t compress images and other uncompressible content
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png|rar|zip|exe|flv|mov|wma|mp3|avi|swf|mp?g|mp4|webm|webp|pdf)$ no-gzip dont-vary
</IfModule>
</IfModule>

# Compress all output labeled with one of the following MIME-types
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE application/atom+xml \
		                          application/javascript \
		                          application/json \
		                          application/rss+xml \
		                          application/vnd.ms-fontobject \
		                          application/x-font-ttf \
		                          application/xhtml+xml \
		                          application/xml \
		                          font/opentype \
		                          image/svg+xml \
		                          image/x-icon \
		                          text/css \
		                          text/html \
		                          text/plain \
		                          text/x-component \
		                          text/xml
</IfModule>
<IfModule mod_headers.c>
Header append Vary: Accept-Encoding
</IfModule>
</IfModule>

# END WP Rocket

# BEGIN iThemes Security - Do not modify or remove this line
# iThemes Security Config Details: 2
	# Ban Hosts - Security > Settings > Banned Users
	SetEnvIF REMOTE_ADDR "^157\.55\.39\.140$" DenyAccess
	SetEnvIF X-FORWARDED-FOR "^157\.55\.39\.140$" DenyAccess
	SetEnvIF X-CLUSTER-CLIENT-IP "^157\.55\.39\.140$" DenyAccess
	<IfModule mod_authz_core.c>
		<RequireAll>
			Require all granted
			Require not env DenyAccess
			Require not ip 157.55.39.140
		</RequireAll>
	</IfModule>
	<IfModule !mod_authz_core.c>
		Order allow,deny
		Allow from all
		Deny from env=DenyAccess
		Deny from 157.55.39.140
	</IfModule>
# END iThemes Security - Do not modify or remove this line
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

J’ai un autre .htaccess dans mon dossier dans lesquels il y a l’installation de wordpress. celui-ci est à la racine du site et je remarque que c’est lui qui se met à jour régulièrement pour wp-rocket. J’imagine donc que c’est sur lui que je dois faire les modifications. L’autre (celui qui est dans le dossier) a des redirections légèrement différentes… le voici…

# BEGIN WP Rocket v3.1.1
# Use UTF-8 encoding for anything served text/plain or text/html
AddDefaultCharset UTF-8
# Force UTF-8 for a number of file formats
<IfModule mod_mime.c>
AddCharset UTF-8 .atom .css .js .json .rss .vtt .xml
</IfModule>

# FileETag None is not enough for every server.
<IfModule mod_headers.c>
Header unset ETag
</IfModule>

# Since we’re sending far-future expires, we don’t need ETags for static content.
# developer.yahoo.com/performance/rules.html#etags
FileETag None

# Send CORS headers if browsers request them; enabled by default for images.
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
# mod_headers, y u no match by Content-Type?!
<FilesMatch "\.(cur|gif|png|jpe?g|svgz?|ico|webp)$">
SetEnvIf Origin ":" IS_CORS
Header set Access-Control-Allow-Origin "*" env=IS_CORS
</FilesMatch>
</IfModule>
</IfModule>

# Allow access to web fonts from all domains.
<FilesMatch "\.(eot|otf|tt[cf]|woff2?)$">
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
</FilesMatch>

<IfModule mod_alias.c>
<FilesMatch "\.(html|htm|rtf|rtx|txt|xsd|xsl|xml)$">
<IfModule mod_headers.c>
Header set X-Powered-By "WP Rocket/3.1.1"
Header unset Pragma
Header append Cache-Control "public"
Header unset Last-Modified
</IfModule>
</FilesMatch>

<FilesMatch "\.(css|htc|js|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|json|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|tif|tiff|ttf|ttc|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$">
<IfModule mod_headers.c>
Header unset Pragma
Header append Cache-Control "public"
</IfModule>
</FilesMatch>
</IfModule>

# Expires headers (for better cache control)
<IfModule mod_expires.c>
ExpiresActive on

# Perhaps better to whitelist expires rules? Perhaps.
ExpiresDefault                          "access plus 1 month"

# cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5)
ExpiresByType text/cache-manifest       "access plus 0 seconds"

# Your document html
ExpiresByType text/html                 "access plus 0 seconds"

# Data
ExpiresByType text/xml                  "access plus 0 seconds"
ExpiresByType application/xml           "access plus 0 seconds"
ExpiresByType application/json          "access plus 0 seconds"

# Feed
ExpiresByType application/rss+xml       "access plus 1 hour"
ExpiresByType application/atom+xml      "access plus 1 hour"

# Favicon (cannot be renamed)
ExpiresByType image/x-icon              "access plus 1 week"

# Media: images, video, audio
ExpiresByType image/gif                 "access plus 1 month"
ExpiresByType image/png                 "access plus 1 month"
ExpiresByType image/jpeg                "access plus 1 month"
ExpiresByType video/ogg                 "access plus 1 month"
ExpiresByType audio/ogg                 "access plus 1 month"
ExpiresByType video/mp4                 "access plus 1 month"
ExpiresByType video/webm                "access plus 1 month"

# HTC files  (css3pie)
ExpiresByType text/x-component          "access plus 1 month"

# Webfonts
ExpiresByType application/x-font-ttf    "access plus 1 month"
ExpiresByType font/opentype             "access plus 1 month"
ExpiresByType application/x-font-woff   "access plus 1 month"
ExpiresByType application/x-font-woff2  "access plus 1 month"
ExpiresByType image/svg+xml             "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"

# CSS and JavaScript
ExpiresByType text/css                  "access plus 1 year"
ExpiresByType application/javascript    "access plus 1 year"

</IfModule>

# Gzip compression
<IfModule mod_deflate.c>
# Active compression
SetOutputFilter DEFLATE
# Force deflate for mangled headers
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
# Don’t compress images and other uncompressible content
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png|rar|zip|exe|flv|mov|wma|mp3|avi|swf|mp?g|mp4|webm|webp|pdf)$ no-gzip dont-vary
</IfModule>
</IfModule>

# Compress all output labeled with one of the following MIME-types
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE application/atom+xml \
		                          application/javascript \
		                          application/json \
		                          application/rss+xml \
		                          application/vnd.ms-fontobject \
		                          application/x-font-ttf \
		                          application/xhtml+xml \
		                          application/xml \
		                          font/opentype \
		                          image/svg+xml \
		                          image/x-icon \
		                          text/css \
		                          text/html \
		                          text/plain \
		                          text/x-component \
		                          text/xml
</IfModule>
<IfModule mod_headers.c>
Header append Vary: Accept-Encoding
</IfModule>
</IfModule>

# END WP Rocket

# BEGIN iThemes Security - Do not modify or remove this line
# iThemes Security Config Details: 2
# Quick ban IP. Will be updated on next formal rules save.
SetEnvIF REMOTE_ADDR "^157\.55\.39\.140$" DenyAccess
SetEnvIF X-FORWARDED-FOR "^157\.55\.39\.140$" DenyAccess
SetEnvIF X-CLUSTER-CLIENT-IP "^157\.55\.39\.140$" DenyAccess
<IfModule mod_authz_core.c>
	<RequireAll>
		Require all granted
		Require not env DenyAccess
		Require not ip 157.55.39.140
	</RequireAll>
</IfModule>
<IfModule !mod_authz_core.c>
	Order allow,deny
	Allow from all
	Deny from env=DenyAccess
	Deny from 157.55.39.140
</IfModule>
# END iThemes Security - Do not modify or remove this line
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /2018fibrefine/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /2018fibrefine/index.php [L]
</IfModule>

# END WordPress
	# WP Maximum Execution Time Exceeded
	<IfModule mod_php5.c>
		php_value max_execution_time 300
	</IfModule>

mon installation est dans un dossier wordpress
mais c’est dans le public_html/.htaccess que j’ai le code…

# BEGIN WP Rocket v3.0.4
# Force trailing slash
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1/ [L,R=301]