PageSpeed
PageSpeed
Lance un audit officiel Google PageSpeed Insights sur le site de chaque prospect. La sortie classe la liste par qualité de site, expose les performeurs les plus faibles, et fait remonter un angle de pitch concret : un site lent ou cassé est une amélioration à proposer.
Le module ne crawle jamais un site directement. La mesure est déléguée à Google, ce qui garde le signal comparable d'un prospect à l'autre.
Entrées
Le job accepte un tableau de dictionnaires POI. Seul site_web est réellement utilisé ; tout autre champ est repassé tel quel à la sortie.
| Champ | Type | Requis | Notes |
|---|---|---|---|
items |
list[dict] |
oui | 1 à 10 000 POI. Les lignes sans site_web sont conservées et marquées. |
source_job_id |
string |
non | UUID du job amont (typiquement un scrap Google Maps). |
{
"nom": "Studio Atlas",
"adresse": "12 rue de Rivoli, 75001 Paris",
"site_web": "https://studio-atlas.fr"
}
Sorties
Une ligne par POI d'entrée. Les cellules vides signalent que PSI n'a pas pu scorer l'URL (voir Erreurs).
| Colonne | Type | Description |
|---|---|---|
perf_score_mobile |
int 0-100 | Score de performance Lighthouse, profil mobile. |
perf_score_desktop |
int 0-100 | Score de performance Lighthouse, profil desktop. |
lcp_ms |
int | Largest Contentful Paint en millisecondes. Bon < 2500. |
cls |
float | Cumulative Layout Shift. Bon < 0.1. |
accessibility_score |
int 0-100 | Score d'accessibilité Lighthouse. |
seo_score |
int 0-100 | Score SEO Lighthouse. |
suggestions[] |
list[string] | Audits Lighthouse en échec, prêts à citer dans un message d'outreach. |
L'export CSV porte aussi best_practices_score, fcp_ms, tbt_ms et inp_ms pour exhaustivité.
Cycle de vie
Cycle de vie standard des jobs outsend ; voir /docs/fr/concepts/jobs-lifecycle. La progression est reportée en sites ; le compteur de résultats en audits.
Pipeline
needs: site_web
produces: perf_score, accessibility_score, seo_score,
best_practices_score, lcp, cls, inp
PageSpeed est un module check : il consomme une liste et retourne la même liste enrichie. Schéma typique : partir d'un job scrap, puis lancer pagespeed sur les POI résultants.
Endpoints
Créer un job
POST /api/jobs/pagespeed
Content-Type: application/json
{
"items": [
{ "nom": "Studio Atlas", "site_web": "https://studio-atlas.fr" }
],
"source_job_id": "8b1f...-uuid"
}
Réponse : enveloppe JobPublic portant l'UUID du job, son statut et le coût EF réservé pour le suivi.
Lire un job
GET /api/jobs/{job_id}
GET /api/jobs/{job_id}/results
GET /api/jobs/{job_id}/export.csv
L'export CSV est disponible une fois le job en completed.
Limites
Voir /docs/fr/concepts/limits. L'amont est l'offre gratuite de Google PSI v5 (une URL par requête) ; les pics au-dessus du quota par clé sont reprogrammés dans le job plutôt qu'échoués.
Erreurs
| Condition | Comportement |
|---|---|
POI sans site_web |
Ligne conservée, colonnes d'audit vides, suggestions[] réduit à une entrée explicative unique. |
| URL injoignable ou réponse non-HTML | Ligne conservée, scores vides, erreur notée sur la ligne. |
| Quota PSI épuisé | Les URL touchées sont remises en file dans le job ; si le quota reste épuisé la ligne est marquée failed et le reste continue. |
| Site bloque le fetcher PSI | Ligne marquée failed avec le code d'erreur amont ; le job reste sain. |
items vide |
400 Bad Request, aucun job créé. |
PAGESPEED_API_KEY absente côté serveur |
Job créé mais bascule immédiatement en failed. |
Une ligne en échec ne bloque jamais le job : le contrat est « chaque POI d'entrée reçoit une ligne de sortie, scorée ou expliquée ».
Pour aller plus loin
techstack— détecte le CMS, l'analytics et les frameworks derrière chaque site. Un score PageSpeed faible combiné à une stack connue pour être lente donne un angle plus tranchant que chaque signal seul.ads_intelligence— vérifie si le prospect investit activement en publicité. Payer du trafic qui atterrit sur une page lente est le pitch à plus forte conviction que ce module rend possible.