Optimiser WordPress pour le SEO

Formation WordPress permettant d'apprendre à optimiser WordPress pour le référencement SEO via la structure Hn de votre site, SEOPress, robots.txt, sitemaps.xml
  • SEO = Search Engine Optimisation ou Référencement naturel gratuit
  • SEA = Search Engine Advertising ou Référencement payant

Ici, nous ne parlerons que de référencement naturel gratuit SEO !

Que fait le robot de Google quand il passe sur votre site WordPress ?

Les 3 premiers fichiers lus par Google sur votre site sont :

  1. Le .htaccess
  2. Le robots.txt
  3. Le sitemap.xml

Ensuite Google va lire, en fonction de votre sitemap.xml, classiquement :

  1. Le titre de votre site
  2. Le descriptif de votre site
  3. Chaque article, chaque page ou chaque champ personnalisé à savoir par exemple pour article WordPress :
    1. Titre (un seul titre 1)
    2. Contenus (usages de plusieurs titres 2, 3 ou 4 et mots en gras pour le référencement. Si vous incorporez une image dans l’article penser à bien la nommer et la dimensionner)
    3. Extrait
    4. Associer éventuellement une, ou plusieurs, catégorie(s)
    5. Image en avant (penser à bien la nommer et la dimensionner)

La gestion des medias sous WordPress (nommage et optimisation)

  1. Tailler et nommer le media avant de l’importer dans la bibliothèque WordPress
  2. Renseigner la balise « Alt » de l’image en pensant référencement

Allez plus loin dans la gestion des medias sous WordPress

https://kinsta.com/fr/blog/bibliotheque-medias-wordpress


Le .htaccess pour WordPress

.htaccess est un fichier de configuration de base utilisé par le serveur web Apache. Il permet de créer des règles spécifiques pour indiquer au serveur comment fonctionner. Il se trouve toujours à la racine du répertoire de cotre site internet WordPress.

Concrètement .htaccess sert à :

  • Ajouter des règles pour le cache.
  • Configurer des redirections automatisées
  • Forcer la redirection HTTP vers HTTPS
  • Interdire/restreindre l’accès par IP
  • Augmenter la taille de téléchargement

Exemple de .htaccess:

# WPAlex exemple de redirection 301
RedirectPermanent /contact/ https://wpalex.fr/service-client/

# WPAlex Force le HTTPS
RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} !on
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# WPAlex Ne pas modifier - forceHttps


# WPAlex Redirect www to non-www
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.(.)$ [NC]
RewriteRule ^(.)$ https://%1/$1 [R=301,L]
# WPAlex Redirect www to non-www - Fin

# WPAlex Sécurité
# Protéger les fichiers .htaccess et .htpasswds
<Files ~ "^.*\.([Hh][Tt][AaPp])">
order allow,deny
deny from all
satisfy all
</Files>
# Protéger le fichier wp-config.php
<Files wp-config.php>
 order allow,deny
 deny from all
</Files>
# Désactiver l'affichage du contenu des répertoires
Options All -Indexes
# Empêcher le listage des répertoires
IndexIgnore *
# Masquer les informations du serveur
ServerSignature Off
# Activation du suivi des liens symboliques
Options +FollowSymLinks
# Éviter que l'on découvre l'identifiant d'un auteur
<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} ^author=([0-9]*)
RewriteRule .* - [F]
</IfModule>
# Désactiver le hotlinking de vos images
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?DOMAINE.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ http://fakeimg.pl/400x200/?text=Pas_touche_aux_images [NC,R,L]
# Bloquer l'utilisation de certains scripts
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
# Protection contre les injections de fichiers
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.//?)+ [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC]
RewriteRule .* - [F]
# Protections diverses (XSS, clickjacking et MIME-Type sniffing)
<ifModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
Header always append X-Frame-Options SAMEORIGIN
Header set X-Content-Type-Options: "nosniff”
</ifModule>
# WPAlex Sécurité

# Mise en cache des fichiers dans le navigateur
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"

ExpiresByType text/html "access plus 0 seconds"
ExpiresByType text/xml "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType application/json "access plus 0 seconds"
ExpiresByType application/pdf "access plus 0 seconds"

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

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"

ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "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"

ExpiresByType text/css "access plus 6 month"
ExpiresByType application/javascript "access plus 6 month"

ExpiresByType application/x-shockwave-flash "access plus 1 week"
ExpiresByType image/x-icon "access plus 1 week"

</IfModule>

# En-têtes
Header unset ETag
FileETag None

<ifModule mod_headers.c>  
<filesMatch "\.(ico|jpe?g|png|gif|swf)$">  
    Header set Cache-Control "public"  
</filesMatch>  
<filesMatch "\.(css)$">  
    Header set Cache-Control "public"  
</filesMatch>  
<filesMatch "\.(js)$">  
    Header set Cache-Control "private"  
</filesMatch>  
<filesMatch "\.(x?html?|php)$">  
    Header set Cache-Control "private, must-revalidate"
</filesMatch>
</ifModule>

# Compressions des fichiers statiques
<IfModule mod_deflate.c> 
    AddOutputFilterByType DEFLATE text/xhtml text/html text/plain text/xml text/javascript application/x-javascript text/css 
    BrowserMatch ^Mozilla/4 gzip-only-text/html 
    BrowserMatch ^Mozilla/4\.0[678] no-gzip 
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html 
    SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary 
    Header append Vary User-Agent env=!dont-vary 
</IfModule>  

# BEGIN DEFLATE COMPRESSION
<IfModule mod_deflate.c>
# Compress HTML, CSS, JavaScript, Text, XML and fonts
 AddOutputFilterByType DEFLATE application/javascript
 AddOutputFilterByType DEFLATE application/rss+xml
 AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
 AddOutputFilterByType DEFLATE application/x-font
 AddOutputFilterByType DEFLATE application/x-font-opentype
 AddOutputFilterByType DEFLATE application/x-font-otf
 AddOutputFilterByType DEFLATE application/x-font-truetype
 AddOutputFilterByType DEFLATE application/x-font-ttf
 AddOutputFilterByType DEFLATE application/x-javascript
 AddOutputFilterByType DEFLATE application/xhtml+xml
 AddOutputFilterByType DEFLATE application/xml
 AddOutputFilterByType DEFLATE font/opentype
 AddOutputFilterByType DEFLATE font/otf
 AddOutputFilterByType DEFLATE font/ttf
 AddOutputFilterByType DEFLATE image/svg+xml
 AddOutputFilterByType DEFLATE image/x-icon
 AddOutputFilterByType DEFLATE text/css
 AddOutputFilterByType DEFLATE text/html
 AddOutputFilterByType DEFLATE text/javascript
 AddOutputFilterByType DEFLATE text/plain
 AddOutputFilterByType DEFLATE text/xml
</IfModule>
# END DEFLATE COMPRESSION

# BEGIN GZIP COMPRESSION
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>
# END GZIP COMPRESSION

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Le robots.txt pour WordPress

robots.txt est un fichier situé à la racine du serveur qui indique aux robots des moteurs de recherches le comportement à adopter quand ils cherchent à indexer votre site Internet. « Indexer » signifie pour un moteur de recherche d’analyser et de garder en mémoire votre contenu, et donc de pouvoir le proposer dès qu’un internaute tape une recherche

Exemple de fichier robots.txt :


User-agent: *

# On empêche l'indexation des dossiers sensibles
Disallow: /wp-admin
Disallow: /wp-includes
Disallow: /wp-content/plugins
Disallow: /wp-content/cache
Disallow: /trackback
Disallow: /feed
Disallow: /comments
Disallow: /category/*/*
Disallow: */trackback
Disallow: */feed
Disallow: */comments
Disallow: /*.pdf$
# On désindexe toutes les URL ayant des paramètres (duplication de contenu)
Disallow: /*?*
Disallow: /*?
# On désindexe la page de connexion (contenu inutile)
Disallow: /wp-login.php

# On autorise l'indexation des images
Allow: /wp-content/uploads

User-agent: Googlebot
# On empêche l'indexation des fichiers sensibles
Disallow: /*.php$
Disallow: /*.inc$
Disallow: /*.gz$
Disallow: /*.pdf$

# Autoriser Google Image
User-agent: Googlebot-Image
Disallow:
Allow: /*

# Autoriser Google AdSense
User-agent: Mediapartners-Google*
Disallow:
Allow: /*

# Autoriser Ahrefs
User-agent: AhrefsSiteAudit
Allow: /*

User-agent: AhrefsBot
Allow: /*


# On indique au spider le lien vers notre sitemap
Sitemap: https://votreurl.com/sitemap.xml

Le sitemap.xml pour WordPress avec SEOPress

Comment paramétrer SEOPress pour WordPress ?

La cheklist SEO avant la mise en ligne :

  • Compresser et optimiser vos médias
  • Nommer vos médias et renseigner la balise « Alt »
  • Rédiger un Titre de publication en 60 caractères maximum
  • Rédiger un extrait de publication en 160 caractères maximum
  • Rédiger un contenu de publication avec au moins 300 mots et une alternance de
    • Titre 2 (voir Titre 3). H2, H3
    • Textes en gras
    • Citations
    • Images
  • Affecter une image mise en avant
  • Décocher dans Réglages / Lecture : Demander aux moteurs de recherche de ne pas indexer ce site
  • Identifier votre sitemap.xml
  • Identifier votre robots.txt
  • Déclarer le site dans la Search console Google en indiquant le lien du sitemaps.xml et du robots.txt
  • Soyez un peu patient avant d’observer les résultats dans la SERP Google !

Comment bien déclarer et indexer son site WordPress auprès de Google ?

Une fois votre .htaccess, robots.txt et votre sitemaps.xml effectués, nous allons pouvoir « Indexer » c’est à dire déclarer votre site internet WordPress auprès de Google.

Avant, il fallait « tout » faire à la main

Aujourd’hui Google propose une extension officiel pour WordPress qui se nomme Google « Site Kit » :

Avec déjà plus de 400 000 Installations actives, Google sait que WordPress représente 35 % des sites web créé dans le monde. Google à donc intérêt à collaborer avec WordPress.

L’extension Site Kit de Google pour WordPress permet de se connecter à 6 différents services Google. Vous pouvez, pour la plupart de ces service, voir leurs données directement depuis le tableau de bord WordPress :

  1. Analytics
  2. Search Console
  3. AdSense
  4. PageSpeed Insights
  5. Optimize
  6. Tag Manager

La search console Google pour WordPress

https://search.google.com/search-console/about

Très important pour bien déclarer et indexer votre site WordPress auprès de Google.

Indiquer dans votre Search console au moins 2 choses :

  • Votre sitemaps.xml
  • Votre robots.txt
Alexandre TROCME

Alexandre TROCME

Dirigeant de l'EURL WP Alex. Expert WordPress. Webmaster indépendant depuis 2013

Articles: 23