Analyse de malfaçons en développement et en SEO

Imaginez recevoir votre nouvelle maison. La façade est joli, et tout marche a peu près comme vous vouliez, mais au fil du temps vous constatez avoir des notes de chauffage qui n’auraient jamais du être aussi hautes, des petites fuites à droite et à gauche… En réalité l’isolation a été bâclée ainsi que la toiture pour des raisons de coûts, de délai… Le maçon ou son chef de chantier voulait finir vite (peut-être avait il des délais pour d’autres projets, et on lui a mis la pression) – on ne le saura jamais.
Lorsque vous recevez un projet Web, c’est a peu de choses près la même chose: il est compliqué de voir la qualité du code sans être du métier.  Mais si c’est mal fait, ça va finir par se voir…
Voyons ensemble l’intérieur du site de la médiathèque de Saint Herblain, car il y a des choses à dire !

Amateur de jeux de société, je voulais réaliser un mashup (un site mixant des fonctions) entre le site tric trac et le site de la médiathèque. Dans un 1er temps, le but était de pouvoir visualiser rapidement les jeux avec des bonnes notes étant disponibles. Aucune api n’étant disponible ni sur un site ni sur l’autre, c’est avec du scrap en PHP que j’ai du démarrer mon code.

La pagination:

Lorsque vous démarrez une recherche blanche sur le site http://www.la-bibliotheque.com, puis modifiez la recherche avec type de documents = « jeu ». Vous avez une liste de 10 jeux. Lorsque vous défilez vous voyez les 10 suivants et ainsi de suite. Sauf que les liens vers les produits affichés sur les pages suivantes sont erronés. On voit le paramètre q au lieu du paramètre queryosiros. Tous renvoient vers une page 404. Page 404 d’ailleurs qui n’a pas été paramétrée correctement sur le serveur. Merci la page not found d’apache. Mais à la limite ce n’est pas très grave, et ça se corrige facilement.
La gestion du défilement des produits est géré avec un id de session. Le cookie mémorise le nombre de fois ou on a appelé cette page, et affiche ainsi la suite de la liste. Une pagination ne se fait pas comme cela! Vous devez avoir des pages avec un numéro en paramètre – en base on cherche ainsi les 10 produits à partir du numéro X (liste géré avec une limit et un offset en SQL), puis par dessus vous appliquez la couche d’infinite scroll en javascript. Mais à aucun moment un id de session ne doit intervenir sinon il bloque l’accès aux moteurs de recherche. De plus, ici, expliquez moi comment je peux atteindre le résultat 4000 juste avec la molette ? Ici, si vous n’avez pas de javascript dans votre navigateur, vous n’aurez rien. Il s’agirait d’un site ecommerce, en terme de SEO, ca serait juste catastrophique (aucun moyen pour les moteurs d’accéder aux fiches produits et de les indexer correctement).
Et comme le site est un wordpress, je me dis qu’il y a une méconnaissances graves des wp_query. Et pour finir de vous prouvez que c’est n’importe quoi. Ouvrez 2 onglets, avec la même recherche. Scrollez sur les 2 onglets, et vous verrez que dans le 1er, vous aurez les articles 10 à 20, alors que dans le 2e, vous aurez de 20 à 30, alors qu’en théorie, on est censé retrouver exactement la même liste.

Aucune fiche produit:

Ensuite lorsqu’on analyse cette url (http://www.la-bibliotheque.com/recherche/notice.php/?q=%2A%3A%28%2A%29&spec_expand=&rows=10&start=10&fq=-typedoc%3A%28s%29), on voit que ce n’est pas une url propre d’une fiche produit. Là où il devrait y avoir une seule url pour qualifier ce produit, on voit que le critère distinctif est le paramètre start qui permet de voir la fiche ou celle d’après. En fait il s’agit ni plus ni moins d’une page de recherche. Le jour où vous rajouterez d’autres produits, les urls seront probablement décalées, et si celle ci affiche aujourd’hui start= 10, peut être qu’elle affichera start=11 demain.
Normalement la règle d’or d’une bonne indexation est de ne pas modifier l’url de ses fiches produits.
Idéalement les urls devraient être de la forme /type_de_contenu/nom-article si pour une bonne indexation des moteurs de recherche et ne pas en changer.

Facetting:

La gestion des facettes dans les moteurs de recherche interne est souvent complexe, donc je ne vais pas jeter la pierre. Je me permet de noter que certains indicateurs de recherche n’apparaissent au final pas sur la fiche produit et qui à mon sens sont importants. Exemple pour le jeu crazy time qui n’affiche pas cette notion (critère sensitif = »drole ») lorsqu’on tombe dessus par hasard. C’est dommage.

Page contact et mon espace:

Enfin, lorsqu’on voit envoie un mail avec une url de type http…. le mot clé alert, ou encore le caractère <, le mail refuse de partir et aucun message d’erreur n’apparaît. L’utilisateur ne peut pas savoir si son mail a fonctionné, quel champ est en erreur. En fait, lorsqu’il y a une erreur détectée, cela appelle une page 404 (on a le même problème dans la section mon espace et qu’on essaye d’ajouter des notes personnelles), donc encore une fois on peut noter un mauvais développement dans ces formulaires. Il est également impossible de redimensionner la case message alors que par défaut elle devrait l’être. A quoi bon brider l’utilisateur ? C’est comme les sites qui interdisent le copier coller, ca ne sert à rien si ce n’est à nuire à l’expérience utilisateur.

Certificat SSL et duplicate content:

Prochainement Google Chrome lèvera une alerte pour les sites non Https et c’est le cas ici. Les certificats sont aujourd’hui gratuits, et là, on parle d’un site acheté par la ville (domaine public)! Mais au delà de la non gestion du SSL, le site répond également en Https avec un template qui ne fonctionne pas. On peut donc supposer que pour Google, tous les contenus sont doublés et nuisent donc aussi à l’indexation.

Sécurité:

Alors, là, j’ai envie de rire. Dans la page mon espace, il y a un formulaire pour prendre des notes, et dans ce formulaire, on voit ce champ:
<input type= »hidden » name= »user » value= »XXX »> qui indique l’identifiant de l’utilisateur. Et oui, vous avez compris, vous modifier le numéro, et vous pouvez modifier les informations de quelqu’un d’autres. D’accord, ce sont juste des notes personnelles et personne ne doit utiliser cette fonctionnalité, mais, franchement ce genre de manipulation c’est la base de la sécurité ! L’identifiant doit être en session (coté serveur) et pas dans le formulaire. La règle étant de ne jamais faire confiance aux informations d’un internaute: toujours tout vérifier.
Il y a également la faille de sécurité qui permet de retrouver le nom des comptes admin via le paramètre ?author=X (heureusement, elle ne fonctionne pas sur les comptes des utilisateurs).

Temps de réponse:

Les délais sont vraiment longs pour faire des recherches. Peut être que des index sur la base de données, un reverse proxy comme varnish, ou encore du tuning server amélioreraient les temps de traitement. C’est difficile de savoir vraiment ce qui bloque, mais il y a surement des choses à faire aussi à ce niveau.

L’artisanat du développement:

Un bon développeur c’est comme un artisan. Plus vous verrez la notion d’artisanat (Craftsmanship)  se dégager d’une société / d’une personne, plus vous pouvez avoir confiance. Malheureusement, pour les néophytes, il est toujours difficile de reconnaître le bon, du mauvais développeur. Si vous êtes recruteur ou seulement intéressé par le sujet, alors regardez cette vidéo, qui vous permettra de savoir comment sortir le meilleur d’un développeur.
Ca fait tellement du bien de retrouver ses valeurs chez d’autres 🙂

Enfin, la question de la fin, est « Pourquoi diable tous les projets du domaine public sur lesquels je me penche sont-ils toujours aussi peu qualitatifs ? ».
N’y a t-il aucun chef de projet pour s’assurer d’une cohérence des bonnes pratiques ?

MISE A JOUR:

J’ai communiqué ce post à la bibliothèque il y a 1 mois (en mode privée), et même s’ils n’ont pas pris en compte tous les éléments, les plus importants ont étés corrigés (notamment le hack des pages des autres personnes ainsi que le certificat SSL). Même si on ne peut pas dire qu’ils ont étés très collaborateurs à travers ces échanges, on peut quand même dire que c’est déjà un bon début…

 

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.