Optimiser le SEO WordPress sans plugin

Table des matières

Pour optimiser votre SEO WordPress, vous faites sans doute appel à des plugins dédiés tels que Rank Math ou Yoast. Ces plugins sont super et comprennent des tonnes de fonctionnalités, mais, avouons-le, beaucoup de gestionnaires de sites ne savent pas exploiter complètement leur potentialité. Du coup, des tonnes de fonctions ne sont pas utilisées et surchargent le site inutilement. Et comme un site bien vu de Google est aussi un site rapide, et c’est là qu’une approche sur-mesure entre en jeu. Plutôt que de dépendre de ces solutions généralistes, pourquoi ne pas construire votre propre système SEO ? Une approche minimaliste et contrôlée qui répond exactement à vos besoins.

Dans ce guide, je vais vous montrer comment optimiser votre SEO sans Yoast ni Rank Math, en utilisant uniquement des outils et du code léger. Nous nous appuierons principalement sur le plugin ACF (Advanced Custom Fields), qui permet d’ajouter des champs personnalisés à vos contenus et de générer des balises SEO adaptées. Grâce à ACF, vous pourrez personnaliser chaque page, article ou catégorie, tout en gardant votre site rapide et épuré.

Vous apprendrez également à intégrer des schémas JSON-LD dynamiques, à remplacer les fonctionnalités clés des plugins SEO par vos propres fonctions PHP, et à gérer des balises importantes comme <title>, <meta> et <link rel="canonical">. Ce tutoriel s’adresse autant aux développeurs qu’aux utilisateurs intermédiaires souhaitant reprendre la main sur leur SEO.

Important : cet article s’adresse aux webmasters “bricoleurs” qui tiennent à maîtriser un maximum leur site avant de faire appel à des plugins tiers. Chaque fonction proposée dans ce tuto se doit d’être testée, notamment pour éviter les doublons si un de vos plugins applique déjà ce qui est proposé.

Prêt(e) à démarrer ? Passons à la première étape : configurer les champs ACF pour vos balises SEO.

Chapitre 1 : Ajouter des Champs Personnalisés pour Vos Balises SEO avec ACF

Pour optimiser le SEO de vos pages, articles ou produits, la première étape consiste à ajouter des champs personnalisés pour les balises <title> et <meta description>. Ces champs vous permettront de personnaliser facilement ces informations cruciales directement depuis l’interface WordPress.

Nous allons utiliser le plugin ACF (Advanced Custom Fields) pour créer et configurer ces champs.


1. Installer et activer ACF

Si ce n’est pas encore fait, commencez par installer le plugin gratuit ACF :

  1. Allez dans votre tableau de bord WordPress.
  2. Rendez-vous dans Extensions > Ajouter.
  3. Recherchez Advanced Custom Fields.
  4. Cliquez sur Installer maintenant, puis sur Activer.

2. Créer un groupe de champs pour les balises SEO

Une fois ACF activé, nous allons créer les champs nécessaires pour les balises <title> et <meta description> :

  1. Accédez à ACF : Dans le menu WordPress, cliquez sur le bouton Ajouter un groupe de champs.
  2. Nommer le groupe : Donnez un nom à votre groupe de champs, par exemple SEO Metadata.
  3. Ajouter un champ pour le titre SEO :
    • Cliquez sur +Ajouter un champ.
    • Type de champ : choisissez “Texte”.
    • Libellé du champ : indiquez “Meta Title”
    • Nom du champ : Le champ sera automatiquement nommé meta_title.
    • Dans l’onglet “Validation” : Fixez une limite à 60 caractères pour respecter les meilleures pratiques SEO.
    • Dans l’onglet “Présentation” : Ajoutez une instruction comme “Entrez le titre SEO de cette page ou article” dans la zone “Instructions”.
  4. Ajouter un champ pour la description SEO :
    • Cliquez sur +Ajouter un champ.
    • Type de champ : Sélectionnez Textarea.
    • Libellé du champ : Indiquez “Meta Description”.
    • Nom du champ : Automatiquement, ce sera meta_description.
    • Dans l’onglet “Validation” : Fixez une limite à 160 caractères.
    • Dans l’onglet “Présentation” : Ajoutez “Entrez la description SEO de cette page ou article” dans la zone “Instructions”.
  5. Configurer les règles d’affichage :
    • Sous la zone de configuration du Groupe de Champs, descendez jusqu’à la zone “Réglages” et définissez les conditions pour afficher ces champs. Par exemple :
      • Type de publication est égal à Page (ou Article, Produit, etc.).
      • Vous pouvez également appliquer ce groupe de champs à des catégories ou taxonomies particulières en sélectionnant “Taxonomy Term”. (voir l’exemple en image ci-dessous)
  6. Publier le groupe : Cliquez sur Enregistrer les modifications pour sauvegarder votre configuration.

L’idée, ici, est que vous décidez sur quel(s) type(s) de publication vous souhaitez ajouter les champs Meta Title et Meta Description. Si vous décidez “Article”, vous verrez apparaître, dans votre fiche article, en mode création et en mode modification, ces 2 champs qui vont vous permettre de spécifier les 2 balises pour cet article précis. Idem pour les pages, las catégories, les produits…etc.

3. Vérifier l’ajout des champs ACF

  1. Ouvrez une page ou un article dans votre éditeur WordPress.
  2. Vous devriez voir un nouvel onglet ou une section intitulée SEO Metadata avec les champs “Meta Title” et “Meta Description”.
  3. Testez en remplissant ces champs avec un titre et une description personnalisés.

4. Préparer votre thème pour utiliser ces champs

Une fois les champs configurés, il est temps de les intégrer dans le code de votre thème pour qu’ils soient utilisés automatiquement comme balises <title> et <meta description>. Nous allons créer une fonction PHP dans le fichier functions.php de votre thème enfant. (ou vous pouvez créer un petit plugin spécifique pour ces différentes règles).

				
					function generate_meta_tags_with_acf() {
    if (is_singular()) { // Vérifie qu'on est sur une page ou un contenu unique
        $meta_title = get_field('meta_title') ?: get_the_title(); // Utilise ACF ou le titre par défaut
        $meta_description = get_field('meta_description') ?: get_the_excerpt(); // Utilise ACF ou extrait

        // Générer le <title>
        if ($meta_title) {
            echo '<title>' . esc_html($meta_title) . '</title>' . "\n";
        }

        // Générer la meta description UNIQUEMENT si remplie
        if (!empty($meta_description)) {
            echo '<meta name="description" content="' . esc_attr($meta_description) . '">' . "\n";
        }
    }
}
add_action('wp_head', 'generate_meta_tags_with_acf', 1);

				
			

Note : cette fonction s’applique à tous les contenus uniques : articles, pages et produits.

5. Vérifier les balises générées

  1. Accédez à une page, un article ou un produit où vous avez rempli les champs ACF.
  2. Faites un clic droit > Inspecter pour ouvrir les outils de développement.
  3. Vérifiez la présence des balises <title> et <meta name="description"> dans la section <head>.

Chapitre 2 : Étendre les Balises SEO aux Catégories de Produits et d’Articles

Pour optimiser le SEO des catégories d’articles et de produits, nous allons :

  1. Ajouter des champs personnalisés avec ACF pour personnaliser les balises <title> et <meta description> des catégories.
  2. Écrire des fonctions PHP pour générer ces balises dynamiquement.
  3. Bloquer les balises générées automatiquement par WooCommerce pour éviter les doublons.

1. Ajouter des champs ACF pour les catégories

Nous allons configurer ACF pour ajouter des champs personnalisés directement dans les catégories d’articles et de produits, comme nous l’avons fait pour les articles et les pages. Ici vous avez 2 choix. Soit vous utilisez le groupe de champs précédemment créé (SEO Metadata), et dans les réglages vous attribuez ce groupe aux publications “Catégories” et “Catégories de produits”,  soit vous créez un nouveau groupe de champs, avec les mêmes champs Mata Title et Meta Description et vous appliquez les réglages aux types de publications voulus (revoir l’image des réglages).

  1. Créer un groupe de champs :

    • Cliquez le bouton +Ajouter un groupe de champs dans le l’interface “Groupe de champs” d’ACF.
    • Donnez un nom au groupe, par exemple SEO Metadata – Catégories.
    • Ajoutez une description si nécessaire, comme « Champs pour personnaliser le SEO des catégories d’articles et de produits. »

  2. Ajouter un champ pour le titre SEO :

    • Cliquez sur Ajouter un champ.
    • Dans Libellé du champ, indiquez « Meta Title ».
    • Nom du champ : Le nom sera automatiquement généré sous forme meta_title.
    • Type de champ : Choisissez Texte.
    • Instructions : Ajoutez une note comme « Ajoutez un titre optimisé pour le SEO de cette catégorie (60 caractères max). ».
    • Longueur maximale : Fixez la limite à 60 caractères.

  3. Ajouter un champ pour la description SEO :

    • Cliquez sur Ajouter un champ.
    • Dans Libellé du champ, indiquez « Meta Description ».
    • Nom du champ : Ce sera automatiquement généré comme meta_description.
    • Type de champ : Sélectionnez Zone de texte.
    • Instructions : Notez « Ajoutez une description SEO claire pour cette catégorie (160 caractères max). ».
    • Longueur maximale : Fixez une limite de 160 caractères.

  4. Définir les règles d’affichage :

    • Sous Emplacement, configurez les conditions pour afficher les champs :
      • Taxonomie est égal à Catégorie (pour les catégories d’articles).
      • Ajoutez une autre condition : Taxonomie est égal à Catégorie de produits (pour les catégories WooCommerce).
    • Cela appliquera ces champs aux deux types de catégories.

  5. Publier le groupe de champs :

    • Cliquez sur Publier/Enregistrer les modifications pour sauvegarder vos réglages.

2. Bloquer les balises générées par WooCommerce

WooCommerce génère automatiquement ses propres balises <title> et <meta description> pour les pages de catégories de produits. Ces balises peuvent entrer en conflit avec celles générées par vos champs ACF.

Ajoutez ce code à votre fichier functions.php (ou votre plugin personnalisé) pour désactiver les balises par défaut de WooCommerce :

				
					// Désactiver le titre généré par WordPress/WooCommerce
remove_action('wp_head', '_wp_render_title_tag', 1);

// Désactiver la meta description générée automatiquement
add_filter('woocommerce_short_description', '__return_empty_string');

// Désactiver les balises visibles générées automatiquement par WooCommerce
remove_action('woocommerce_archive_description', 'woocommerce_taxonomy_archive_description', 10);
remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_title', 5);

				
			

Selon votre version WordPress WooCommerce, toutes les 4 instructions ne seront pas forcément nécessaires. A vous de tester sur chaque type de publication (articles, pages, catégorie d’articles, catégorie de produits et produits) en affichant le code source de la page et en vérifiant que le contenu des balises est bien celui que vous avez saisi dans la partie administration de la publication (Meta Title et Meta Description).

3. Générer des balises SEO pour les catégories d’articles et de produits

Nous allons créer deux fonctions PHP : l’une pour les catégories d’articles, l’autre pour les catégories de produits WooCommerce. Ajoutez les dans votre functions.php ou votre plugin. Code pour les catégories d’articles :
				
					function generate_meta_tags_to_category() {
    if (is_category()) { // Vérifie qu'on est sur une catégorie d’articles
        $term_id = get_queried_object_id(); // ID de la catégorie
        $meta_title = get_field('meta_title', 'category_' . $term_id) ?: single_cat_title('', false);
        $meta_description = get_field('meta_description', 'category_' . $term_id) ?: term_description($term_id);

        // Générer le <title>
        if ($meta_title) {
            echo '<title>' . esc_html($meta_title) . '</title>' . "\n";
        }

        // Générer la meta description
        if (!empty($meta_description)) {
            echo '<meta name="description" content="' . esc_attr($meta_description) . '">' . "\n";
        }
    }
}
add_action('wp_head', 'generate_meta_tags_to_category', 1);

				
			

Code pour les catégories de produits WooCommerce :

				
					function generate_meta_tags_for_product_category() {
    if (is_product_category()) { // Vérifie qu'on est sur une catégorie de produits WooCommerce
        $term_id = get_queried_object_id(); // ID de la catégorie
        $meta_title = get_field('meta_title', 'product_cat_' . $term_id) ?: single_term_title('', false);
        $meta_description = get_field('meta_description', 'product_cat_' . $term_id) ?: term_description($term_id);

        // Générer le <title>
        if ($meta_title) {
            echo '<title>' . esc_html($meta_title) . '</title>' . "\n";
        }

        // Générer la meta description
        if (!empty($meta_description)) {
            echo '<meta name="description" content="' . esc_attr($meta_description) . '">' . "\n";
        }
    }
}
add_action('wp_head', 'generate_meta_tags_for_product_category', 1);

				
			

4. Vérifier les résultats

  1. Tester une catégorie d’articles :

    • Rendez-vous dans Articles > Catégories.
    • Sélectionnez une catégorie ou créez-en une nouvelle.
    • Remplissez les champs Meta Title et Meta Description dans la section SEO Metadata.
    • Enregistrez les modifications, puis visualisez la catégorie sur votre site.
    • Inspectez le code source pour vérifier que les balises <title> et <meta name="description"> correspondent aux champs ACF.

  2. Tester une catégorie de produits :

    • Rendez-vous dans Produits > Catégories.
    • Sélectionnez une catégorie ou créez-en une nouvelle.
    • Remplissez les champs Meta Title et Meta Description dans la section SEO Metadata.
    • Enregistrez, puis visualisez la catégorie produit sur votre site.
    • Inspectez le code source pour confirmer la présence des balises.

  3. Valider l’absence de doublons :

    • Vérifiez que WooCommerce ne génère plus de balises <title> ou <meta> supplémentaires.

Chapitre 3 : Ajouter des Schémas JSON-LD Dynamiques pour Enrichir les Résultats de Recherche

Les schémas JSON-LD permettent d’enrichir les résultats dans les moteurs de recherche en ajoutant des données structurées à vos pages. Google utilise ces informations pour afficher des rich snippets, qui rendent vos résultats plus attrayants et augmentent votre taux de clics.

Dans ce chapitre, nous allons :

  1. Ajouter des schémas JSON-LD pour les articles, pages, et catégories.
  2. Créer des schémas spécifiques pour les produits WooCommerce, y compris ceux avec des variations.

1. Comprendre les schémas JSON-LD

Les types de schémas les plus courants incluent :

  • Article : pour les articles de blog ou contenus éditoriaux.
  • Product : pour les pages produits, y compris les informations de prix et de disponibilité.
  • WebPage : pour les pages statiques comme une page “À propos” ou d’accueil.
  • Breadcrumb : pour indiquer la hiérarchie de navigation.

2. Schéma pour les articles et les pages

Pour les articles et les pages, nous allons créer un schéma JSON-LD de type Article.

Code PHP : Ajoutez ce code dans ton fichier functions.php ou votre plugin personnalisé, pour générer un schéma JSON-LD pour les articles :

				
					function add_article_schema_json_ld() {
    if (is_singular('post')) {
        $title = get_the_title();
        $description = get_the_excerpt();
        $url = get_permalink();
        $author = get_the_author();
        $date_published = get_the_date('c');
        $date_modified = get_the_modified_date('c');
        
        $schema = [
            "@context" => "https://schema.org",
            "@type" => "Article",
            "headline" => $title,
            "description" => $description,
            "url" => $url,
            "author" => [
                "@type" => "Person",
                "name" => $author
            ],
            "datePublished" => $date_published,
            "dateModified" => $date_modified
        ];

        echo '<script type="application/ld+json">' . json_encode($schema) . '</script>' . "\n";
    }
}
add_action('wp_head', 'add_article_schema_json_ld');

				
			

Explication :

  • Ce schéma inclut le titre, la description, l’auteur, la date de publication et de modification.
  • Il est ajouté uniquement sur les articles grâce à is_singular('post').

3. Schéma pour les produits WooCommerce

Les produits WooCommerce nécessitent un schéma JSON-LD de type Product, incluant des détails comme :

  • Nom du produit.
  • Description.
  • Prix (avec les variations si disponibles).
  • Disponibilité.

Code PHP pour les produits avec variations :

				
					function add_dynamic_product_schema_json_ld() {
    if (is_singular('product')) {
        global $product;

        $schema = [
            "@context" => "https://schema.org/",
            "@type" => "Product",
            "name" => $product->get_name(),
            "image" => wp_get_attachment_url($product->get_image_id()),
            "description" => wp_strip_all_tags($product->get_short_description()),
            "brand" => [
                "@type" => "Brand",
                "name" => "Ciel de Naissance"
            ],
            "offers" => []
        ];

        // Gérer les variations
        if ($product->is_type('variable')) {
            $variations = $product->get_available_variations();
            foreach ($variations as $variation) {
                $variation_obj = wc_get_product($variation['variation_id']);
                $schema['offers'][] = [
                    "@type" => "Offer",
                    "price" => $variation_obj->get_price(),
                    "priceCurrency" => get_woocommerce_currency(),
                    "availability" => "https://schema.org/" . ($variation_obj->is_in_stock() ? "InStock" : "OutOfStock"),
                    "url" => get_permalink(),
                ];
            }
        } else {
            // Produit simple
            $schema['offers'][] = [
                "@type" => "Offer",
                "price" => $product->get_price(),
                "priceCurrency" => get_woocommerce_currency(),
                "availability" => "https://schema.org/" . ($product->is_in_stock() ? "InStock" : "OutOfStock"),
                "url" => get_permalink(),
            ];
        }

        echo '<script type="application/ld+json">' . json_encode($schema) . '</script>' . "\n";
    }
}
add_action('wp_head', 'add_dynamic_product_schema_json_ld');

				
			

Explication :

  • Le schéma est ajouté uniquement sur les pages produits grâce à is_singular('product').
  • Produits simples : Un seul Offer est inclus dans le schéma.
  • Produits avec variations : Chaque variation est représentée par un Offer avec ses propres prix et disponibilité.

4. Schéma pour les catégories d’articles et de produits

Pour les catégories, nous utilisons un schéma de type WebPage ou CollectionPage.

Code PHP pour les catégories :

				
					function add_category_schema_json_ld() {
    if (is_category() || is_product_category()) {
        $term = get_queried_object();
        $schema = [
            "@context" => "https://schema.org",
            "@type" => "CollectionPage",
            "name" => single_term_title('', false),
            "description" => term_description($term),
            "url" => get_term_link($term),
        ];

        echo '<script type="application/ld+json">' . json_encode($schema) . '</script>' . "\n";
    }
}
add_action('wp_head', 'add_category_schema_json_ld');

				
			

Explication :

  • Type : CollectionPage indique que la page regroupe un ensemble d’éléments.
  • Inclut le nom de la catégorie, sa description, et son URL.

5. Vérifier les schémas générés

  1. Inspectez le code source :

    • Rendez-vous sur une page produit, article ou catégorie.
    • Vérifiez que le script JSON-LD est bien généré dans la section <head>.
  2. Validez avec Google Rich Results Test :

Chapitre 4 : Intégrer les Balises Open Graph pour les Réseaux Sociaux

Les balises Open Graph permettent de contrôler l’apparence de vos pages lorsqu’elles sont partagées sur les réseaux sociaux comme Facebook, Twitter, LinkedIn, et autres. Ces balises sont essentielles pour offrir une présentation visuelle attrayante, renforcer l’engagement des utilisateurs et améliorer la visibilité de vos contenus.

1. Qu’est-ce que les balises Open Graph ?

Les balises Open Graph (OG) fournissent des métadonnées spécifiques aux plateformes sociales, notamment :

  • og:title : Titre de la page.
  • og:description : Résumé ou description de la page.
  • og:image : URL de l’image utilisée pour l’aperçu.
  • og:url : URL canonique de la page.

2. Ajouter des balises Open Graph dynamiques

Nous allons générer dynamiquement des balises OG en fonction du type de contenu (articles, pages, produits WooCommerce).

Code PHP de base :

Ajoutez ce code dans votre fichier functions.php (ou plugin dédié) pour générer les balises OG :

				
					function add_open_graph_tags() {
    if (is_singular()) {
        global $post;

        // Titre
        $og_title = get_field('meta_title') ?: get_the_title();

        // Description
        $og_description = get_field('meta_description') ?: get_the_excerpt();

        // Image
        if (has_post_thumbnail()) {
            $og_image = wp_get_attachment_url(get_post_thumbnail_id($post->ID));
        } else {
            $og_image = 'https://cieldenaissance.fr/wp-content/uploads/default-og-image.jpg'; // Image par défaut
        }

        // URL
        $og_url = get_permalink();

        // Générer les balises OG
        echo '<meta property="og:title" content="' . esc_attr($og_title) . '">' . "\n";
        echo '<meta property="og:description" content="' . esc_attr($og_description) . '">' . "\n";
        echo '<meta property="og:image" content="' . esc_url($og_image) . '">' . "\n";
        echo '<meta property="og:url" content="' . esc_url($og_url) . '">' . "\n";
        echo '<meta property="og:type" content="article">' . "\n"; // Par défaut, type article
    }
}
add_action('wp_head', 'add_open_graph_tags');

				
			

3. Adapter les balises OG pour les produits WooCommerce

Pour les produits WooCommerce, nous ajouterons des informations spécifiques comme le prix et la disponibilité.

Code PHP pour les produits :

Ajoutez ce code dans votre functions.php :

				
					function add_open_graph_tags_for_products() {
    if (is_singular('product')) {
        global $product;

        // Titre
        $og_title = get_field('meta_title') ?: get_the_title();

        // Description
        $og_description = get_field('meta_description') ?: $product->get_short_description();

        // Image
        $og_image = wp_get_attachment_url($product->get_image_id()) ?: 'https://cieldenaissance.fr/wp-content/uploads/default-og-image.jpg';

        // URL
        $og_url = get_permalink();

        // Prix et disponibilité
        $availability = $product->is_in_stock() ? "in stock" : "out of stock";
        $price = $product->get_price();

        // Générer les balises OG
        echo '<meta property="og:title" content="' . esc_attr($og_title) . '">' . "\n";
        echo '<meta property="og:description" content="' . esc_attr($og_description) . '">' . "\n";
        echo '<meta property="og:image" content="' . esc_url($og_image) . '">' . "\n";
        echo '<meta property="og:url" content="' . esc_url($og_url) . '">' . "\n";
        echo '<meta property="og:type" content="product">' . "\n";
        echo '<meta property="product:price:amount" content="' . esc_attr($price) . '">' . "\n";
        echo '<meta property="product:availability" content="' . esc_attr($availability) . '">' . "\n";
    }
}
add_action('wp_head', 'add_open_graph_tags_for_products');

				
			

4. Ajouter une image OG par défaut

Si un contenu ne possède pas d’image en vedette, il est bon de définir une image par défaut pour éviter des affichages incomplets lors du partage.

Code pour une image OG par défaut :

Chargez une image générique légère dans votre bibliothèque de médias, puis copiez son URL et ajoutez ce code dans votre fichier functions.php :

				
					function get_default_og_image() {
    return 'https://votre-site.com/wp-content/uploads/default-og-image.jpg';
}

				
			

5. Tester vos balises Open Graph

  1. Utilisez l’outil de débogage Facebook :

    • Rendez-vous sur Facebook Debugger.
    • Entrez l’URL de votre page pour vérifier les balises OG détectées.
    • Si nécessaire, cliquez sur Scrape Again pour actualiser les métadonnées.

  2. Testez sur d’autres plateformes :

6. Résumé des avantages des balises Open Graph

  • Contrôle visuel : Vous décidez comment vos pages apparaissent sur les réseaux sociaux.
  • Engagement amélioré : Des titres accrocheurs et des images attractives augmentent les clics.
  • Uniformité : Vos pages apparaissent de manière cohérente, peu importe le réseau social.

Chapitre 5 : Gestion des Balises Canoniques

Mise en garde importante : selon votre version de WordPress et vos plugins installés, il se peut qu’une balise canonique soit déjà présente sur vos pages. Vérifiez bien qu’elle ne soit pas déjà présente dans votre source avant d’appliquer ce qui suit afin d’éviter tout doublon.

Les balises canoniques (<link rel="canonical">) indiquent aux moteurs de recherche quelle URL est la version principale (ou “canonique”) d’une page. Elles évitent les problèmes de contenu dupliqué, renforcent l’autorité de la page principale et améliorent le SEO de votre site.

Dans ce chapitre, nous allons :

  1. Comprendre l’importance des balises canoniques.
  2. Implémenter une balise canonique personnalisée.
  3. Gérer les cas spécifiques comme les produits WooCommerce et les pages paginées.

1. Pourquoi les balises canoniques sont-elles importantes ?

  • Éviter le contenu dupliqué : Si plusieurs URL affichent le même contenu (par exemple, des variations de produits ou des paramètres de filtre), Google peut les considérer comme des doublons.
  • Indiquer l’URL principale : La balise canonique aide à diriger l’autorité vers l’URL principale.
  • Améliorer le SEO : En centralisant les signaux SEO sur une seule URL, les moteurs de recherche comprennent mieux votre contenu.

2. Ajouter une balise canonique dynamique

Nous allons générer dynamiquement une balise canonique adaptée à chaque type de contenu.

Code PHP de base pour les pages, articles, et produits :

				
					function add_canonical_tags() {
    if (is_singular()) {
        $canonical_url = get_permalink(); // URL de la page ou de l'article
    } elseif (is_home() || is_front_page()) {
        $canonical_url = home_url('/'); // Page d'accueil
    } elseif (is_category() || is_tag() || is_tax()) {
        $canonical_url = get_term_link(get_queried_object()); // Catégories et taxonomies
    } elseif (is_post_type_archive()) {
        $canonical_url = get_post_type_archive_link(get_post_type()); // Archives de CPT
    } elseif (is_paged()) {
        global $wp_query;
        $canonical_url = get_pagenum_link($wp_query->query_vars['paged']); // Pages paginées
    } else {
        return; // Ne rien faire pour les autres cas
    }

    if (!empty($canonical_url)) {
        echo '<link rel="canonical" href="' . esc_url($canonical_url) . '">' . "\n";
    }
}
add_action('wp_head', 'add_canonical_tags', 1);

				
			

3. Tester vos balises canoniques

  1. Inspectez le code source :

    • Rendez-vous sur différentes pages (articles, produits, catégories, archives) de votre site.
    • Vérifiez la présence et la cohérence de la balise <link rel="canonical">.
    • Vérifiez que votre balise n’est pas doublonnée (autre plugin ou WordPress)

  2. Validez avec l’outil URL Inspection de Google Search Console :

    • Soumettez vos URL principales pour confirmer que Google comprend la balise canonique.

Chapitre 6 : votre sitemap XML

Le Rôle et l’Utilité du Sitemap XML : Une Clé pour un SEO Efficace

Un sitemap XML est un fichier spécialement conçu pour les moteurs de recherche comme Google ou Bing. Il agit comme une carte de navigation numérique qui liste toutes les pages importantes de votre site, facilitant leur exploration par les robots d’indexation.

Pourquoi un sitemap XML est essentiel pour votre SEO ?

  1. Amélioration de l’indexation :
    Les moteurs de recherche utilisent le sitemap XML pour découvrir rapidement toutes les pages de votre site, y compris celles qui pourraient être difficiles à trouver via des liens internes.

  2. Gestion des contenus dynamiques :
    Si votre site contient des produits WooCommerce, des articles de blog, ou des types de contenu personnalisés, un sitemap assure que chaque élément est pris en compte pour l’indexation.

  3. Priorisation des contenus :
    Le sitemap permet d’indiquer quelles pages sont les plus importantes (priorité) et à quelle fréquence elles changent (fréquence de mise à jour).

  4. Solution en cas de structure complexe :
    Pour les sites avec des centaines de pages, catégories, ou variations de produits, le sitemap XML devient un outil indispensable pour garantir une exploration complète.

Quels types de contenus inclure dans un sitemap XML ?

  • Pages principales (Accueil, À propos, Contact, etc.).
  • Articles de blog.
  • Produits WooCommerce et leurs catégories.
  • Types de contenu personnalisé (CPT).
  • Pages importantes générées dynamiquement.

Un outil simple pour créer votre sitemap XML

Avec des plugins légers comme XML Sitemap & Google News, vous pouvez générer automatiquement un sitemap optimisé pour votre site, sans fonctionnalités superflues qui alourdissent votre installation WordPress. Ces outils sont parfaits pour les sites qui veulent maximiser leur SEO tout en gardant un fonctionnement rapide et fluide.

Chapitre 7 : Gestion des redirections

Afin d’éviter les toujours gênantes “erreurs 404 – page introuvable”, les plugins comme Yoast, Rank Math ou autres proposent une interface pour gérer les redirections, manuellement une par une et/ou avec un comportement par défaut. Par exemple vous pouvez décider que tout contenu non trouvé sera automatiquement redirigé vers la page d’accueil. Vous pouvez même configurer des redirections automatiques lorsque vous supprimez un contenu (je ne vous le conseille pas).

Comme nous sommes dans un tutoriel pour justement apprendre à se passer de ces plugins super mais un peu trop envahissants, voici une petite fonction que vous pouvez utiliser et qui redirigera tout contenu non trouvé vers l’accueil :

				
					function custom_redirects() {
    if (is_404()) {
        wp_redirect(home_url(), 301); // Redirige toutes les 404 vers la page d'accueil
        exit;
    }

    // Exemple de redirections spécifiques
    if (is_page('ancien-contenu')) {
        wp_redirect(home_url('/nouveau-contenu/'), 301);
        exit;
    }
}
add_action('template_redirect', 'custom_redirects');

				
			

Si vous souhaitez gérer plus finement vos redirections, notamment pour les sites comportant beaucoup de contenus, vous pouvez utiliser un plugin simple et assez léger : Redirection

Chapitre 8 : les balises robot et le fichier robots.txt

Structurer les balises robots de manière efficace est essentiel pour optimiser l’indexation de ton site tout en évitant les contenus inutiles ou redondants dans les résultats des moteurs de recherche. Voici une approche claire et stratégique pour configurer les balises robots.

1. Comprendre les directives des balises robots

Les balises robots permettent de donner des instructions spécifiques aux moteurs de recherche :

DirectiveSignification
indexAutorise l’indexation de la page.
noindexEmpêche l’indexation de la page.
followAutorise les robots à suivre les liens présents sur la page.
nofollowEmpêche les robots de suivre les liens présents sur la page.
noarchiveEmpêche Google de conserver une version en cache de la page.
nosnippetEmpêche Google d’afficher un extrait de texte ou une description dans les résultats de recherche.

2. Structuration des balises robots selon les types de contenu

A. Pages principales (Accueil, À propos, Contact)

  • Directive recommandée : index,follow
  • Raison : Ces pages sont essentielles à ton site et doivent être indexées.

B. Articles et pages de blog

  • Directive recommandée : index,follow
  • Raison : Ces contenus sont généralement conçus pour attirer du trafic organique.

C. Pages produits WooCommerce

  • Directive recommandée : index,follow
  • Raison : Les pages produits sont essentielles pour le SEO et doivent être indexées.

D. Pages techniques ou transactionnelles

  • Exemples : Panier, Commande, Compte client.
  • Directive recommandée : noindex,follow
  • Raison : Ces pages n’ont pas d’intérêt pour le SEO, mais les liens qu’elles contiennent (vers des produits, par exemple) doivent être suivis.

E. Pages de catégories et d’étiquettes

  • Option 1 : Si elles sont optimisées :
    index,follow

    • Raison : Les pages de catégories bien structurées peuvent se positionner sur des mots-clés larges.
  • Option 2 : Si elles ne sont pas optimisées :
    noindex,follow

    • Raison : Éviter le contenu dupliqué tout en permettant aux robots de suivre les liens.

F. Pages paginées

  • Directive recommandée : noindex,follow
    • Raison : Les pages paginées (ex. : /page/2/) n’ont pas de valeur SEO directe mais contiennent des liens pertinents.

G. Pages d’archives inutilisées

  • Exemples : Archives par date, par auteur.
  • Directive recommandée : noindex,follow
  • Raison : Ces pages sont rarement utiles pour les visiteurs et peuvent diluer le SEO.

3. Implémentation dans WordPress

Fonction PHP pour ajouter les balises robots dynamiquement :

Voici une fonction qui gère les balises robots selon les types de contenu :

				
					function manage_robots_meta_tags() {
    if (is_cart() || is_checkout() || is_account_page() || is_search()) {
        // Pages transactionnelles ou techniques : noindex
        echo '<meta name="robots" content="noindex,follow">' . "\n";
    } elseif (is_category() || is_tag() || is_archive()) {
        // Catégories ou étiquettes (non WooCommerce)
        if (!is_tax('product_cat') && !is_tax('product_tag')) {
            echo '<meta name="robots" content="noindex,follow">' . "\n";
        } else {
            // Catégories produits WooCommerce : index
            echo '<meta name="robots" content="index,follow">' . "\n";
        }
    } elseif (is_singular('product')) {
        // Pages produits WooCommerce : index
        echo '<meta name="robots" content="index,follow">' . "\n";
    } elseif (is_singular()) {
        // Articles ou autres pages uniques
        echo '<meta name="robots" content="index,follow">' . "\n";
    }
}
add_action('wp_head', 'manage_robots_meta_tags');

				
			

4. Tester les balises robots

  1. Inspecte le code source :

    • Vérifiez que chaque page affiche la bonne balise <meta name="robots">.

  2. Utilisez l’outil de test Google Search Console :

    • Vérifiez si les directives sont bien appliquées et respectées.

5. Le fichier robots.txt

Le fichier robots.txt est un élément fondamental pour guider les robots des moteurs de recherche sur ce qu’ils peuvent ou ne peuvent pas explorer sur un site. Bien qu’il soit souvent configuré en parallèle des balises meta robots, il a un rôle complémentaire et non redondant.

Différences entre robots.txt et balises meta robots

Critèrerobots.txtMeta robots
ActionRestreint l’accès aux URL avant leur exploration.Contrôle l’indexation après que la page est explorée.
UtilisationEmpêche l’exploration de certaines parties du site.Gère l’indexation et le suivi des liens page par page.
Exemples d’utilisationBloquer les fichiers CSS/JS inutiles ou les pages admin.Empêcher l’indexation d’une page spécifique.

Fichier robots.txt virtuel de WordPress

Par défaut, WordPress génère un fichier virtuel que vous pouvez lire en tapant https://votre-site.com/robots.txt et qui contient ces instructions :

				
					User-agent: *
Disallow: /wp-content/uploads/wc-logs/
Disallow: /wp-content/uploads/woocommerce_transient_files/
Disallow: /wp-content/uploads/woocommerce_uploads/
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php

# START WPFORMS BLOCK
# ---------------------------
User-agent: *
Disallow: /wp-content/uploads/wpforms/
# ---------------------------
# END WPFORMS BLOCK

# XML Sitemap & Google News version 5.4.9 - https://status301.net/wordpress-plugins/xml-sitemap-feed/

Sitemap: https://votre-site.com/wp-sitemap.xml
				
			

Contenu typique d’un fichier robots.txt

Un fichier robots.txt doit être simple et clair. Voici un exemple de fichier optimisé pour un site WordPress :

Exemple de fichier robots.txt :

				
					# Empêcher les moteurs de recherche d'explorer les fichiers système
User-agent: *
Disallow: /wp-admin/
Disallow: /wp-includes/
Disallow: /wp-content/plugins/
Disallow: /wp-content/cache/
Disallow: /wp-json/
Disallow: /?s=

# Autoriser l'accès au fichier admin-ajax.php
Allow: /wp-admin/admin-ajax.php

# Empêcher les moteurs de recherche d'explorer les pages transactionnelles
Disallow: /cart/
Disallow: /checkout/
Disallow: /my-account/

# Indiquer l'emplacement du sitemap
Sitemap: https://example.com/sitemap.xml

				
			

Vous pouvez générer et enregistrer ce petit fichier robots.txt et le placer à la racine de votre site via le FTP

Le breadcrumb (miettes de pain)

Le rôle du breadcrumb est de :

  1. Améliorer la navigation utilisateur.
  2. Clarifier le contexte d’une page.
  3. Renforcer le SEO et les liens internes.
  4. Réduire le taux de rebond.
  5. Offrir une meilleure expérience sur des sites complexes.

Pas forcément utile si vous avez un site sans réelle hiérarchie, le “breadcrumb” est en revanche particulièrement intéressant si votre site comporte plusieurs catégories d’articles et de produits WooCommerce, des pages, bref un contenu riche. Si vous utilisez un constructeur de pages comme Elementor, le widget “Miettes de pain pour WooCommerce” existe. Par contre, pour toutes les autres pages, si vous avez fait le choix de ne pas utiliser Rank Math ou Yoast, voici une fonction qui génère un shortcode que vous placerez en tête des contenus sur lesquels vous souhaiter afficher le breadcrumb.

				
					function custom_breadcrumb_shortcode() {
    if (!is_front_page()) {//ne pas afficher sur page accueil
        $output = '<nav class="breadcrumb">';
        $output .= '<a href="' . home_url() . '">Accueil</a>';

        if (is_page()) {
            // Gestion des pages avec hiérarchie
            $ancestors = get_post_ancestors(get_the_ID());
            $ancestors = array_reverse($ancestors); // Remet dans l'ordre hiérarchique
            foreach ($ancestors as $ancestor) {
                $output .= ' &raquo; ';
                $output .= '<a href="' . get_permalink($ancestor) . '">' . get_the_title($ancestor) . '</a>';
            }
            $output .= ' &raquo; ';
            $output .= get_the_title();
        } elseif (is_single() && get_post_type() === 'post') {
            // Gestion des articles
            $categories = get_the_category();
            if (!empty($categories)) {
                // Affiche la première catégorie (ou adapte pour afficher toutes les catégories)
                $main_category = $categories[0];
                $output .= ' &raquo; ';
                $output .= '<a href="' . esc_url(get_category_link($main_category->term_id)) . '">' . esc_html($main_category->name) . '</a>';
            }
            $output .= ' &raquo; ';
            $output .= get_the_title();
        } elseif (is_category()) {
            // Gestion des catégories de blog
            $output .= ' &raquo; ';
            $output .= single_cat_title('', false);
        } elseif (is_archive()) {
            // Gestion des archives générales
            $output .= ' &raquo; ';
            $output .= post_type_archive_title('', false);
        } elseif (is_search()) {
            // Gestion des résultats de recherche
            $output .= ' &raquo; ';
            $output .= 'Recherche pour : "' . get_search_query() . '"';
        } elseif (is_404()) {
            // Gestion de la page 404
            $output .= ' &raquo; ';
            $output .= 'Erreur 404';
        }

        $output .= '</nav>';
        return $output;
    }
}
add_shortcode('custom_breadcrumb', 'custom_breadcrumb_shortcode');
				
			

Cette fonction insérée dans le fichier functions.php de votre thème enfant ou dans un plugin dédié, il vous suffit d’insérer le shortcode [custom_breacrumb] en haut des contenus pour afficher quelque chose du genre Accueil » Ma catégorie d’articles avec les liens vers les différents items contenus dans le chemin des “miettes de pain”.

Laisser un commentaire