🔍 SEOAvancé PS 1.7 PS 8.x

URLs simplifiées en hébreu sur PrestaShop : diagnostic et solutions

Résolvez les problèmes d'URLs simplifiées en hébreu sur PrestaShop. Guide complet pour gérer les caractères non-latins dans les friendly URLs.

En bref : PrestaShop supprime les caractères hébraïques lors de la génération d'URLs simplifiées car str2url() ne gère que la translittération latine. La solution combine l'activation de PS_ALLOW_ACCENTED_CHARS_URL et un override de Tools::str2url() pour préserver les caractères Unicode non-latins.

Publié le 21 mars 2026 6 min de lecture Alexandre Carette

Le problème des URLs simplifiées en caractères non-latins

PrestaShop génère automatiquement des URLs simplifiées (friendly URLs) à partir du nom du produit, de la catégorie ou de la page CMS. Ce mécanisme fonctionne parfaitement avec les alphabets latins, mais pose de sérieux problèmes dès qu'on travaille avec des écritures non-latines comme l'hébreu, l'arabe, le chinois, le japonais ou le cyrillique.

Le symptôme est clair : lorsqu'on crée un produit dont le nom est en hébreu (ou dans un autre alphabet non-latin), le champ « URL simplifiée » reste vide ou génère une chaîne incohérente. Impossible d'enregistrer une URL propre sans intervention manuelle.

Pourquoi PrestaShop rejette les caractères hébraïques

Le validateur `isLinkRewrite`

Le cœur du problème se situe dans la classe Validate de PrestaShop. La méthode isLinkRewrite() utilise une expression régulière qui n'autorise que les caractères ASCII de base :


// classes/Validate.php (PrestaShop 1.7.x)
public static function isLinkRewrite($link)
{
    if (Configuration::get('PS_ALLOW_ACCENTED_CHARS_URL')) {
        return preg_match(Tools::cleanNonUnicodeSupport('/^[_a-zA-Z0-9\pL\pS-]+$/u'), $link);
    }

    return preg_match('/^[_a-zA-Z0-9\-]+$/', $link);
}

Quand l'option PS_ALLOW_ACCENTED_CHARS_URL est désactivée (valeur par défaut), seuls les caractères a-z, A-Z, 0-9, - et _ sont acceptés. Les caractères hébraïques (Unicode range \u0590-\u05FF) sont donc systématiquement rejetés.

La méthode `str2url` : le filtre en amont

Avant même que le validateur n'intervienne, la méthode Tools::str2url() tente de translittérer les caractères spéciaux vers leur équivalent ASCII. Or, cette table de correspondance ne couvre que les caractères latins accentués (é → e, ü → u, etc.). Les caractères hébraïques n'ayant aucun équivalent ASCII, ils sont purement et simplement supprimés :


// classes/Tools.php
public static function str2url($str)
{
    // ...
    $str = preg_replace('/[^\x{0600}-\x{06FF}a-zA-Z0-9\s\'\:\/\[\]-]/u', '', $str);
    // Note : la plage \x{0600}-\x{06FF} couvre l'arabe mais PAS l'hébreu
    // ...
}

Résultat : un nom de produit en hébreu comme "מוצר לדוגמה" produit une URL vide après passage dans str2url().

Solution 1 : Activer les caractères accentués dans les URLs

La première approche, la plus simple, consiste à activer le support natif des caractères Unicode dans les URLs.

Via le back-office

  1. Rendez-vous dans **Paramètres de la boutique → Trafic et SEO**
  2. Activez l'option **« Autoriser les caractères accentués dans les URL »**
  3. Sauvegardez
  4. Via la base de données

    
    UPDATE ps_configuration 
    SET value = '1' 
    WHERE name = 'PS_ALLOW_ACCENTED_CHARS_URL';
    

    Attention : cette option seule ne suffit pas toujours. Si str2url() a déjà supprimé les caractères hébraïques en amont, l'URL générée automatiquement restera vide même avec cette option active.

    Solution 2 : Étendre `str2url` pour supporter l'hébreu

    Pour que la génération automatique fonctionne, il faut modifier la méthode str2url() dans Tools.php (ou mieux, via un override) afin d'inclure la plage Unicode hébraïque.

    Override de Tools (recommandé)

    Créez le fichier override/classes/Tools.php :

    
    <?php
    /**
     * Override Tools pour support des URLs en hébreu
     */
    class Tools extends ToolsCore
    {
        public static function str2url($str)
        {
            static $allow_accented_chars = null;
    
            if ($allow_accented_chars === null) {
                $allow_accented_chars = Configuration::get('PS_ALLOW_ACCENTED_CHARS_URL');
            }
    
            if (!is_string($str)) {
                return '';
            }
    
            $str = trim($str);
    
            if (function_exists('mb_strtolower')) {
                $str = mb_strtolower($str, 'UTF-8');
            }
    
            // Remplacement des espaces par des tirets
            $str = preg_replace('/\s+/u', '-', $str);
    
            if ($allow_accented_chars) {
                // Conserver les caractères Unicode (hébreu, arabe, cyrillique, etc.)
                $str = preg_replace('/[^\p{L}\p{N}_-]+/u', '', $str);
            } else {
                // Comportement par défaut : translittération ASCII
                $str = parent::str2url($str);
                return $str;
            }
    
            // Nettoyer les tirets multiples
            $str = preg_replace('/-+/', '-', $str);
            $str = trim($str, '-');
    
            return $str;
        }
    }
    

    Après avoir créé cet override :

    
    # Supprimer le cache des classes
    rm -f var/cache/prod/class_index.php
    rm -f var/cache/dev/class_index.php
    # Ou en PrestaShop 8.x :
    php bin/console cache:clear
    

    Solution 3 : Injection directe en base de données

    Si les solutions précédentes ne fonctionnent pas ou en attendant leur mise en place, on peut insérer manuellement l'URL simplifiée directement dans la table ps_product_lang :

    
    -- Vérifier l'état actuel
    SELECT id_product, id_lang, name, link_rewrite 
    FROM ps_product_lang 
    WHERE id_product = 42 AND id_lang = 3;
    
    -- Insérer l'URL en hébreu
    UPDATE ps_product_lang 
    SET link_rewrite = 'מוצר-לדוגמה' 
    WHERE id_product = 42 AND id_lang = 3;
    

    Important : après cette modification, le validateur du back-office empêchera la sauvegarde du produit si PS_ALLOW_ACCENTED_CHARS_URL n'est pas activé. Il faudra soit activer cette option, soit étendre le validateur.

    Solution 4 : Translittération hébreu → latin (alternative SEO)

    Une approche alternative consiste à translittérer les caractères hébraïques en leur équivalent phonétique latin. C'est souvent la meilleure option d'un point de vue SEO international, car les moteurs de recherche gèrent mieux les URLs en ASCII :

    
    <?php
    // Ajoutez une table de translittération hébreu → latin
    $hebrew_map = [
        'א' => 'a',  'ב' => 'b',  'ג' => 'g',  'ד' => 'd',
        'ה' => 'h',  'ו' => 'v',  'ז' => 'z',  'ח' => 'ch',
        'ט' => 't',  'י' => 'y',  'כ' => 'k',  'ך' => 'k',
        'ל' => 'l',  'מ' => 'm',  'ם' => 'm',  'נ' => 'n',
        'ן' => 'n',  'ס' => 's',  'ע' => 'a',  'פ' => 'p',
        'ף' => 'f',  'צ' => 'ts', 'ץ' => 'ts', 'ק' => 'q',
        'ר' => 'r',  'ש' => 'sh', 'ת' => 't',
    ];
    
    $str = strtr($str, $hebrew_map);
    

    Cette table peut être intégrée dans l'override de Tools::str2url() comme fallback quand PS_ALLOW_ACCENTED_CHARS_URL est désactivé.

    Vérification de l'encodage de la base de données

    Avant toute manipulation, assurez-vous que votre base de données supporte correctement l'UTF-8 étendu :

    
    -- Vérifier le charset de la table
    SHOW CREATE TABLE ps_product_lang;
    
    -- Le champ link_rewrite doit être en utf8mb4
    ALTER TABLE ps_product_lang 
    MODIFY link_rewrite VARCHAR(128) 
    CHARACTER SET utf8mb4 
    COLLATE utf8mb4_unicode_ci;
    

    Sans utf8mb4, les caractères hébraïques risquent d'être tronqués ou corrompus lors de l'insertion.

    Configuration Nginx / Apache pour les URLs Unicode

    Votre serveur web doit également être configuré pour gérer les URLs contenant des caractères Unicode :

    Apache (.htaccess)

    
    # S'assurer que mod_rewrite gère correctement l'UTF-8
    RewriteEngine On
    RewriteOptions AllowEncodedSlashes
    

    Nginx

    
    # Dans le bloc server
    charset utf-8;
    
    location / {
        # PrestaShop rewrite standard
        try_files $uri $uri/ /index.php?$args;
    }
    

    Bonnes pratiques pour le multilingue non-latin

    1. **Activez toujours `PS_ALLOW_ACCENTED_CHARS_URL`** dès que vous travaillez avec des alphabets non-latins
    2. **Vérifiez l'encodage UTF-8** sur toute la chaîne : PHP, MySQL, serveur web
    3. **Testez sur un produit de test** avant de modifier vos produits de production
    4. **Régénérez le fichier `.htaccess`** via le back-office après toute modification d'URL
    5. **Mettez en place des redirections 301** si vous modifiez des URLs existantes déjà indexées
    6. **Utilisez `urlencode()`** si vous construisez des liens programmatiquement avec des caractères non-latins
    7. PrestaShop 8.x : améliorations notables

      PrestaShop 8.x a amélioré le support Unicode dans plusieurs composants, mais le problème fondamental de str2url() persiste pour l'hébreu. L'override reste nécessaire. En revanche, le nouveau système de routing basé sur Symfony facilite la gestion des URLs multilingues via les annotations de routes.

#urls-simplifiees #multilingue #hebreu #seo-international #friendly-url #caracteres-non-latins #i18n

Questions fréquentes

Tout ce que vous devez savoir sur ce sujet.

Un projet PrestaShop ?

Discutons-en directement.

★★★★★

193 projets livrés

Gratuit & sans engagement — réponse sous 24h

Alexandre Carette

Alexandre Carette

Expert PrestaShop & Architecture E-commerce

Développeur PrestaShop depuis 2014, 193 projets livrés. Je conçois des architectures headless Nuxt + PrestaShop et des outils d'automatisation IA pour les e-commerçants.