STAGE N°2 — EKINO

CrawlService

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.

Entreprise Ekino
Stack Laravel · PHP 8.4
Rôle Développeur Full-Stack
crawlservice — bash
$ php artisan crawl:start https://ekino.com
# Démarrage du crawl asynchrone...
Sitemap détecté — 142 URLs trouvées
Jobs dispatched → Queue Worker
# Analyse SEO en cours...
title: OK (52 chars)
meta_desc: WARNING (96 chars < 120)
h1_count: ERROR (0 found)
canonical: OK
robots: index, follow
response_time: 287ms
status_code: 200
$ _

01 — Contexte

Le projet

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.

  • travel_explore
    Développement du moteur de crawl HTTP asynchrone (Jobs Laravel + Queue)
  • analytics
    Extraction et analyse des métriques SEO (title, H1, meta, canonical, robots, schemas…)
  • dashboard
    Conception du dashboard avec graphiques de synthèse (Chart.js) et vue détaillée par URL
  • account_tree
    Parsing de la sitemap XML pour la découverte automatique des URLs
  • storage
    Modélisation et administration de la base de données MySQL
Entreprise Ekino — Transformation digitale
Projet CrawlService — Outil SEO interne
Équipe FOY Oriane · ROSA Axel
Technologies
Laravel PHP 8.4 MySQL Tailwind CSS Chart.js Blade Queue / Jobs Symfony DomCrawler

02 — Architecture

Comment ça fonctionne

L'application suit un pipeline en plusieurs étapes, du lancement du crawl jusqu'à la restitution des résultats dans le dashboard.

01

Découverte des URLs

L'utilisateur soumet un domaine. L'application récupère et parse la sitemap XML du site pour lister toutes les URLs à analyser.

SitemapParser XPath HttpCrawlerClient
02

Crawl Asynchrone

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.

Jobs / Queue CrawlUrlJob UrlCrawlGuard
03

Extraction SEO

Le SeoExtractor utilise Symfony DomCrawler pour parser le HTML et extraire title, meta description, H1, canonical, robots et schemas JSON-LD.

SeoExtractor DomCrawler JSON-LD
04

Analyse & Scoring

Le SeoAnalyzer évalue les données selon des règles métier. Chaque problème est classifié en warning ou error.

SeoAnalyzer Severity Rules TagAssigner
05

Persistance

Les résultats HTTP et SEO sont sauvegardés en base MySQL via UrlPersistenceService et SeoPersistenceService.

MySQL Eloquent Migrations
06

Dashboard

Un dashboard Blade affiche les résultats : graphiques de répartition des erreurs, liste des URLs et vue détaillée par URL.

Blade Chart.js Tailwind CSS

03 — Fonctionnalités

Ce que fait l'application

Un outil complet pour auditer le SEO de n'importe quel site web.

search

Métriques SEO analysées

  • Title tag — présence et longueur (30–60 chars)
  • Meta description — présence et longueur (120–160 chars)
  • Balise H1 — présence et unicité
  • Comptage H2, H3, H4
  • URL canonical
  • Meta robots (index/noindex…)
  • Schemas JSON-LD (structured data)
  • Meta keywords
http

Métriques HTTP

  • Code de statut HTTP (200, 301, 404, 500…)
  • Temps de réponse (ms)
  • Taille de la réponse (octets)
  • Type de contenu (Content-Type)
  • Détection des redirections et destination
  • Détection du cache (X-Cache, CF-Cache-Status)
  • Pays détecté via la structure de l'URL
  • Source (crawl direct ou sitemap)
table_chart

Exemple de rapport — Vue URL

URLStatut HTTPSEO StatusProblè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

L'application en action

Découvrez les principales fonctionnalités de CrawlService à travers ces démonstrations enregistrées.

01

Fonctionnalité principale

Lancement d'un Crawl

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.

02

Interface

Dark Theme

Le dashboard dispose d'un thème sombre intégral, adapté aux longues sessions de travail et aux préférences utilisateur.

03

Analyse

Filtre par Erreurs

Isolez rapidement les URLs problématiques grâce au filtre d'erreurs — warnings et errors SEO mis en évidence en un clic.

04

Filtres

Filtre par Langue

Filtrez les résultats par langue ou par pays détecté dans la structure des URLs — utile pour les sites multilingues.

05

Détail

Détail d'une URL

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.

06

Filtres

Filtre par Statut HTTP

Filtrez les URLs par code de statut HTTP — identifiez rapidement les redirections 301, les erreurs 404 ou les pages en 500.

07

Dashboard

Filtres avec les Cartes

Les cartes de synthèse du dashboard sont cliquables — un clic sur une carte applique directement le filtre correspondant.

05 — Stack Technique

Technologies utilisées

Un stack moderne centré sur PHP/Laravel avec Tailwind pour le front.

🐘
PHP 8.4
Backend · Typage strict
🎸
Laravel
Framework MVC · Blade · Eloquent
🗄️
MySQL
Base de données relationnelle
🎨
Tailwind CSS
UI · Dark mode · Responsive
📊
Chart.js
Graphiques du dashboard
⚙️
Laravel Queue
Jobs asynchrones · Workers
🔍
Symfony DomCrawler
Parsing HTML · XPath
🐙
Git / GitHub
Versioning · Collaboration

06 — Compétences acquises

Ce que j'ai appris

Un stage qui m'a permis de monter en compétence sur de nombreux aspects du développement web professionnel.

Développement d'un moteur de crawl HTTP asynchrone avec Laravel Queue
Parsing HTML avancé avec Symfony DomCrawler et XPath
Conception et modélisation d'une base de données relationnelle MySQL
Architecture en services découplés (Extractor, Analyzer, Persistence…)
Travail en binôme et gestion de projet avec Git / GitHub
Compréhension approfondie des enjeux SEO techniques
Développement d'interfaces avec Tailwind CSS et Blade en dark mode
Intégration de Chart.js pour la visualisation de données SEO

07 — Documentation

Documentation & Ressources

Retrouvez ici les documents techniques produits dans le cadre du projet CrawlService.

Contact

Me contacter

mail E-Mail contact@example.com
call Téléphone *********
account_box GitHub github.com/Roxas004