Un outil de crawl SEO développé chez Ekino — analyse automatiquement chaque URL d'un site, extrait les métriques SEO et les restitue dans un dashboard interactif.
01 — Contexte
Pour mon deuxième stage au sein d'Ekino, j'ai travaillé en binôme avec FOY Oriane sur la conception et le développement d'un outil de crawl SEO à usage interne.
L'objectif était de permettre aux équipes d'analyser automatiquement n'importe quel site web : l'outil parcourt chaque URL, extrait les données SEO de chaque page et identifie les problèmes (balises manquantes, longueurs incorrectes, erreurs HTTP…) dans un dashboard centralisé.
Le projet a été construit avec Laravel, en exploitant le système de Jobs asynchrones pour paralléliser le crawl et la sitemap XML pour la découverte des URLs.
02 — Architecture
L'application suit un pipeline en plusieurs étapes, du lancement du crawl jusqu'à la restitution des résultats dans le dashboard.
L'utilisateur soumet un domaine. L'application récupère et parse la sitemap XML du site pour lister toutes les URLs à analyser.
Chaque URL est envoyée dans une Queue Laravel sous forme de Job (CrawlUrlJob). Un UrlCrawlGuard évite de recrawler des URLs déjà visitées.
Le SeoExtractor utilise Symfony DomCrawler pour parser le HTML et extraire title, meta description, H1, canonical, robots et schemas JSON-LD.
Le SeoAnalyzer évalue les données selon des règles métier. Chaque problème est classifié en warning ou error.
Les résultats HTTP et SEO sont sauvegardés en base MySQL via UrlPersistenceService et SeoPersistenceService.
Un dashboard Blade affiche les résultats : graphiques de répartition des erreurs, liste des URLs et vue détaillée par URL.
03 — Fonctionnalités
Un outil complet pour auditer le SEO de n'importe quel site web.
| URL | Statut HTTP | SEO Status | Problème détecté | Temps (ms) |
|---|---|---|---|---|
| /fr-fr/home | 200 | OK | — | 214 |
| /fr-fr/about | 200 | WARNING | Meta desc. 96 chars (min 120) | 287 |
| /en/services | 200 | ERROR | H1 tag manquant | 341 |
| /fr-fr/old-page | 301 | WARNING | Redirection → /fr-fr/new-page | 198 |
| /fr-fr/404-test | 404 | ERROR | Page introuvable | 112 |
04 — Démonstrations
Découvrez les principales fonctionnalités de CrawlService à travers ces démonstrations enregistrées.
Fonctionnalité principale
Démonstration complète du crawl d'un site web — soumission de l'URL, découverte des pages via la sitemap, et analyse SEO en temps réel.
Interface
Le dashboard dispose d'un thème sombre intégral, adapté aux longues sessions de travail et aux préférences utilisateur.
Analyse
Isolez rapidement les URLs problématiques grâce au filtre d'erreurs — warnings et errors SEO mis en évidence en un clic.
Filtres
Filtrez les résultats par langue ou par pays détecté dans la structure des URLs — utile pour les sites multilingues.
Détail
Vue détaillée par URL — toutes les métriques SEO et HTTP collectées : title, H1, meta description, canonical, temps de réponse, statut HTTP et plus.
Filtres
Filtrez les URLs par code de statut HTTP — identifiez rapidement les redirections 301, les erreurs 404 ou les pages en 500.
Dashboard
Les cartes de synthèse du dashboard sont cliquables — un clic sur une carte applique directement le filtre correspondant.
05 — Stack Technique
Un stack moderne centré sur PHP/Laravel avec Tailwind pour le front.
06 — Compétences acquises
Un stage qui m'a permis de monter en compétence sur de nombreux aspects du développement web professionnel.
07 — Documentation
Retrouvez ici les documents techniques produits dans le cadre du projet CrawlService.
Contact