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 Exemple",
"adresse": "1 rue de l'Exemple, 00000 Exempleville",
"site_web": "https://example.com"
}
Sorties
Une ligne par ligne d'entrée, colonnes d'origine conservées. Des cellules vides signifient que l'URL n'a pas pu être notée (voir Erreurs). Le test tourne avec le profil mobile.
| Colonne | Type | Description |
|---|---|---|
tested_url, strategy, fetch_time |
string | URL testée, profil utilisé (mobile) et heure du test. |
perf_score |
int 0-100 | Score de performance Lighthouse. |
seo_score |
int 0-100 | Score SEO Lighthouse. |
a11y_score |
int 0-100 | Score d'accessibilité Lighthouse. |
best_practices_score |
int 0-100 | Score de bonnes pratiques Lighthouse. |
perf_verdict |
string | À refondre sous 50, À améliorer sous 90, OK sinon. |
lcp_ms, fcp_ms, tti_ms, tbt_ms, speed_index_ms, ttfb_lab_ms |
int | Mesures de laboratoire en millisecondes. Un bon LCP est sous 2500. |
cls |
float | Cumulative Layout Shift. Bon sous 0,1. |
crux_overall, crux_lcp_p75_ms, crux_fcp_p75_ms, crux_cls_p75, crux_inp_p75_ms |
mixte | Données terrain de vrais utilisateurs Chrome pour cette URL, quand Google a assez de trafic. L'INP n'existe qu'ici. |
origin_crux_overall, origin_crux_lcp_p75_ms |
mixte | Mêmes données terrain pour l'ensemble du site. |
top_opportunity_1, top_opportunity_2, top_opportunity_3 |
string | Les trois audits en échec au gain estimé le plus fort, prêts à citer dans un message. |
error |
string | Raison pour laquelle la ligne n'a pas pu être notée, le cas échéant. |
Le fichier porte aussi le poids de la page (total_byte_weight_kb, weight_*_kb), les gains estimés (savings_*), des indicateurs techniques (uses_*, has_*), les en-têtes HTTP et de sécurité, les cookies, le certificat TLS, les balises meta et comptages du DOM, les enregistrements DNS (MX, SPF, DMARC), une note de sécurité (mozilla_grade, mozilla_score) et la présence de robots.txt et sitemap.xml. Le registre liste accessibility_score, lcp et inp sous produces : ce sont des noms de signaux pour a11y_score, lcp_ms et crux_inp_p75_ms.
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 Exemple", "site_web": "https://example.com" }
],
"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, error vaut URL absente ou invalide. |
| 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.