Publié le 27 février 2026 SEO Technique

has_archive WordPress : guide complet pour les archives de Custom Post Types

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 exemple portfolio, 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_archive est 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 type https://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_archive reç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 rewrite est activé avec un 'slug' donné et has_archive => true, l’URL de l’archive utilise généralement ce slug. Par exemple :
    'rewrite' => array( 'slug' => 'proprietes' ),
    'has_archive' => true 
    donnera une archive à /proprietes/ pour le type de publication concerné.
  • si has_archive reçoit une string, celle-ci est utilisée comme slug d’archive, indépendamment du slug utilisé pour les contenus individuels. Par exemple :
    'rewrite' => array( 'slug' => 'propriete' ),
    'has_archive' => 'biens-immobiliers' 
    produira des permaliens individuels de la forme /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 :
    'public' => true,
    'has_archive' => true 
    vous obtiendrez une archive de type /car/ et des permaliens individuels du type /car/partner/.
  • CPT “car”, has_archive à une string
    'has_archive' => 'archive-voitures',
    'rewrite' => array( 'slug' => 'voiture' ) 
    donnera :
    • archive : /archive-voitures/ ;
    • single : /voiture/partner/.

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 exemple archive-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_posts pour 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" et rel="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 à false si 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, follow via 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 h1 pour le titre principal de la page d’archive, par exemple “Nos projets” ou “Voitures d’occasion” ;
  • des h2 et h3 pour 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
    ,
    ,
  • une pagination propre avec des liens
  • 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 à false pour 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}.php pour chaque CPT important ;
  • utiliser des partials ou des get_template_part pour 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.

Besoin d'aide avec votre SEO ?

Notreéquipe d'experts peut vous aider à optimiser votre site e-commerce

Commentaires

Laisser un commentaire

Votre commentaire sera soumis à modération avant publication.