Rapports SEO
L'application SEO (seo.inklura.fr) tire des données de plusieurs fournisseurs
tiers et les assemble en rapports. Comme un rapport complet prend plus de temps
qu'un rendu ne l'autorise, la génération s'exécute hors du chemin de rendu sur
le task executor à chaud ; la surface développeur se résume à un
endpoint POST et à un flux de progression SSE.
Fournisseurs de données
Les données de rapport proviennent d'appels sortants vers ces fournisseurs. Leurs clés d'API vivent dans le store bext KV par application :
| Fournisseur | Utilisé pour |
|---|---|
| DataForSEO | Résultats SERP + volume / idées de mots-clés. |
| SE Ranking | Données de classement. |
| GA4 + Google Search Console | Trafic + analytics de recherche en lecture seule. |
| Crawler / spider on-page | Audits on-page. |
Pour GA4 et Google Search Console, la danse Google OAuth se déroule dans
auth.1clic.pro — l'application SEO ne fait que consommer le token qui en
résulte, elle n'exécute pas elle-même le flux de consentement.
Le pipeline de rapport asynchrone
C'est la surface développeur principale. Générez un rapport avec :
POST /api/seo/reports
Content-Type: application/json
{ "websiteId": "<id>", "async": true }
La requête est protégée par session. Le comportement dépend de async :
async: true (par défaut)
La route écrit un job KV et le dispatch vers le task executor à chaud :
POST /__bext/sdk/tasks/run
Content-Type: application/json
X-Bext-App-Id: <seo app id>
{
"task": "seo-report",
"payload": { "jobId": "…", "websiteId": "…", "userId": "…" },
"timeout_secs": 600
}
et retourne immédiatement :
202 Accepted
{ "jobId": "<id>", "status": "pending" }
async: false
Le rapport est généré en ligne, dans le délai de rendu (~28s). N'utilisez ceci que pour des rapports assez petits pour se terminer à temps ; tout ce qui est plus lourd devrait rester asynchrone.
Suivre la progression (SSE)
Suivez un job asynchrone via Server-Sent Events :
GET /api/seo/reports/stream?jobId=<id>
La réponse est de type text/event-stream. Le handler sonde le job KV environ
toutes les 1,5s, émet des trames event: status et s'auto-termine au bout
d'environ 24s — un client EventSource se reconnecte automatiquement et
continue de suivre jusqu'à ce que le job soit terminé.
const es = new EventSource(`/api/seo/reports/stream?jobId=${jobId}`);
es.addEventListener("status", (e) => {
const job = JSON.parse(e.data);
// met à jour l'UI ; ferme quand le job signale l'achèvement
});
Le task-worker à chaud
Le travail derrière seo-report s'exécute à chaud, hors de tout délai de rendu,
sous le superviseur de tâches. L'application enregistre deux tâches :
defineTask("seo-report", async (payload) => { /* construit le rapport */ });
defineTask("seo-weekly", async (payload) => { /* rapport hebdomadaire planifié */ });
Parce qu'elles s'exécutent sur l'executor à chaud plutôt que dans le pool de
rendu, un rapport peut prendre autant de temps que son timeout_secs l'autorise.
Autres routes
L'application SEO expose d'autres routes sous /api/seo/*, dont :
/api/seo/audit
/api/seo/keywords
/api/seo/onpage
/api/seo/traffic
/api/seo/websites
/api/seo/geo
/api/seo/research
(et davantage). Le pipeline de rapport ci-dessus est celui sur lequel bâtir votre automatisation.
Voir aussi
- Tasks — le task executor à chaud qui exécute
seo-report - KV — où sont stockés l'état des jobs et les clés des fournisseurs
- Vue d'ensemble des intégrations — la carte des deux mondes