Quoi de nouveau pour le rewriting sophistiqué pour le SEO ?

Discussion dans 'URL Rewriting et .htaccess' créé par elji, 16 Août 2016.

  1. elji
    elji WRInaute occasionnel
    Inscrit:
    6 Juin 2009
    Messages:
    303
    J'aime reçus:
    5
    C'est assez facile l'URL rewriting. Une paire de lignes de code dans le .htaccess.

    On change

    Code:
    monfichier?mavariable.php=mavaleur
    en
    Code:
    monfichier-mavariable-mavaleur.php
    Mais ce qui serait bien, ce serait de pouvoir changer

    Code:
    monfichier?mavariable.php=mavaleur
    en
    Code:
    le-titre-de-ma-page.php
    C'est possible, puisque WordPress le fait, et aussi ce forum sous PHPBB. Il reste que ces techniques ne sont pas du tout évidentes à mettre en place pour le webmaster moyen, sur un site moyen.

    Y a t-il quelque chose de nouveau pour faciliter cela ?
     
  2. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 368
    J'aime reçus:
    2
    ça ne se fait pas dans le htaccess, mais via php en récupérant les variables ....
     
  3. elji
    elji WRInaute occasionnel
    Inscrit:
    6 Juin 2009
    Messages:
    303
    J'aime reçus:
    5
    Oui, c'est ce que j'essaie de faire.
    Je suis en ce moment même d'écrire le script pour ajouter un champ à ma base de données.

    A partir du champ titre (ex : Le titre de ma page 2 sur le frère Jacques),
    j'aurais demain (si tout va bien) un champ lien avec le-titre-de-ma-page-2-sur-le-frere-jacques.php

    C'est après que cela se corse, merci pour les liens, je vais les étudier avec attention.
     
  4. NicolasH
    NicolasH WRInaute occasionnel
    Inscrit:
    4 Mai 2016
    Messages:
    312
    J'aime reçus:
    22
    Bonjour elji,

    Le titre dans l'url c'est ce qu'on appelle le slug.

    Le principe :

    Le rewrite va te permettre d'appeler ton script php avec comme valeur ton titre.
    Le titre va être récupéré par ton script et tu vas faire une rechercher d'article par slug en bd via une requête SQL.
    Le champ slug ne doit pas autoriser les doublons.
    Si le résultat est nulle alors tu rediriges vers une 404. Sinon tu affiches le contenu des champs de la ligne trouvée.

    PS : inutile de mettre .php à la fin, ca rallonge le titre pour rien et si un jour tu changes de techno tu devras renommer toutes tes urls.
     
  5. Koxin-L.fr
    Koxin-L.fr WRInaute passionné
    Inscrit:
    15 Janvier 2012
    Messages:
    1 891
    J'aime reçus:
    8
    Slt,

    Url demandée par l'internaute (et affiché sur le site) : http://www.exemple.com/mon-titre-de-page.html
    Toi, tu gères tes data en base de données avec comme champs : ID | Titre | Text | Url
    Code:
    RewriteRule ^([-a-zA-Z0-9]+).html$ /index.php?url=$1
    Tu n'a plus qu'à aller chercher les data en fonction de ta variable url que tu traite via $_GET.

    Dans ton BO, via php tu gère la non duplication des url de tes articles pour qu'elles soient unique.
     
  6. elji
    elji WRInaute occasionnel
    Inscrit:
    6 Juin 2009
    Messages:
    303
    J'aime reçus:
    5
    Merci pour ces réponses. Je vois beaucoup mieux le problème, même si je suis encore à la première étape.
    Je n'y avais pas pensé (!), mais mon site n'est pas comme WordPress qui crée automatiquement des répertoires pour les années, et des sous-répertoires pour les mois.

    Je vais me retrouver avec plus de 5000 articles avec des URLs dans un même répertoire. Mes sites parlant de voitures, il y a un risque énorme d'avoir des articles avec le même titre (ex : "La nouvelle Renault Megane"). Pour éviter tout risque, et ne pas avoir à réfléchir avant d'écrire un nouveau titre, je dois ajouter une variable unique à l'URL.

    Je pense ajouter la date, et c'est simple je dois savoir le faire. Mes URLs seront donc du type :

    Code:
    20160817-le-titre-de-ma-page.php
     
  7. Koxin-L.fr
    Koxin-L.fr WRInaute passionné
    Inscrit:
    15 Janvier 2012
    Messages:
    1 891
    J'aime reçus:
    8
    Pourquoi pas.

    Après tu tape ta bdd avec une condition de recherche
    Code:
    WHERE url= le-titre-de-ma-page && date_publi = 20160817
     
  8. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 368
    J'aime reçus:
    2
    Ce ne sont que des règles de réécriture, à toit d'inventer les tiennes.

    L'ID de l'article est une bonne idée. Et c'est plus fenghsui que la date pour Google News si jamais ça t'intéresse.
    En plus, comme l'ID est unique, ça te permet de baser ta réécriture sur un paramêtre unique, sans t'occuper du titre.
    Ca ne t'empêche pas de rajouter la date dans l'url.
    Mais côté SQL c'est plus léger (surtout que l'ID est normalement un index ^^)
     
  9. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 887
    J'aime reçus:
    74
    Intégrer la date dans les url c'est moche. Mieux vaut un ID our rien du tout (dans ce cas tu te bases sur le seul slug).
     
  10. elji
    elji WRInaute occasionnel
    Inscrit:
    6 Juin 2009
    Messages:
    303
    J'aime reçus:
    5
    Ah ouais ? Un id serait mieux que la date ?
    Bon, j'accepte ce conseil. C'est ce que je vais faire.

    Cela ne fera pas de différence, puisque j'ai créé un nouveau champ dans ma DB. Un champ lien, extrapolé à partir de l'ID actuel et du champ titre. La colonne contiendra les valeurs :

    Code:
    ID1-titre-du-premier-article.php
    Code:
    ID2-titre-du-second-article.php
    Je suis conscient que cela alourdit ma table, mais ensuite cela me permet de faire des requetes simples (moi pas programmeur, moi aimer requêtes simples) qui seront rapides à éxécuter. Accessoirement, ce nouveau champ pourrait à terme devenir une nouvelle clé, même si je n'en ai pas besoin.

    J'avais oublié de répondre à cela, c'est par habitude. Toutes mes pages depuis plus de 10 ans ont toutes l'extension .php et j'aurais l'impression qu'il y a quelque chose qui manque s'il n'y avait pas cette extension...
     
  11. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 029
    J'aime reçus:
    291
    Les exemples de rewrite de ce topic utilisent des techniques de 1930 ...
    https://www.webrankinfo.com/forum/pratique-htaccess-lire-avant-poser-t13288 ... l#p1217718

    http://upshots.org/php/php-regexrouter
    https://gist.github.com/dave1010/1214164
    http://altorouter.com/
    [...]

    Pour les URLs avec un slug qui est p-e amené à changer, j'aime bien passer le couple: id et slug afin de faire une redirection 301 si le slug devait à changer. Et juste le slug si on est sûr que ça changera pas.

    PS: Il n'y a pas que Apache dans la vie.
     
  12. Koxin-L.fr
    Koxin-L.fr WRInaute passionné
    Inscrit:
    15 Janvier 2012
    Messages:
    1 891
    J'aime reçus:
    8
    Grotesque.
    L'exemple que je donne fonctionne parfaitement bien.
    A lui de gérer derrière en php pour éviter les conflit et les 404.

    Et s'il le souhaite, tout faire en php.

    Mais aucunement ces techniques sont dépassées.

    Il est là, autant s'en servir.
     
  13. elji
    elji WRInaute occasionnel
    Inscrit:
    6 Juin 2009
    Messages:
    303
    J'aime reçus:
    5
    Bon, j'aurais déjà fait plus de 50 tests avec différentes règles de réécriture, et j'hésite encore sur la moins pire.
    J'ai en effet des titres avec "la Megane IV" ou "la Golf VII", ce qui ne rend pas trop bien en minuscules. J'ai aussi "moins de 20.000 €", et de nombreuses fois "l'hybride" ou "l'hydrogène", et je supprime l'apostrophe pour me retrouver avec un mot qui n'existe pas...

    Pour règler ce problème à l'avenir, j'ai fait le choix d'un slug non dynamique. Ma difficulté actuelle est pour convertir les + de 5000 articles existants. A l'avenir, j'écrirais l'URL de mon choix en même temps que j'écrirais l'article. J'ai un champ lien dans ma BDD (c'est là que j'ai déjà créé et effacé plus de 50 fois différentes valeurs, je connais par coeur la commande pour tout effacer : UPDATE lesactus SET lien = '').

    Pour la suite, il reste une chose que je comprend pas.
    Je vais avoir de beaux liens du type :

    Code:
    /monrepertoire/monidentifiantunique-le-titre-de-ma-page.php
    Mais comment faire pour que ce lien pointe vers les pages actuelles dont l'URL est de type :

    Code:
    /monrepertoire/monfichier.php?mavariable=mavaleur
    Je peux mettre une variable "le titre de ma page" dans un GET dans la page monfichier.php mais il faut que je mette une règle de réécriture dans mon .htaccess avant cela, non ?

    Merci encore à ceux qui m'aident !
     
  14. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 029
    J'aime reçus:
    291
    PHP:
    <span class="syntaxdefault"></span><span class="syntaxkeyword"><?</span><span class="syntaxdefault">php<br /></span><span class="syntaxkeyword">function&nbsp;</span><span class="syntaxdefault">slug</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$str</span><span class="syntaxkeyword">)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$transliterator&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Transliterator</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">createFromRules</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"::Latin-ASCII;&nbsp;::Lower;&nbsp;[^[:L:][:N:]]+&nbsp;>&nbsp;'-';"</span><span class="syntaxkeyword">);<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span class="syntaxdefault">trim</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$transliterator</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">transliterate</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$str</span><span class="syntaxkeyword">),&nbsp;</span><span class="syntaxstring">'-'</span><span class="syntaxkeyword">);<br />}<br />&nbsp;<br /></span><span class="syntaxdefault">$titles&nbsp;</span><span class="syntaxkeyword">=&nbsp;[<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxstring">"la&nbsp;Megane&nbsp;IV"</span><span class="syntaxkeyword">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxstring">"la&nbsp;Golf&nbsp;VII"</span><span class="syntaxkeyword">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxstring">"moins&nbsp;de&nbsp;20.000&nbsp;€"</span><span class="syntaxkeyword">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxstring">"l'hybride"</span><span class="syntaxkeyword">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxstring">"l'hydrogène"</span><span class="syntaxkeyword">,<br />];<br />&nbsp;<br />foreach&nbsp;(</span><span class="syntaxdefault">$titles&nbsp;</span><span class="syntaxkeyword">as&nbsp;</span><span class="syntaxdefault">$title</span><span class="syntaxkeyword">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="syntaxdefault">slug</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$title</span><span class="syntaxkeyword">)&nbsp;.&nbsp;</span><span class="syntaxstring">'<br>'</span><span class="syntaxkeyword">;<br />}&nbsp;</span><span class="syntaxdefault"></span>
    Code:
    la-megane-iv
    la-golf-vii
    moins-de-20-000
    l-hybride
    l-hydrogene
    Src: https://www.matthecat.com/supprimer-les-accents-dune-chaine-en-php/
     
  15. elji
    elji WRInaute occasionnel
    Inscrit:
    6 Juin 2009
    Messages:
    303
    J'aime reçus:
    5
    Merci pour cette réponse rapide !
    Mon script modifiant une base de données, il est différent, de ce type :

    $lien = preg_replace("/\s/", '-', $lien);

    Mais les caractères spéciaux ne sont pas vraiment un problème. Mon souci est que je ne voudrais que des mot-clés dans mes URLs mais je me retrouve avec des "l", des "iv" et des "vii" (entre autres), bref des trucs qui n'ont aucun sens. Je suppose que ce n'est pas trop grave.

    C'est pour la suite que je suis plus embêté, l'exploitation de ce slug.
     
  16. elji
    elji WRInaute occasionnel
    Inscrit:
    6 Juin 2009
    Messages:
    303
    J'aime reçus:
    5
    Bon, j'aurais pas mal galéré, mais j'ai enfin ce que je voulais. Les règles de réécriture sont les suivantes.

    Code:
        $string = strtolower(iconv('UTF-8', 'ASCII//TRANSLIT', $data['titre']));
        $string = preg_replace('/[^A-Za-z0-9\- \']/', '', $string);
        $string = str_replace('nbsp',' ',$string);
        $string = str_replace('\'','-',$string);
        $string = str_replace(' ','-',$string);
        $string = str_replace('--','-',$string);
        $string = rtrim($string,'-');
    Ce n'est cependant que le départ, puisque dans la nouvelle architecture de mon site, je vais fusionner les entrées de 2 tables. Pour éviter de faire des requêtes trop complexes, je vais alors récupérer toutes les URLs propres telles que mon script les donne, toutes les enregistrer dans une nouvelle colonne de ma table, et ensuite je pourrais faire une requête simple, en demandant juste le titre, le lien et l'image de une pour les plus récentes entrées de mes 2 tables (il y a déjà des URLs en dur dans ma seconde table).

    Le seul inconvénient du système est que je serais condamné à écrire moi-même, à la main, mes futurs URLs, mais c'est guère gênant.
     
  17. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 887
    J'aime reçus:
    74
    Avec un peu de JS dans le back office, tu facilement pré-générer le champ url à partir de ce qui est saisi dans le titre.
     
  18. NicolasH
    NicolasH WRInaute occasionnel
    Inscrit:
    4 Mai 2016
    Messages:
    312
    J'aime reçus:
    22
    Bonjour,

    L'id et la date ne sont pas indispensables dans l'url.

    Tu peux avoir un slug unique en controllant ce dernier lors de la saisi d'un nouvel article dans le backoffice.
    Il reste plus qu'à faire une recherche par slug dans le backend.
     
  19. elji
    elji WRInaute occasionnel
    Inscrit:
    6 Juin 2009
    Messages:
    303
    J'aime reçus:
    5
    Mon souci n'était pas dans les nouveaux articles, mais plutôt dans les anciens. Je ferais peut-etre un script en JS pour mon formulaire de saisie un jour, mais l'important était d'éviter les doublons dans mes vieux articles.

    J'ai donc mis en place un slug

    id-unique-titre-de-la-page

    et c'est bien. Ce problème est résolu.
     
Chargement...
Similar Threads - nouveau rewriting sophistiqué Forum Date
url rewriting vers nouveau site URL Rewriting et .htaccess 22 Janvier 2012
url rewriting ou achat de nouveau noms de domaine svp.. URL Rewriting et .htaccess 14 Septembre 2011
Aide pour nouveau Rewriting + Redir 301 svp URL Rewriting et .htaccess 8 Février 2010
Nouveau dans le SEO, aide de site Débuter en référencement 31 Juillet 2020
Mon nouveau site sur la généalogie Demandes d'avis et de conseils sur vos sites 28 Juillet 2020
Sous domaine ou nouveau domaine Référencement Google 29 Juin 2020
Création d'un nouveau site dans un site déjà existant Débuter en référencement 16 Avril 2020
Quoi de nouveau en SEO depuis 2016 ? Débuter en référencement 14 Avril 2020
Besoin d'avis sur mon nouveau site Demandes d'avis et de conseils sur vos sites 9 Avril 2020
Besoin d'avis sur mon nouveau site. Demandes d'avis et de conseils sur vos sites 26 Mars 2020
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice