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.
- Créer une clé API dédiée avec le scope
analyticsuniquement, jamais la clé d’administration complète. - Appeler l’endpoint
GET /2/clicks/positionsavec l’indexet une fenêtre de sept jours glissants. - Associer chaque
objectIDretourné à l’ID d’article WordPress correspondant, généralement identique si l’indexation utilise l’ID natif. - 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.

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.