Le WordPress d'aujourd'hui, décodé pour les développeurs

Astuces

Une colonne « dernière visite Algolia » pour repérer les contenus délaissés

Croisez les logs de recherche Algolia avec la liste des articles WordPress pour voir, en un coup d'œil, ce que personne ne consulte jamais.

Par WordPress Développement • 28 juillet 2023 • 5 min de lecture • Aucun commentaire
Une colonne « dernière visite Algolia » pour repérer les contenus délaissés

Combien de vos articles les mieux référencés ne sont, en réalité, jamais ouverts depuis la recherche interne ? La question paraît anecdotique tant qu’on n’a pas les chiffres sous les yeux. Sur un corpus de test de plus de deux mille contenus, l’export des logs Algolia a montré que près de quatre articles sur dix n’avaient enregistré aucun clic sur une fiche de résultat en six mois, alors même qu’ils apparaissaient régulièrement dans les suggestions.

Ce tutoriel ne traite pas de la configuration de l’indexation Algolia elle-même — l’extension côté site fait déjà ce travail. L’objectif ici est de récupérer les statistiques de clics déjà collectées et de les afficher directement dans la liste des articles de l’administration, sous forme d’une colonne « dernière visite Algolia » triable, pour que la personne en charge de la ligne éditoriale n’ait pas à ouvrir un tableau de bord tiers pour savoir quoi retravailler en priorité.

Étape 1 : récupérer les événements de clic depuis l’API Algolia

Algolia expose une API Analytics distincte de l’API de recherche. Elle permet de récupérer, par index, les événements click associés à chaque objectID sur une période donnée. Un script planifié interroge cette API une fois par jour et stocke le résultat.

  1. Créer une clé API dédiée avec le scope analytics uniquement, jamais la clé d’administration complète.
  2. Appeler l’endpoint GET /2/clicks/positions avec l’index et une fenêtre de sept jours glissants.
  3. Associer chaque objectID retourné à l’ID d’article WordPress correspondant, généralement identique si l’indexation utilise l’ID natif.
  4. Stocker la date du dernier clic dans une meta d’article, par exemple _algolia_last_click.

Étape 2 : programmer la synchronisation quotidienne

Un événement WP-Cron personnalisé déclenche l’appel à l’API et la mise à jour des metas. Il faut prévoir un traitement par lots pour éviter un dépassement de temps d’exécution sur les sites à fort volume.

L'essentiel à retenir : Exporter les clics Algolia par objectID ; Ajouter une colonne triable dans la liste des articles ; Trier pour prioriser la refonte éditoriale
add_action( 'wpmoderne_sync_algolia_clicks', function () {
    $response = wp_remote_get(
        'https://analytics.algolia.com/2/clicks/positions?index=' . rawurlencode( ALGOLIA_INDEX_NAME ),
        array(
            'headers' => array(
                'X-Algolia-API-Key'        => ALGOLIA_ANALYTICS_KEY,
                'X-Algolia-Application-Id' => ALGOLIA_APP_ID,
            ),
        )
    );

    if ( is_wp_error( $response ) ) {
        return;
    }

    $body = json_decode( wp_remote_retrieve_body( $response ), true );

    foreach ( $body['positions'] ?? array() as $entry ) {
        $post_id = absint( $entry['objectID'] );
        if ( $post_id && ! empty( $entry['clickCount'] ) ) {
            update_post_meta( $post_id, '_algolia_last_click', current_time( 'mysql' ) );
        }
    }
} );

if ( ! wp_next_scheduled( 'wpmoderne_sync_algolia_clicks' ) ) {
    wp_schedule_event( time(), 'daily', 'wpmoderne_sync_algolia_clicks' );
}

Étape 3 : ajouter la colonne dans la liste des articles

WordPress permet d’ajouter des colonnes personnalisées et triables via les filtres manage_{post_type}_posts_columns et manage_{post_type}_posts_custom_column, associés à manage_edit-{post_type}_sortable_columns pour le tri.

add_filter( 'manage_post_posts_columns', function ( $columns ) {
    $columns['algolia_last_click'] = __( 'Dernière visite Algolia', 'wpmoderne' );
    return $columns;
} );

add_action( 'manage_post_posts_custom_column', function ( $column, $post_id ) {
    if ( 'algolia_last_click' === $column ) {
        $date = get_post_meta( $post_id, '_algolia_last_click', true );
        echo $date ? esc_html( mysql2date( 'd/m/Y', $date ) ) : '' . esc_html__( 'Jamais', 'wpmoderne' ) . '';
    }
}, 10, 2 );

add_filter( 'manage_edit-post_sortable_columns', function ( $columns ) {
    $columns['algolia_last_click'] = 'algolia_last_click';
    return $columns;
} );

Étape 4 : brancher le tri sur la requête

Pour que le clic sur l’en-tête de colonne trie réellement les articles, il faut intercepter la requête principale de l’écran d’administration via pre_get_posts et ajouter un meta_key orderby correspondant.

add_action( 'pre_get_posts', function ( $query ) {
    if ( ! is_admin() || ! $query->is_main_query() ) {
        return;
    }

    if ( 'algolia_last_click' === $query->get( 'orderby' ) ) {
        $query->set( 'meta_key', '_algolia_last_click' );
        $query->set( 'orderby', 'meta_value' );
    }
} );

Étape 5 : lire la colonne comme un tableau de bord éditorial

Une fois la colonne en place, trier par ordre croissant fait remonter en tête les articles jamais visités ou visités il y a longtemps. C’est une liste de priorité concrète pour le rédacteur en chef : réécrire le titre, revoir les mots-clés d’indexation, ou parfois simplement dépublier un contenu obsolète.

  • Croiser cette colonne avec la date de publication permet de distinguer un contenu récent qui n’a pas encore eu le temps d’être vu d’un contenu ancien réellement délaissé.
  • Un filtre par taxonomie affiné révèle souvent qu’une catégorie entière souffre d’un problème de titre ou de mots-clés, pas d’un problème de qualité.
  • La colonne reste un indicateur relatif : elle ne remplace pas une analyse de trafic global, elle isole spécifiquement l’usage de la recherche interne.

Une colonne qui ne sert à rien pour la décision du jour ne mérite pas sa place dans la liste des articles : celle-ci doit rester exploitable en un tri, pas en un export.

En résumé

Cette colonne ne demande ni nouvelle extension ni tableau de bord supplémentaire : elle réutilise des données déjà collectées par Algolia et les rend actionnables là où l’équipe éditoriale travaille déjà, dans la liste des articles. Le seul coût réel est la synchronisation quotidienne, largement compensée par le temps gagné à ne plus ouvrir un dashboard externe pour prioriser les réécritures.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

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

Voir tous ses articles

Dans la même veine

À lire aussi