vendredi 25 septembre 2026

À propos

Contact

Tips

Ajouter les balises Open Graph à WordPress sans extension SEO

Générez og:title, og:image et twitter:card depuis les données existantes de l'article, avec des valeurs de repli, sans installer d'extension SEO complète.

Par Clément Hadrot • 17 décembre 2025 • 4 min de lecture • Aucun commentaire
Ajouter les balises Open Graph à WordPress sans extension SEO

Un client partageait ses articles sur les réseaux sociaux et voyait systématiquement apparaître une image générique du thème, ou pire, aucune image du tout, à la place de la photo qu’il avait pourtant mise en avant sur chaque article. Le site n’avait aucune extension SEO installée, choix assumé pour limiter le nombre de dépendances, mais cette absence privait le contenu de balises Open Graph correctement renseignées.

Plutôt que d’installer une extension SEO complète pour ce seul besoin, quelques lignes dans le thème suffisent à générer ces balises à partir des données déjà présentes sur chaque article.

Générer les balises dans le head

Le hook wp_head permet d’injecter ces balises meta, en les limitant aux pages singulières pour ne pas polluer les pages d’archive ou la page d’accueil avec des données incohérentes :

add_action( 'wp_head', function () {
    if ( ! is_singular() ) {
        return;
    }

    $post = get_queried_object();
    $titre = wp_strip_all_tags( get_the_title( $post ) );
    $description = get_the_excerpt( $post ) ?: wp_trim_words( wp_strip_all_tags( $post->post_content ), 30 );
    $url = get_permalink( $post );

    printf( '<meta property="og:type" content="article" />' . "\n" );
    printf( '<meta property="og:title" content="%s" />' . "\n", esc_attr( $titre ) );
    printf( '<meta property="og:description" content="%s" />' . "\n", esc_attr( $description ) );
    printf( '<meta property="og:url" content="%s" />' . "\n", esc_url( $url ) );
} );

Gérer l’image, avec repli

La priorité va à l’image mise en avant de l’article. En son absence, un repli vers une image par défaut du thème évite l’affichage d’une carte vide sur les réseaux sociaux :

L'essentiel à retenir : Trois balises suffisent pour un partage social propre ; Valeurs de repli si l'article n'a pas d'image mise en avant ; Aucune extension SEO nécessaire pour ce seul besoin
add_action( 'wp_head', function () {
    if ( ! is_singular() ) {
        return;
    }

    $post = get_queried_object();
    $image_id = get_post_thumbnail_id( $post );

    if ( $image_id ) {
        $image = wp_get_attachment_image_src( $image_id, 'large' );
    } else {
        $image = [ get_template_directory_uri() . '/assets/images/partage-defaut.jpg' ];
    }

    if ( ! empty( $image[0] ) ) {
        printf( '<meta property="og:image" content="%s" />' . "\n", esc_url( $image[0] ) );
        printf( '<meta property="twitter:card" content="summary_large_image" />' . "\n" );
    }
} );

Éviter les doublons avec une extension SEO existante

Sur un projet où une extension SEO (Yoast, Rank Math ou autre) est déjà active, ces balises sont probablement déjà générées ailleurs. Injecter ce code sans vérification produirait des balises Open Graph en double, ce que les réseaux sociaux gèrent mal, en prenant parfois la première occurrence, parfois la dernière, de façon peu prévisible.

add_action( 'wp_head', function () {
    if ( defined( 'WPSEO_VERSION' ) || class_exists( 'RankMath' ) ) {
        return; // Une extension SEO gère déjà ces balises
    }

    // ... génération des balises
} );

Tester le résultat

  • L’outil de débogage de partage de Facebook (« Sharing Debugger ») permet de visualiser les balises lues et de forcer un nouveau scan après correction.
  • Un simple curl -s https://exemple.fr/mon-article/ | grep "og:" en ligne de commande vérifie rapidement la présence des balises sans dépendre d’un outil tiers.
  • Vérifier que les guillemets et caractères spéciaux du titre sont bien échappés avec esc_attr(), sous peine de casser la balise HTML générée.

Étendre aux pages d’archive si nécessaire

Pour un site où les pages de catégorie sont aussi partagées régulièrement, le même principe s’applique en testant is_category() ou is_tax() plutôt que is_singular(), avec un titre et une description tirés de la description de la taxonomie :

if ( is_category() ) {
    $terme = get_queried_object();
    $titre = $terme->name;
    $description = wp_strip_all_tags( $terme->description ) ?: get_bloginfo( 'description' );
}

Trois balises bien renseignées, og:title, og:description et og:image, couvrent l’essentiel des besoins de partage social pour un blog qui n’a pas vocation à faire du SEO technique poussé.

Ce que cette approche ne couvre pas

Ce code ne génère ni sitemap XML, ni balises canoniques, ni données structurées Schema.org : ces besoins relèvent d’un travail SEO plus large, pour lequel une extension dédiée reste souvent plus adaptée qu’un développement maison au fil des demandes.

En résumé

Pour le seul besoin d’un partage social propre sur les réseaux, une vingtaine de lignes de PHP dans le thème suffisent, sans dépendance supplémentaire ni risque de conflit avec une extension SEO existante, à condition de vérifier son absence au préalable.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi