Accueil » Geek » Open Source » Comment personnaliser les sitemaps de Yoast SEO dans WordPress

Comment personnaliser les sitemaps de Yoast SEO dans WordPress

Enlever les liens et le branding de YOAST SEO dans ton sitemap.xml

Si vous utilisez WordPress et sa très populaire extension Yoast SEO pour optimiser vos résultats dans les moteurs de recherche, vous êtes probablement confronté à ce problème : ton sitemap.xml fait des liens vers deux autres sites. Il est aussi en anglais et ne parle aucunement de ton propre site.

Techniquement, ce n’est pas un problème catastrophique puisque c’est une page destinée à guider les moteurs de recherche et vos visiteurs ne la verront que s’ils cherchent explicitement pour.

C’est quelque chose qui m’a achalé pendant longtemps et que j’ai balayé sous le tapis. Jusqu’à ce beau dimanche après-midi de Pâques où j’ai décidé de régler moi-même après deux-trois bières, pendant que les enfants font la sieste.

Je vous donne le code, parce que c’est quand même obscur comme tweak.

Vous pouvez télécharger ma petite extension.

Ma licence est : fais ce que tu veux avec.

Si tu ne veux pas télécharger l’extension, tu peux copier-coller le code dans ton fichier functions.php et le modifier facilement.

// Modifier l'URL du fichier XSL utilisé par Yoast SEO pour pointer vers notre XSL personnalisé.
function pq_modifier_wpseo_stylesheet_url($s)
{
    // Remplacer le chemin vers le XSL par défaut par un chemin virtuel /pq-sitemap.xsl
    // Assurez-vous que ce chemin est intercepté pour servir le XSL personnalisé.
    return str_replace('/wp-content/plugins/wordpress-seo/css/main-sitemap.xsl', '/pq-sitemap.xsl', $s);
}
add_filter('wpseo_stylesheet_url', 'pq_modifier_wpseo_stylesheet_url');


// Enregistrer le XSL personnalisé pour être servi dynamiquement.
function pq_enregistrer_xsl_personnalise()
{
    global $wpseo_sitemaps;
    if (class_exists('WPSEO_Sitemaps') && isset($wpseo_sitemaps) && $wpseo_sitemaps instanceof WPSEO_Sitemaps) {
        $wpseo_sitemaps->register_xsl('pq', 'pq_sitemap_xsl');
    }
}
add_action('init', 'pq_enregistrer_xsl_personnalise', 11);


// Générer un nouveau fichier XSL
function pq_sitemap_xsl()
{
    status_header(200); // Définissez le statut HTTP à 200 OK ici.
    // Envoyer les entêtes appropriées pour le contenu XSL.
    header('Content-Type: text/xsl; charset=utf-8');
    header('X-Robots-Tag: noindex, follow', true);

    $blog_name = get_bloginfo('name');
    $blog_url = get_bloginfo('url');

    $propulse_par = apply_filters('pq_wpseo_modifier_lien_footer', 'Propulsé par <a href="https://quebecblogue.com/" target="_blank" rel="noopener">Le Blogue du Québec</a>.');


    echo <<<XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
                xmlns:html="http://www.w3.org/TR/REC-html40"
                xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"
                xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <title>Carte du site XML {$blog_name} [Sitemap]</title>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <style type="text/css">
                body {
                    font-family: Helvetica, Arial, sans-serif;
                    font-size: 13px;
                    color: #545353;
                    background-color: #ffffff;
                    margin: 0;
                    padding: 20px;
                }
                a {
                    color: #0000ff;
                    text-decoration: none;
                }
                a:hover {
                    text-decoration: underline;
                }
                table {
                    border-collapse: collapse;
                    width: 100%;
                    margin-top: 20px;
                }
                th, td {
                    text-align: left;
                    padding: 8px;
                    font-size: 13px;
                }
                th {
                    background-color: #f2f2f2;
                }
                tr:nth-child(even) {
                    background-color: #f9f9f9;
                }
                .footer {
                    text-align: center;
                    margin-top: 40px;
                    padding: 20px 0;
                    background-color: #f5f5f5;
                    color: #333;
                    border-top: 1px solid #ddd;
                    font-size: 0.9em;
                }
            </style>
        </head>
        <body>
            <div id="content">
                <h1>Carte du site XML - {$blog_name} [Sitemap]</h1>
                <p class="expl">
                    Voici la carte de notre site, <a href="{$blog_url}" target="_blank" rel="noopener">{$blog_name}</a>, sous forme de fichier XML.<br />
                    Ce fichier sitemap XML respecte le <em>protocole Sitemap</em> et il est destiné à fournir une liste d'URLs pour nourrir les moteurs de recherche.<br/>
                </p>
                <xsl:if test="count(sitemap:sitemapindex/sitemap:sitemap) &gt; 0">
                    <p class="expl">
                        Ce sitemap XML référence <xsl:value-of select="count(sitemap:sitemapindex/sitemap:sitemap)"/> sitemaps distincts.
                    </p>
                    <table id="sitemap" cellpadding="3">
                        <thead>
                            <tr>
                                <th width="75%">Sitemap</th>
                                <th width="25%">Dernière modification</th>
                            </tr>
                        </thead>
                        <tbody>
                            <xsl:for-each select="sitemap:sitemapindex/sitemap:sitemap">
                                <tr>
                                    <td>
                                        <a href="{sitemap:loc}">
                                            <xsl:value-of select="sitemap:loc"/>
                                        </a>
                                    </td>
                                    <td>
                                        <xsl:value-of select="sitemap:lastmod"/>
                                    </td>
                                </tr>
                            </xsl:for-each>
                        </tbody>
                    </table>
                </xsl:if>
                <xsl:if test="count(sitemap:urlset/sitemap:url) &gt; 0">
                    <p class="expl">
                        Ce sitemap XML contient <xsl:value-of select="count(sitemap:urlset/sitemap:url)"/> URLs.
                    </p>
                    <table id="sitemap" cellpadding="3">
                        <thead>
                            <tr>
                                <th width="80%">URL</th>
                                <th width="5%">Images</th>
                                <th width="15%">Dernière modification</th>
                            </tr>
                        </thead>
                        <tbody>
                            <xsl:for-each select="sitemap:urlset/sitemap:url">
                                <tr>
                                    <td>
                                        <a href="{sitemap:loc}">
                                            <xsl:value-of select="sitemap:loc"/>
                                        </a>
                                    </td>
                                    <td>
                                        <xsl:value-of select="count(image:image)"/>
                                    </td>
                                    <td>
                                        <xsl:value-of select="sitemap:lastmod"/>
                                    </td>
                                </tr>
                            </xsl:for-each>
                        </tbody>
                    </table>
                </xsl:if>
                <div class="footer">
                    <small>{$propulse_par}</small>
                </div>
            </div>
        </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
XSL;
}

Voici le résultat final…. vous pouvez le personnaliser facilement.

Pour modifier notre petit footer.

// Vous pouvez enlever le lien vers quebecblogue.com aussi en deux secondes avec ce filtre à mettre dans votre fichier functions.php
add_filter('pq_wpseo_modifier_lien_footer', function($content) {
    // Ici, vous pouvez modifier $content si nécessaire
    $content = "Propulsé par ma firme (c) Les Petits Amis";
    return $content; 
});

Merci ! S’il y a des questions, je vais être dans les commentaires.



J'étais tanné que YOAST SEO mette ses liens dans mes fichiers sitemap. J'ai codé une solution et je vous donne le code.
Partager cette trouvaille!Partager!Envoyer par courrielEnvoyer!
Moyenne de 5 sur 2 votes

Photo de profil de Matt

Matt

Père, pédagogue, historien, programmeur, marketeur, tantôt de gauche, tantôt de droite, maladroit et baveux. En quête d’indépendance alimentaire, financière et politique. Mathieu est le fondateur du Blogue du Québec et il blogue également à propos de ses passions sur Le Chef Cuisto et Les Meilleurs Trucs

On veut votre avis sur ce contenu québécois