Le site est propre, rapide et bien écrit. Il lui manque les fondations d'indexation et, surtout, un système qui fasse circuler la valeur entre les 46 contenus déjà publiés. Cette première partie couvre la synthèse et les fondations techniques.
Le diagnostic tient en une phrase : le site est bien construit sur le plan éditorial et mal équipé sur le plan technique, et les 46 contenus publiés ne se parlent pas.
/ressources/sanctions-anticorruption-afa/ apparaît dans les résultats de recherche et n'existe plus sur le site.Il faut le dire, parce que ça évite de casser ce qui marche.
Ce qui a été contrôlé, l'état de la performance, et les deux points à confirmer avant intervention.
Récupération et lecture du code des pages suivantes : accueil, /expertises/penal/, /ressources/, /ressources/procedure-penale-francaise-guide-complet/. Contrôle des titles, meta descriptions, balises canoniques, balises Open Graph, structure des titres, liens internes en corps de texte, attributs alt. Test du code de réponse HTTP sur la page 404 signalée.
Les relevés PageSpeed Insights sont bons et le site charge vite. C'est le bénéfice direct d'une génération statique par Astro, et un vrai avantage face à la plupart des sites de cabinets, souvent construits sur des thèmes lourds.
Le seul point de vigilance est de tenir cette dynamique dans la durée. La performance d'un site se dégrade rarement d'un coup : elle s'érode article après article, quand des visuels non compressés entrent dans la bibliothèque. Le chantier images ci-dessous vise donc moins à réparer qu'à installer les garde-fous qui empêcheront la dérive au fil des quarante prochains articles.
Deux vérifications de routine, à faire dans les outils Google plutôt que sur le code : passer chaque gabarit dans le test des résultats enrichis pour établir l'état exact du balisage structuré, et exporter la liste complète des erreurs d'exploration depuis la Search Console. La page en erreur signalée plus bas a été trouvée par recoupement avec les résultats de recherche, elle n'est probablement pas la seule.
Effort faible, effet rapide. Ce bloc décide si Google comprend la page, s'il l'affiche correctement, et si elle est seulement éligible aux requêtes visées. Tant qu'il n'est pas réglé, tout le reste, y compris le maillage et les nouveaux articles, rapporte moins que ça ne devrait. Comptez une à deux journées de développement.
[Requête cible] à Paris | Toni Landini, avocat.[Sujet court] : [angle] | Landini Avocat.Dans ce projet Astro, je veux refondre la generation des balises title.
1. Trouve le composant de layout qui genere le head et la facon dont le title est actuellement construit.
2. Ajoute un champ optionnel seoTitle au frontmatter des pages et des contenus. S'il est renseigne, il devient le title. Sinon, applique un repli automatique.
3. Repli pour les pages de service : "{titre de page} a Paris | Toni Landini, avocat". Repli pour les ressources : "{titre} | Landini Avocat", tronque proprement sur le dernier mot entier si le total depasse 60 caracteres.
4. Renseigne ensuite seoTitle a la main sur ces pages, avec exactement ces valeurs :
- accueil : "Avocat penal des affaires et contentieux a Paris | Toni Landini"
- /expertises/ : "Expertises du cabinet : contentieux, penal des affaires, conseil"
- /expertises/penal/ : "Avocat en droit penal des affaires a Paris | Toni Landini"
- /expertises/contentieux/ : "Avocat contentieux civil et commercial a Paris | Toni Landini"
- /expertises/conseil/ : "Conformite, prevention et devoir de vigilance | Toni Landini"
- /cabinet/ : "Le cabinet Toni Landini, avocat au barreau de Paris"
- /honoraires/ : "Honoraires d'avocat : grille et modalites | Toni Landini"
- /ressources/ : "Ressources juridiques : penal des affaires et contentieux"
5. Ajoute une verification au build qui echoue si deux pages produisent le meme title, ou si un title depasse 65 caracteres. Affiche la liste des pages fautives.
6. Ne touche a aucun H1 dans cette tache./expertises/penal/, la description fait environ 430 caractères et contient un saut de ligne. C'est le paragraphe d'introduction de la page, recopié à l'identique dans la balise.Dans ce projet Astro, les meta descriptions sont generees a partir du contenu des pages, ce qui produit des descriptions trop longues et parfois avec des sauts de ligne. 1. Identifie ou la meta description est construite dans le layout du head. 2. Rends le champ description du frontmatter obligatoire pour toute page et toute ressource. Supprime tout repli automatique qui recopie le corps de la page. 3. Ajoute une normalisation avant ecriture : supprimer les sauts de ligne et les espaces multiples, reduire a une seule ligne. 4. Ajoute une verification au build : echec si une description est absente, depasse 165 caracteres, fait moins de 110 caracteres, contient un saut de ligne, ou est identique a celle d'une autre page. Liste les pages fautives avec leur longueur actuelle. 5. Fais ensuite la liste de toutes les pages dont la description depasse 165 caracteres ou contient une annee en dur (2023, 2024, 2025). Affiche-moi cette liste sans la corriger, je reecrirai les textes moi-meme. 6. Applique la meme normalisation a og:description et twitter:description, qui doivent reprendre la meta description.
Travail sur la hierarchie des titres de ce site Astro. Objectif : une structure Hn valide et semantique sur tous les gabarits. ETAPE 1 : Diagnostic Ecris un script Node qui parcourt les fichiers HTML generes dans dist/ et produit un rapport par page : - la liste ordonnee des titres avec leur niveau et leur texte - les anomalies : plusieurs H1, aucun H1, titre vide, saut de niveau, titres identiques en double sur la meme page Affiche-moi ce rapport avant toute correction. ETAPE 2 : Pages expertises - Le H1 devient la requete cible complete. Pour la page penal : "Avocat en droit penal des affaires a Paris". Garde le libelle court actuel comme surtitre visuel, dans un p ou un span, pas dans un titre. - Les titres des blocs de champs d'intervention (aujourd'hui en strong ou en bouton d'accordeon) deviennent des h2. Si ce sont des accordeons, le h2 enveloppe le button, et le button conserve aria-expanded et aria-controls. - Les sous-libelles "Champs d'intervention" et "Exemple de dossier traite" deviennent des h3. - Les libelles decoratifs qui commencent par un tiret long restent des p avec une classe. ETAPE 3 : Gabarit ressource - Supprime tout titre vide. - Les titres qui servent d'etiquette visuelle deviennent des h5 ou des p avec une classe selon leur role reel, sans jamais casser la progression des niveaux. - Les questions de FAQ en fin d'article passent en h3 a l'interieur d'une section de classe faq qui enveloppe l'ensemble du bloc. ETAPE 4 : Accueil - Les cartes d'expertise sont rendues deux fois dans le DOM, probablement une version desktop et une version mobile. Fusionne-les en un seul rendu adapte par CSS, pour supprimer les H3 en double. ETAPE 5 Relance le script de l'etape 1 et montre-moi le rapport avant/apres. Ajoute-le comme verification de build qui echoue en cas d'anomalie.
/ressources/sanctions-anticorruption-afa/ apparaît dans les résultats Google avec un extrait complet, et renvoie une erreur 404./expertises/penal sans slash final, alors que l'URL canonique en comporte un. Chaque clic passe par une redirection./en/expertise/criminal-law, soit la version anglaise, depuis un article français.Trois corrections d'URL sur ce site Astro. 1. REDIRECTIONS Mets en place un systeme de redirections permanentes (301) centralise, adapte a l'hebergeur utilise : soit le champ redirects de la configuration Astro, soit un fichier _redirects ou vercel.json selon le cas. Explique-moi ou ajouter une nouvelle redirection. Ajoute une premiere entree : /ressources/sanctions-anticorruption-afa/ doit rediriger vers l'URL actuelle de cet article. Cherche d'abord dans le projet si un article sur les sanctions de l'AFA existe sous un autre slug. Si tu n'en trouves aucun, dis-le moi clairement sans inventer de cible. 2. SLASH FINAL Ecris un script qui parcourt tout le contenu Markdown et tous les composants, et liste les liens internes qui pointent vers une URL du site sans slash final. Montre-moi la liste, puis corrige-les une fois que je valide. Ajoute ensuite une verification de build qui echoue si un lien interne sans slash final est reintroduit. 3. LIENS INTER-LANGUES Un article francais contient un lien vers /en/expertise/criminal-law. Ecris un script qui detecte tous les liens partant d'une page francaise vers une URL commencant par /en/ et inversement, hors selecteur de langue de l'en-tete. Liste-les. Le lien du guide de procedure penale doit pointer vers /expertises/penal/. Ajoute cette detection aux verifications de build.
sameAs reprenant LinkedIn, la fiche du barreau et les annuaires.AggregateRating : Google ne les affiche plus et la pratique est mal vue en déontologie.Implementation du balisage JSON-LD sur ce site Astro. ETAPE 0 Verifie d'abord ce qui existe deja : cherche toute balise script de type application/ld+json dans les layouts et les composants. Fais-moi un etat des lieux avant d'ajouter quoi que ce soit, je ne veux pas de doublons. ETAPE 1 : Composant central Cree un composant JsonLd.astro qui recoit un objet et l'ecrit dans une balise script application/ld+json dans le head, avec echappement correct des caracteres. Un seul bloc par page, contenant un @graph avec toutes les entites, plutot que plusieurs balises separees. ETAPE 2 : Entites globales, sur toutes les pages - LegalService : name "Toni Landini, Avocat", @id ancre sur l'URL du site, url, telephone "+33640901498", email, address (9 rue Victorien Sardou, 75016 Paris, FR), areaServed France, availableLanguage francais anglais italien, priceRange, image du logo, knowsAbout avec les domaines d'intervention. - Person : Toni Landini, jobTitle "Avocat au barreau de Paris", worksFor pointant vers le @id du LegalService, sameAs avec le profil LinkedIn et les fiches d'annuaires. Demande-moi les URL exactes des profils avant de les ecrire, n'en invente aucune. ETAPE 3 : Par gabarit - Toute page avec un fil d'Ariane visible : BreadcrumbList reprenant exactement les memes libelles et les memes URL que le fil affiche. - Gabarit ressource : Article avec headline, description, image de couverture, datePublished et dateModified issus du frontmatter, author pointant vers le @id de la Person, publisher vers celui du LegalService, mainEntityOfPage. - Pages expertises : Service avec name, description, provider vers le @id du LegalService, areaServed, serviceType. - Articles contenant un bloc FAQ : FAQPage genere automatiquement a partir des h3 de la section faq et de leur contenu. Ne le genere que si la section existe reellement. ETAPE 4 Ajoute une verification de build qui valide que le JSON produit est bien forme sur chaque page. Puis donne-moi la liste des URL a passer dans le test des resultats enrichis de Google. CONTRAINTE : ne balise aucun avis client ni AggregateRating.
og-image.png) sur l'accueil et les pages expertises, spécifique sur les articles. Deux logiques cohabitent dans le même site.Optimisation des images de ce site Astro. ETAPE 1 : Inventaire Ecris un script qui liste toutes les images du projet et de dist/ avec leur chemin, leur poids, leurs dimensions et leur format. Trie par poids decroissant. Repere aussi toutes les balises img du HTML genere dont l'attribut alt est vide ou absent, avec la page ou elles se trouvent. Montre-moi les deux listes. ETAPE 2 : Attributs alt Rends l'attribut alt obligatoire pour l'image de couverture des ressources : ajoute un champ coverAlt au frontmatter et fais echouer le build s'il manque. Ne genere pas d'alt automatiquement a partir du titre, je les ecrirai. Donne-moi la liste des articles ou il manque. ETAPE 3 : Pipeline Remplace les balises img brutes par le composant Image d'astro:assets partout ou c'est possible : - formats avif puis webp, avec repli - widths [400, 800, 1200, 1600] et un attribut sizes coherent avec la mise en page reelle - width et height toujours presents dans le HTML final - loading="lazy" et decoding="async" par defaut - sur l'image de couverture en haut d'un article et sur tout visuel visible au chargement : loading="eager" et fetchpriority="high", jamais lazy ETAPE 4 : Image de partage Genere une image Open Graph par page au build, a partir du titre, avec l'identite visuelle du site sur fond #0e0f23. Utilise satori ou @vercel/og. Remplace l'usage de og-image.png sur l'accueil et les pages expertises. Conserve les couvertures existantes comme image de partage des ressources. ETAPE 5 Relance l'inventaire et montre-moi le gain en poids total. Ajoute enfin une verification de build qui echoue si une image depasse 150 Ko : le site est rapide aujourd'hui, l'objectif est qu'il le reste au fil des prochains articles.
Faible impact unitaire, mais peu coûteux. À grouper en une session une fois le reste livré.
Le maillage interne, la priorité 3, l'ordre d'exécution et le plan éditorial de 40 articles sont sur la seconde page.
Le chantier de maillage est le plus rentable du site. La seconde page contient les cinq prompts correspondants et le plan de 40 articles.