has_archive WordPress : guide complet pour les archives de Custom Post Types
Sommaire de l'article
Introduction
Le paramètre has_archive dans WordPress est un argument clé de la fonction register_post_type. Il permet d’activer ou non une page d’archive pour un Custom Post Type (CPT), et d’en contrôler le comportement et l’URL. Comprendre précisément comment fonctionne has_archive est essentiel si vousêtes développeur, intégrateur ou rédacteur web, car ce réglage impacte directement la structure de votre site, sa navigation et son référencement naturel.
Dans cet article, vous allez découvrir en détail :
- ce qu’est exactement has_archive dans WordPress ;
- les différentes valeurs possibles (
false,true, string) et leurs effets ; - comment sont générées les URL d’archives de type de publication ;
- la relation entre has_archive, l’argument rewrite et les templates
archive-{post_type}.php; - l’impact de ces réglages sur l’UX et le SEO ;
- des bonnes pratiques et exemples concrets pour configurer correctement vos archives de Custom Post Types.
Concepts clés autour de has_archive
Avant d’entrer dans le détail, il est important de clarifier quelques notions fondamentales liées aux types de publication et aux archives dans WordPress.
Qu’est-ce qu’un type de publication et une archive dans WordPress ?
WordPress gère son contenu via des types de publication (post types). Les principaux sont :
- post : les articles de blog classiques ;
- page : les pages statiques comme “À propos”, “Contact” ;
- d’autres types natifs comme attachment, revision, etc. ;
- vos propres Custom Post Types créés via
register_post_type(par exempleportfolio,produit,évènement…).
Une page d’archive est une page générée automatiquement par WordPress qui liste l’ensemble des contenus d’un même type (ou d’une même taxonomie, catégorie, étiquette, etc.). Pour un Custom Post Type, cette page est appelée post type archive.
Qu’est-ce que has_archive ?
has_archive est un argument passé au moment de l’enregistrement d’un Custom Post Type via register_post_type( $post_type, $args ). Il détermine si ce type de contenu doit exposer une page d’archive accessible publiquement.
Contrairement à ce que pourrait laisser penser une première lecture, tous les types de publications natifs n’ont pas forcément d’archive :
- les articles (
post) disposent effectivement d’archives listant les billets, généralement accessibles via l’URL de la page de blog définie dans les réglages de lecture ; - les pages (
page) n’ont pas de page d’archive dédiée, car il s’agit de contenus hiérarchiques et statiques, pas d’une liste chronologique ; - pour un Custom Post Type, la valeur par défaut de
has_archiveest false : aucune archive n’est créée tant que vous ne l’activez pas explicitement.
En résumé, has_archive répond à la question : “Ce type de publication doit-il avoir une liste globale de tous seséléments, accessible via une URL d’archive dédiée ?”
Fonctionnement détaillé de has_archive
Les différentes valeurs possibles pour has_archive
L’argument has_archive peut prendre trois formes principales :
false(valeur par défaut) : aucune page d’archive n’est générée pour le type de publication. Les contenus individuels restent accessibles via leurs permaliens, mais il n’y a pas de page listant automatiquement tous leséléments de ce type.true: une page d’archive est générée avec un slug dérivé du type de publication (ou du rewrite slug s’il est défini). Cette page est accessible à une URL du typehttps://example.com/mon-cpt/.- chaîne de caractères (string) : vous pouvez définir un slug d’archive personnalisé, différent de celui des permaliens individuels. Dans ce cas,
has_archivereçoit une string, par exemple'has_archive' => 'liste-biens', et l’archive sera disponible àhttps://example.com/liste-biens/.
Interaction entre has_archive et rewrite
L’argument rewrite de register_post_type détermine principalement le slug utilisé dans les permaliens des contenus individuels et, dans certains cas, l’URL des archives. Les interactions les plus courantes sont les suivantes :
- si
rewriteest activé avec un'slug'donné ethas_archive => true, l’URL de l’archive utilise généralement ce slug. Par exemple :
donnera une archive à'rewrite' => array( 'slug' => 'proprietes' ), 'has_archive' => true/proprietes/pour le type de publication concerné. - si
has_archivereçoit une string, celle-ci est utilisée comme slug d’archive, indépendamment du slug utilisé pour les contenus individuels. Par exemple :
produira des permaliens individuels de la forme'rewrite' => array( 'slug' => 'propriete' ), 'has_archive' => 'biens-immobiliers'/propriete/villa-cote-basque/et une archive accessible à/biens-immobiliers/.
Cette distinction permet notamment d’optimiser à la fois :
- la lisibilité des permaliens individuels ;
- la pertinence SEO de la page d’archive, en lui donnant un slug spécifique et plus riche en mots-clés.
Exemples concrets d’URLs selon la configuration
Imaginons un Custom Post Type car :
- CPT “car”, aucun paramètre particulier
L’archive par défaut (si activée) utilisera le slug du CPT. Si vous définissez simplement :
vous obtiendrez une archive de type'public' => true, 'has_archive' => true/car/et des permaliens individuels du type/car/partner/. - CPT “car”,
has_archiveà une string
donnera :'has_archive' => 'archive-voitures', 'rewrite' => array( 'slug' => 'voiture' )- archive :
/archive-voitures/; - single :
/voiture/partner/.
- archive :
Templates utilisés pour les archives de Custom Post Types
Lorsque has_archive est activé pour un Custom Post Type, WordPress suit la hiérarchie de templates pour déterminer quel fichier PHP utiliser pour rendre la page d’archive. Le fichier prioritaire est :
archive-{post_type}.php(par exemplearchive-projet.php,archive-produit.php, etc.).
Si ce template spécifique n’existe pas, WordPress bascule sur archive.php, puis sur index.php. Créer un fichier archive-{post_type}.php vous permet donc de :
- contrôler la mise en page et la structure HTML de l’archive ;
- personnaliser la requête si nécessaire (ordre, filtrage…) ;
- ajouter un contenu introductif, un titre optimisé, des facettes de navigation, etc.
Création et configuration d’un Custom Post Type avec has_archive
Exemple basique d’enregistrement avec has_archive
Un exemple simple de Custom Post Type “projet” avec une archive activée pourrait ressembler à ceci :
function mon_theme_register_projet_cpt { $args = array( 'label' => 'Projets', 'public' => true, 'has_archive' => true, 'rewrite' => array( 'slug' => 'projets' ), 'supports' => array( 'title', 'editor', 'thumbnail' ), 'show_in_rest' => true, ); register_post_type( 'projet', $args );
}
add_action( 'init', 'mon_theme_register_projet_cpt' );
Dans cet exemple, l’archive sera accessible à l’URL /projets/, et les contenus individuels auront des URL du type /projets/nom-du-projet/.
Utiliser un slug d’archive différent du slug des singles
Pour répondre à des exigences de SEO ou de marketing, vous pouvez vouloir un slug différent entre les archives et les contenus individuels. Par exemple :
function mon_theme_register_projet_cpt { $args = array( 'label' => 'Projets', 'public' => true, 'has_archive' => 'tous-les-projets', 'rewrite' => array( 'slug' => 'projet' ), 'supports' => array( 'title', 'editor', 'thumbnail' ), 'show_in_rest' => true, ); register_post_type( 'projet', $args );
}
add_action( 'init', 'mon_theme_register_projet_cpt' );
Résultat :
- archive :
/tous-les-projets/; - single :
/projet/nom-du-projet/.
Ce type de configuration est très utile pour insérer des expressions clés dans l’URL d’archive sans altérer la clarté des permaliens individuels.
has_archive à false : quand et pourquoi ?
Mettre has_archive à false peutêtre pertinent si :
- votre Custom Post Type n’a pas vocation àêtre listé publiquement (par exemple un type purement interne ou technique) ;
- vous souhaitez gérer la liste de ces contenus via une page personnalisée et une requête spécifique (WP_Query) plutôt qu’une archive native ;
- vous utilisez un système de navigation très particulier qui rend inutile la page d’archive générique.
Dans ce cas, vous pouvez créer une page WordPress classique (par exemple “Nos projets”) et utiliser un template de page spécifique avec une requête personnalisée qui liste les contenus de votre CPT, tout en gardant le contrôle total sur l’URL et la structure de la page.
has_archive et navigation du site
Ajouter une archive de type de publication dans les menus
Une fois que has_archive est activé pour un Custom Post Type, WordPress permet d’ajouter facilement un lien vers cette archive dans les menus de navigation. Dans l’administration, sous Apparence > Menus, chaque Custom Post Type peut proposer un onglet permettant de sélectionner l’archive du type concerné. Vous pouvez ainsi :
- ajouter directement un lien vers la page d’archive de votre CPT ;
- positionner ce lien au bon endroit dans votre arborescence de menus ;
- assurer une navigation cohérente pour l’utilisateur vers la liste complète des contenus du type.
Compatibilité avec les marqueurs conditionnels
Avec has_archive activé, vous pouvez utiliser le marqueur conditionnel is_post_type_archive( 'mon_cpt' ) dans vos templates pour cibler uniquement l’archive d’un type précis. Cela permet par exemple :
- de modifier la requête principale sur l’archive d’un CPT (ordre, nombre d’éléments, filtres) ;
- d’ajouter des zones de contenu spécifiques (intro, bannières, filtres de recherche) sur l’archive de ce type uniquement ;
- de personnaliser le comportement du thème via
pre_get_postspour les archives d’un CPT donné.
Impact de has_archive sur le SEO
Pourquoi les archives sont importantes pour le référencement
Une page d’archive de Custom Post Type bien configurée joue plusieurs rôles SEO essentiels :
- structure du site : elle crée un point d’entrée thématique clair qui regroupe tous les contenus d’un même type ;
- maillage interne : chaqueélément de l’archive renvoie vers un contenu individuel, ce qui renforce la circulation du PageRank interne ;
- crawling et indexation : les robots des moteurs de recherche accèdent plus facilement et plus systématiquement à l’ensemble de vos contenus via cette page centrale ;
- ciblage sémantique : l’URL, le titre, la meta description et le contenu d’introduction de l’archive permettent de se positionner sur des requêtes de type “liste” ou “catégorie” (par exemple “projets web réalisés”, “voitures d’occasion”, etc.).
Optimiser le contenu des archives
Pour que vos archives soient utiles aux moteurs de recherche et aux utilisateurs, il est recommandé de :
- ajouter un titre clair et descriptif (balise
h1) adapté au type de contenus listés ; - prévoir un texte introductif au-dessus de la liste deséléments pour expliquer le type de contenus, le contexte, les benefits pour l’utilisateur ;
- structurer la page avec des sous-titres (
h2,h3) lorsque vous ajoutez des filtres, catégories ou sections particulières ; - éviter les contenus pauvres ou purement techniques : l’archive doit réellement apporter de la valeur (description, tri pertinent, pagination propre, filtres, etc.) ;
- limiter les doublons entre plusieurs archives ou listes qui serviraient la même intention de recherche ;
- gérer la pagination proprement (balises
rel="next"etrel="prev"éventuellement via votre thème ou un plugin).
Gestion des doublons et des archives peu utiles
Il arrive que les archives génèrent des problèmes de contenus dupliqués ou de pages peu qualitatives. Quelques cas typiques :
- un type de publication dispose d’une archive, mais vous avezégalement créé plusieurs pages manuelles qui listent ces mêmes contenus de façon très similaire ;
- l’archive est vide ou presque, avec très peu de contenus publiés ;
- le type de publication est purement technique ou interne, mais son archive reste accessible publiquement.
Dans ces situations, vous pouvez :
- passer has_archive à
falsesi l’archive n’a pas de raison d’exister pour le public ; - garder has_archive mais configurer la meta robots de l’archive (par exemple en
noindex, followvia un plugin SEO) si la page ne présente pas un intérêt de positionnement ; - fusionner ou réorganiser vos pages de listes pouréviter la multiplication de pages redondantes ciblant les mêmes requêtes.
Bonnes pratiques techniques autour de has_archive
Améliorer la structure technique des archives
Sur vos templates d’archives de Custom Post Types, veillez à respecter une structure HTML claire et cohérente :
- un unique
h1pour le titre principal de la page d’archive, par exemple “Nos projets” ou “Voitures d’occasion” ; - des
h2eth3pour structurer :- la zone de filtre ou de recherche interne ;
- les sections “Derniers ajouts”, “Meilleures ventes”, etc. ;
- éventuellement des blocs d’information complémentaire (FAQ, garanties, modalités, etc.).
- des balises sémantiques comme
,,,lorsque cela a du sens ; - une pagination propre avec des liens
clairs ; - des extraits ou résumés bien formatés pour chaqueélément listé (titre, image, court texte, lien).
Créer du contenu de qualité pour les archives
Une archive ne doit pasêtre une simple liste brute vide de contexte. Pour renforcer sa valeur :
- rédigez un chapô (paragraphe introductif) expliquant ce que l’utilisateur trouvera sur cette page et comment utiliser les filtres ou catégories ;
- mettez en avant leséléments clés (par exemple les contenus les plus consultés, les nouveautés, les offres spéciales) ;
- soignez les extraits des contenus individuels (titre explicite, description utile, visuel de qualité) ;
- ajoutez, si nécessaire, un bloc de FAQ succinct ou deséléments pédagogiques connexes ;
- veillez à ce que le temps de chargement reste performant même avec une liste relativement longue (pagination, chargement différé des images, etc.).
Utiliser des outils d’analyse pour suivre la performance des archives
Pourévaluer et améliorer l’efficacité de vos archives de Custom Post Types, exploitez des outils d’analyse et d’audit :
- Google Search Console pour :
- suivre les impressions et clics générés par les URL d’archives ;
- identifier les requêtes qui amènent les visiteurs sur ces pages ;
- détecter d’éventuels problèmes d’indexation ou de couverture.
- Google Analytics (ouéquivalent) pour :
- analyser le comportement des utilisateurs sur les archives (taux de rebond, pages vues après l’archive, conversionséventuelles) ;
- comparer les performances entre différentes archives ou listes.
- des plugins SEO comme Yoast SEO ou All in One SEO pour :
- gérer automatiquement les balises title et meta description des pages d’archives ;
- définir des règles spécifiques d’indexation pour certains types d’archives ;
- ajuster les fils d’Ariane (breadcrumbs) liés aux Custom Post Types.
- des outils d’audit technique comme Screaming Frog SEO Spider, Deepcrawl ou des solutions similaires pour :
- vérifier que les archives répondent correctement (codes HTTP, redirections) ;
- détecter d’éventuels contenus dupliqués ou pages orphelines ;
- analyser la profondeur des clics menant aux contenus individuels depuis l’archive.
- des outils d’analyse de mots-clés comme Ahrefs, Moz, SEMrush ou Ubersuggest pour :
- identifier les requêtes pertinentes liées au thème de votre archive ;
- optimiser le titre, l’URL et le contenu d’introduction en fonction de ces expressions.
Cas particuliers et bonnes pratiques avancées
Bypasser l’archive native tout en conservant les permaliens
Dans certains projets, vous pouvez souhaiter :
- garder des permaliens individuels pour vos Custom Post Types ;
- mais ne pas utiliser la page d’archive native générée par WordPress ;
- et la remplacer par une page personnalisée (avec un modèle dédié) qui jouera le rôle de “fausse archive”.
Une approche consiste à :
- passer has_archive à
falsepour le CPT concerné ; - créer une page WordPress (“Nos projets”, par exemple) avec un template personnalisé ;
- dans ce template, exécuter une requête WP_Query pour lister leséléments du CPT ;
- configureréventuellement les règles de réécriture pour que les permaliens individuels ressemblent à des “enfants” de cette page (par exemple
/nos-projets/nom-du-projet/), tout en gardant le contrôle sur la “fausse archive”.
Cette stratégie donne plus de liberté sur la structure et la hiérarchie apparente, tout en conservant un fonctionnement interne cohérent côté WordPress.
Interaction avec les taxonomies personnalisées
Lorsque vous associez des taxonomies personnalisées (par exemple “type de projet”, “marque”, “ville”) à un Custom Post Type ayant has_archive activé, vous pouvez jouer à plusieurs niveaux :
- une archive globale du type de publication (ex.
/projets/) ; - des archives par taxonomie (ex.
/type-projet/site-vitrine/,/ville/paris/) ; - des filtres combinés mis en place via des requêtes personnalisées ou des plugins de filtrage.
Il est conseillé de réfléchir à la cohérence globale entre ces différents niveaux d’archives pouréviter la redondance (par exemple une archive globale et une archive de taxonomie quasi identique) et pour guider l’utilisateur vers les pages vraiment utiles plutôt que de multiplier les entrées concurrentes dans les résultats de recherche.
has_archive et hiérarchie de templates
Pour garder un contrôle fin sur l’affichage, pensez à :
- créer un template
archive-{post_type}.phppour chaque CPT important ; - utiliser des partials ou des
get_template_partpour factoriser la logique d’affichage (cartes, extraits, etc.) ; - envisager des variations de mise en page selon la pagination (par exemple un bloc d’intro uniquement sur la page 1 de l’archive) ;
- gérer les cas où l’archive ne contient encore aucun contenu (affichage d’un message clair, proposition d’autres contenus pertinents, etc.).
Conclusion pratique
Le paramètre has_archive de WordPress est bien plus qu’un simple booléen. Utilisé correctement, il vous permet de :
- donner une véritable page d’atterrissage thématique à vos Custom Post Types ;
- contrôler précisément les URLs d’archives et leur cohérence avec votre stratégieéditoriale ;
- améliorer la navigation et le maillage interne de votre site ;
- renforcer la pertinence SEO de vos listes de contenus en les pensant comme des pages à part entière.
En combinant intelligemment has_archive, l’argument rewrite, la hiérarchie de templates et une rédaction soignée du contenu d’archive, vous transformez de simples listes automatiques en véritables pages de destination, utiles pour vos visiteurs comme pour les moteurs de recherche.
Articles similaires
Besoin d'aide avec votre SEO ?
Notreéquipe d'experts peut vous aider à optimiser votre site e-commerce