# Retirer /category/ des URL WordPress sans casser le référencement

> exemple.fr/category/actualites/ plutôt que exemple.fr/actualites/ : un segment que beaucoup de clients trouvent inutile. Voici comment le retirer proprement.

- Auteur : Clément Hadrot
- Publié le : 2021-09-22
- Mis à jour le : 2021-09-22
- Catégorie : Tips
- URL : https://wpmoderne.dev.wordpress-developpement.fr/tips/retirer-base-categorie-sans-casser-seo/

## L’essentiel

- Le filtre category_rewrite_rules réécrit les règles internes
- Un flush des permaliens est indispensable après
- Les anciennes URL doivent rediriger en 301

« Pourquoi mes URL de catégories contiennent-elles `/category/` alors que mes articles n'ont pas de préfixe ? » C'est une question qui revient sur presque tous les projets éditoriaux. La réponse est simple — c'est le comportement par défaut de WordPress — mais la retirer proprement, sans casser les URL déjà indexées, demande un peu plus de rigueur qu'un simple champ vide dans les réglages.

Cet article couvre uniquement le retrait du segment `/category/` et la gestion des redirections associées ; il ne détaille pas le fonctionnement complet de la Rewrite API, qui mériterait un article à part entière.

## Vider la base de catégorie dans les réglages

Depuis Réglages > Permaliens, un champ « Base de catégorie » permet de remplacer `category` par un autre mot, mais pas de le laisser réellement vide via l'interface standard sans intervention supplémentaire — un champ vide est souvent réinitialisé à la valeur par défaut selon la version. La méthode fiable passe par du code, en reconstruisant soi-même les règles de réécriture.

## Réécrire les règles avec category_rewrite_rules

Le filtre `category_rewrite_rules` permet de remplacer entièrement le jeu de règles générées pour les catégories, en retirant le segment `category/` de chaque expression régulière.

> L'essentiel à retenir : Le filtre category_rewrite_rules réécrit les règles internes ; Un flush des permaliens est indispensable après ; Les anciennes URL doivent rediriger en 301

```
function projet_retirer_base_categorie( $rules ) {
    $nouvelles_regles = array();
    $categories = get_categories( array( 'hide_empty' => false ) );

    foreach ( $categories as $categorie ) {
        $slug = $categorie->slug;
        $nouvelles_regles[ $slug . '/?$' ] =
            'index.php?category_name=' . $slug;
        $nouvelles_regles[ $slug . '/page/([0-9]{1,})/?$' ] =
            'index.php?category_name=' . $slug . '&paged=$matches[1]';
    }

    return $nouvelles_regles + $rules;
}
add_filter( 'category_rewrite_rules', 'projet_retirer_base_categorie' );
```

L'ordre compte : les nouvelles règles doivent être placées avant les règles existantes (`$nouvelles_regles + $rules`) pour être évaluées en priorité, sans quoi une règle générique pourrait intercepter la requête avant d'atteindre la bonne.

## Vider le cache des permaliens

Modifier des règles de réécriture par filtre ne suffit pas : WordPress met en cache l'ensemble des règles compilées dans une option nommée `rewrite_rules`. Il faut la vider pour que les nouvelles règles prennent effet.

```
wp rewrite flush
```

En ligne de commande WP-CLI, cette commande régénère immédiatement le cache. Côté code, l'équivalent est `flush_rewrite_rules()`, à n'appeler qu'une seule fois (par exemple à l'activation d'un plugin ou dans une routine de mise à jour), jamais à chaque chargement de page — cette opération est coûteuse et dégraderait sensiblement les performances si elle s'exécutait en continu.

## Gérer les conflits avec des pages du même nom

Retirer le segment `/category/` expose à un risque concret : si une catégorie et une page portent le même slug (par exemple une catégorie `actualites` et une page `actualites`), WordPress ne peut plus les distinguer une fois le préfixe supprimé. Il faut vérifier cette collision avant de déployer le changement, en croisant la liste des slugs de catégories avec celle des pages existantes.

## Rediriger les anciennes URL indexées en 301

Le plus important, souvent négligé, concerne le référencement déjà acquis. Toutes les anciennes URL en `/category/slug/` ont pu être indexées et reçoivent parfois des liens externes. Il faut les rediriger en 301 vers la nouvelle URL, jamais les laisser retourner une 404.

```
function projet_rediriger_anciennes_urls_categorie() {
    if ( ! preg_match( '#^/category/([^/]+)/?$#', $_SERVER['REQUEST_URI'], $matches ) ) {
        return;
    }
    $categorie = get_category_by_slug( $matches[1] );
    if ( $categorie ) {
        wp_safe_redirect( get_category_link( $categorie ), 301 );
        exit;
    }
}
add_action( 'template_redirect', 'projet_rediriger_anciennes_urls_categorie' );
```

## Vérifier après déploiement

- Contrôler que `exemple.fr/actualites/` affiche bien l'archive de catégorie.
- Contrôler que `exemple.fr/category/actualites/` redirige en 301 vers la nouvelle URL.
- Vérifier dans la Search Console que les anciennes URL passent progressivement au statut « Page avec redirection ».

> Sur un site avec un fort historique de backlinks vers d'anciennes URL en `/category/`, je conserve toujours les redirections en place indéfiniment : le coût d'une règle de réécriture supplémentaire est nul face au risque de perdre du trafic acquis depuis des années.

## En résumé

Retirer `/category/` des URL WordPress demande trois étapes indissociables : réécrire les règles via `category_rewrite_rules`, vider le cache de permaliens, puis rediriger systématiquement les anciennes URL en 301. Sauter la dernière étape est l'erreur la plus coûteuse : elle transforme un simple raccourcissement d'URL en perte de référencement.
