Les APIs Textfocus permettent d'effectuer diverses analyses SEO et sémantiques. Cette documentation explique comment les appeler, quels sont leurs paramètres et leur utilité. Les APIs sont disponibles pour les abonnés des packs "Classic" et "Confort".
Les appels aux APIs sont limités à 30 appels par jour dans le pack Classic, et 1 appel par minute dans le pack Agency.
Chaque requête consomme un crédit sur votre compte.
Vous pouvez retrouver votre clé d'API sur votre compte.
Le paramètre optionnel force_refetch (valeur 1) est accepté par toutes les APIs sauf tf_langs et tf_robotstxt. Lorsqu'il est activé, le cache est ignoré et tous les calculs sont relancés à la volée. À utiliser avec précaution : cela augmente le temps de réponse et consomme un crédit comme un appel normal.
Ces APIs sont publiques depuis mars 2025. Nous savons à quel point il est important que les APIs soient réactives et répondent sans erreur.
Si malgré notre vigilance, vous rencontrez des codes erreurs avec les APIs, veuillez nous contacter, nous ferons au mieux pour vous répondre dans les meilleurs délais.
Le protocole MCP (Model Context Protocol) permet à un assistant IA (Claude, Copilot, Cursor...) d'appeler directement les APIs Textfocus au cours d'une conversation, sans que vous ayez à copier-coller de données.
L'IA peut ainsi lancer une analyse SEO, obtenir des volumes de recherche ou comparer des concurrents, puis interpréter les résultats et formuler des recommandations, le tout en une seule interaction.
Textfocus propose un serveur MCP hébergé accessible à l'adresse :
https://textfocus.onrender.com/ssehttps://textfocus.onrender.com/mcpDans les deux cas, votre clé API doit être transmise à chaque connexion.
Ouvrez le fichier de configuration :
%APPDATA%\Claude\claude_desktop_config.json~/Library/Application Support/Claude/claude_desktop_config.jsonAjoutez l'entrée suivante dans la section mcpServers :
{
"mcpServers": {
"textfocus": {
"type": "sse",
"url": "https://textfocus.onrender.com/sse",
"headers": {
"X-API-Key": "Votre clé d'API"
}
}
}
}
Redémarrez Claude Desktop. Les outils Textfocus (tf_seo, tf_keyword, tf_competition…) apparaissent alors dans la liste des outils disponibles (icône marteau).
Dans Paramètres → Intégrations, ajoutez un nouveau serveur MCP avec l'URL :
https://textfocus.onrender.com/mcp?key=Votre clé d'API
Les champs OAuth sont facultatifs et peuvent rester vides. Votre clé est transmise directement dans l'URL.
Dans le fichier de configuration Claude Code (~/.claude.json ou dans les paramètres du projet), ajoutez :
{
"mcpServers": {
"textfocus": {
"type": "sse",
"url": "https://textfocus.onrender.com/sse",
"headers": {
"X-API-Key": "Votre clé d'API"
}
}
}
}
Ces éditeurs supportent les serveurs MCP distants via SSE. Dans leurs paramètres MCP, renseignez :
https://textfocus.onrender.com/sseX-API-Key: Votre clé d'APIUne fois connecté, l'IA dispose des outils suivants :
tf_endpoints — Liste de tous les endpoints disponibles avec leurs paramètres et coût en créditstf_langs — Liste des langues et marchés disponiblestf_keyword — Volume, CPC et difficulté d'un mot-clétf_related — Termes sémantiquement liés à un mot-clétf_semantic — Analyse sémantique complète (vocabulaire attendu, TF-IDF)tf_seo — Analyse SEO complète d'une page webtf_geo — Score IA-Ready et analyse GEO d'une pagetf_robotstxt — Analyse du robots.txt d'un domainetf_lexical — Champ lexical d'une page webtf_position — Position d'un domaine pour un mot-clétf_competition — Analyse concurrentielle pour un mot-clétf_structured_data — Extraction et analyse des données structurées JSON-LD (Schema.org) d'une pageChaque appel d'outil consomme un crédit, comme un appel API classique.
Description : Retourne les informations du compte associé à la clé API : profil, pack, codes AppSumo, crédits restants et crédits consommés sur les 30 derniers jours.
Endpoint : https://www.textfocus.net/apis/tf_account/
Méthode : POST
Paramètres :
key (string, requis) : Clé API.Cet endpoint ne consomme pas de crédit.
result.account.name — Nom du membreresult.account.email — Adresse emailresult.account.company, address, city, zip, country — Coordonnéesresult.pack.name — Nom du pack souscritresult.pack.recurring — Type de récurrence (monthly, yearly, life, none)result.pack.apiAccess — Accès aux APIs activéresult.pack.entitiesAccess — Accès à la détection des entités nomméesresult.pack.translateAccess — Accès à la traductionresult.pack.whiteLabel — White label activé (exports PDF sans marque Textfocus)result.pack.daysArchive — Durée de conservation des archives (jours)result.pack.nbCompeteMax — Nombre maximum de concurrents analysablesresult.pack.nbSuggestMax — Nombre maximum de suggestions sémantiquesresult.pack.rateInterval / rateMax — Limites de débit API du packresult.appSumoCodes — Liste des codes AppSumo activés sur le compte (code, type)result.credits.remaining — Crédits restantsresult.credits.consumed30days — Total de crédits consommés sur les 30 derniers joursresult.credits.byType30days — Consommation par type d'API sur les 30 derniers joursDescription : Liste tous les endpoints disponibles avec leurs paramètres, leur description et leur coût en crédits.
Endpoint : https://www.textfocus.net/apis/tf_endpoints/
Méthode : POST
Paramètres :
key (string, requis) : Clé API.Cet endpoint ne consomme pas de crédit.
Description : Fournit la liste des langues disponibles. Les identifiants retournés (champ id) correspondent aux codes langue+marché utilisables directement dans le paramètre lang de toutes les autres APIs (ex : fr-CA résout vers l'id du marché canadien francophone).
Endpoint : https://www.textfocus.net/apis/tf_langs/
Méthode : POST
Paramètres :
key (string, requis) : Clé API.Description : Fournit des données sur un mot-clé donné (volume de recherche, coût par clic, etc.).
Endpoint : https://www.textfocus.net/apis/tf_keyword/
Méthode : POST
Paramètres :
key (string, requis) : Clé API.lang (string, requis) : Code langue+marché sur 5 caractères (ex : fr-FR, en-US, fr-CA) — format recommandé pour cibler un marché précis. Un code sur 2 caractères (ex : fr) est également accepté. Consultez tf_langs pour la liste complète des codes disponibles.keyword (array ou string, requis) : Liste de mots clés à analyser.force_refetch (int, optionnel) : Mettre à 1 pour ignorer le cache et forcer le recalcul.Exemple de réponse JSON :
{
"version": "1.0.3",
"params": {
"lang": "fr",
"keyword": ["agence en référencement", "agence seo"],
"key": "Votre clé d'API"
},
"result": {
"agence en référencement": {
"id": "agence en référencement",
"lang": "fr",
"cost": 13.06,
"concurrency": 6.00,
"volume": 27100,
"difficulty": 87
},
{
"id": "agence seo",
"lang": "fr",
"cost": 4.14,
"concurrency": 28.00,
"volume": 27100,
"difficulty": 87
}
},
"response": 200,
"message": "ok",
"timing": 0.020776,
"creditUsed": 1,
"method": "tf_keyword",
"credits": 294
}
Description : Fournit des termes relatifs à un mot-clé donné.
Endpoint : https://www.textfocus.net/apis/tf_related/
Méthode : POST
key (string, requis) : Clé API.lang (string, requis) : Code langue+marché sur 5 caractères (ex : fr-FR, en-US, fr-CA) — format recommandé pour cibler un marché précis. Un code sur 2 caractères (ex : fr) est également accepté. Consultez tf_langs pour la liste complète des codes disponibles.keyword (string, requis) : Mot-clé à analyser.force_refetch (int, optionnel) : Mettre à 1 pour ignorer le cache et forcer le recalcul.Exemple de réponse JSON :
{
"version": "1.0.3",
"params": {
"lang": "fr",
"keyword": "agence seo",
"key": "Votre clé d'API"
},
"result": {
"semantic": {
"0": {
"id" : "agence seo",
"keyword" : "meilleure agence seo",
"lang" : "fr",
"type" : "match",
"ngram" : "3",
"cost" : "0.00",
"concurrency" : "2",
"volume" : "22200",
"intent" : "navigational",
"difficulty" : "19"
},
"1": {
"id" : "agence seo",
"keyword" : "agence seo lyon",
"lang" : "fr",
"type" : "match",
"ngram" : "3",
"cost" : "6.11",
"concurrency" : "18",
"volume" : "1600",
"intent" : "commercial",
"difficulty" : "56"
},
// Jusqu'à 100 termes peuvent être retournés },
"response": 200,
"message": "ok",
"timing": 0.3334009999999999,
"creditUsed": 1,
"method": "tf_related",
"credits": 2947
}
Description : Effectue une analyse SEO complète d'une page web.
Endpoint : https://www.textfocus.net/apis/tf_seo/
Méthode : POST
key (string, requis) : Clé API.lang (string, requis) : Code langue+marché sur 5 caractères (ex : fr-FR, en-US, fr-CA) — format recommandé pour cibler un marché précis. Un code sur 2 caractères (ex : fr) est également accepté. Consultez tf_langs pour la liste complète des codes disponibles.keyword (string, requis) : Mot-clé cible.url (string, requis) : URL de la page à analyser.force_refetch (int, optionnel) : Mettre à 1 pour ignorer le cache et forcer le recalcul.verbose (int, optionnel, défaut : 0) : Par défaut (0), la réponse est allégée : contentBrut et footerTxt sont exclus, les mots n'apparaissant qu'une seule fois dans words sont filtrés, et listPresence.footerTxt est limité à 20 entrées. Mettre à 1 pour obtenir la réponse complète.Exemple de réponse JSON :
{
"version": "1.0.3",
"params": {
"lang": "fr",
"keyword": "agence seo",
"url": "https://beweb.fr/seo/",
"key": "Votre clé d'API"
},
"result": {
"packId": "14",
"nbCompeteMax": "50",
"url": "https://beweb.fr/seo/",
"urlDecode": "https://beweb.fr/seo/",
"nbH1": 1,
"entitiesNotSupported": false,
"typePage": "page",
"jsonLdType": "WebPage",
"firstWords": "vous cherchez [...] et une longue",
"footerTxt": "On nous demande [...]",
"host": "https://beweb.fr",
"urlWords": " beweb seo ",
"contentBrut": "Skip to content . AGENCE SEO . Pilotez votre référencement naturel. [...].",
"nbLinksOut": 16,
"nbLinksOutExt": 5,
"canon": "https://beweb.fr/seo/",
"title": "Agence SEO France - Référencement Naturel Google | BEWEB",
"description": "Besoin d'une agence SEO pour améliorer votre visibilité en ligne ? [...].",
"robots": "index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1",
"h1": "AGENCE SEO Pilotez votre référencement naturel",
"h2": [
"Les services de notre agence SEO Nos solutions pour développer votre référencement naturel",
"Besoin d'une agence SEO ? Contactez nos consultants dès maintenant"
],
"h3": [
"Audit SEO Trouver les freins au référencement",
"Recherche de mots clés Les bons mots pour être visible",
"Accompagnement SEO Etre accompagné sur la durée",
"Rédaction des balises Optimisation des balises SEO",
"Refonte SEO Guide / cahier des charges SEO",
"SEO Rennes Référencement en région rennaise",
"Voici quelques avis de nos clients",
"Ils font confiance à nos experts SEO",
"Profitez de l'expérience d'une agence SEO Pour augmenter votre trafic naturel et vos conversions",
"Référencement naturel de qualité Avec une agence proche de vous",
"Améliorez la visibilité de vos sites dès maintenant !",
"Nos dernières publications sur le SEO",
"Stratégie SEO : les 14 méthodes de travail que nous utilisons le plus en 2024",
"Stratégie SEO : les 14 méthodes de travail que nous utilisons le plus en 2024",
"Utiliser Looker Studio pour analyser les performances de vos pages",
"Utiliser Looker Studio pour analyser les performances de vos pages",
"Quand faire un audit seo ?",
"Quand faire un audit seo ?",
"Pourquoi utiliser les services de notre agence SEO ?"
],
"hn": [
{
"level": "1",
"tag": "h1",
"hn": " AGENCE SEO Pilotez votre référencement naturel"
},
{
"level": "2",
"tag": "h2",
"hn": " Les services de notre agence SEO Nos solutions pour développer votre référencement naturel"
},
{
"level": "3",
"tag": "h3",
"hn": "Audit SEOTrouver les freins au référencement"
},
{
"level": "3",
"tag": "h3",
"hn": "Recherche de mots clés Les bons mots pour être visible"
},
{
"level": "3",
"tag": "h3",
"hn": "Accompagnement SEO Etre accompagné sur la durée"
},
{
"level": "3",
"tag": "h3",
"hn": "Rédaction des balises Optimisation des balises SEO"
},
{
"level": "3",
"tag": "h3",
"hn": "Refonte SEO Guide / cahier des charges SEO"
},
{
"level": "3",
"tag": "h3",
"hn": "Référencement en région rennaise"
},
{
"level": "3",
"tag": "h3",
"hn": " Voici quelques avis de nos clients "
},
{
"level": "3",
"tag": "h3",
"hn": " Ils font confiance à nos experts SEO "
},
{
"level": "3",
"tag": "h3",
"hn": " Profitez de l'expérience d'une agence SEO Pour augmenter votre trafic naturel et vos conversions"
},
{
"level": "3",
"tag": "h3",
"hn": " Référencement naturel de qualité Avec une agence proche de vous"
},
{
"level": "3",
"tag": "h3",
"hn": " Améliorez la visibilité de vos sites dès maintenant ! "
},
{
"level": "4",
"tag": "h4",
"hn": "Privacy Overview"
}
],
"anchors": [
{
"anchor": "consultant seo",
"link": "https://beweb.fr/",
"rel": "",
"title": "Consultant SEO"
},
{
"anchor": "services seo",
"link": "https://beweb.fr/seo/",
"rel": "",
"title": "Services SEO"
},
{
"anchor": "services web",
"link": "https://beweb.fr/web/",
"rel": "",
"title": "Services Web"
},
{
"anchor": "plan du site",
"link": "https://beweb.fr/plan-du-site/",
"rel": "",
"title": ""
},
{
"anchor": "contactez-nous",
"link": "/contact/",
"rel": "",
"title": ""
},
{
"anchor": "",
"link": "#li-page-top",
"rel": "",
"title": ""
},
{
"anchor": "",
"link": "https://www.cookieyes.com/",
"rel": "",
"title": ""
}
],
"images": {
"https://beweb.fr/wp-content/uploads/2020/09/beweb-logo-60.png": {
"alt": "Consultant SEO : Expert référencement de site internet à Rennes",
"title": "",
"width": "",
"height": ""
},
"https://beweb.fr/wp-content/uploads/2020/11/3249202edit.png": {
"alt": "agence seo",
"title": "",
"width": "900",
"height": "574"
},
"https://beweb.fr/wp-content/uploads/2020/11/ubiqus-logo.png": {
"alt": "ubiqus logo",
"title": "",
"width": "261",
"height": "100"
},
"https://beweb.fr/wp-content/uploads/2020/11/idaos-logo.png": {
"alt": "idaos logo",
"title": "",
"width": "226",
"height": "100"
},
"https://beweb.fr/wp-content/uploads/2016/07/orange_obs.jpg": {
"alt": "",
"title": "",
"width": "194",
"height": "100"
},
"https://beweb.fr/wp-content/uploads/2016/07/lylo_2015.png": {
"alt": "",
"title": "",
"width": "121",
"height": "100"
},
"https://beweb.fr/wp-content/uploads/2016/07/Creative-Ingenierie-logo_165X165.jpg": {
"alt": "",
"title": "",
"width": "206",
"height": "100"
},
"https://beweb.fr/wp-content/uploads/2020/11/augmentez-votre-trafic-naturel.png": {
"alt": "Augmentez votre trafic naturel",
"title": "",
"width": "801",
"height": "555"
},
"https://beweb.fr/wp-content/uploads/2020/11/3339159small.png": {
"alt": "3339159small",
"title": "",
"width": "506",
"height": "555"
},
"https://beweb.fr/wp-content/uploads/2023/01/strategie-seo-300x300.jpg": {
"alt": "strategie seo",
"title": "",
"width": "",
"height": ""
},
"https://beweb.fr/wp-content/uploads/2020/11/3497813-300x300.jpg": {
"alt": "Utiliser Google Data Studio pour analyser les performances de vos pages",
"title": "",
"width": "",
"height": ""
},
"https://beweb.fr/wp-content/uploads/2020/08/seo-793030_1280-300x199.jpg": {
"alt": "Quand faire un audit seo",
"title": "",
"width": "",
"height": ""
},
"https://beweb.fr/wp-content/plugins/cookie-law-info/legacy/public/images/logo-cookieyes.svg": {
"alt": "CookieYes Logo",
"title": "",
"width": "",
"height": ""
}
},
"strong": [
"agence en référencement",
"stratégie de référencement",
"expertise référencement naturel",
"bons mots clés",
"bonnes pratiques de Google",
"mobile first",
"Sites internet gérés, créés ou optimisés",
"Sessions mensuelles cumulées sur nos sites",
"Mots clés surveillés",
"optimisation pour les moteurs de recherche",
"stratégie de référencement sur mesure",
"expérience",
"savoir-faire",
"équipe passionnée",
"stratégies innovantes",
"chaque entreprise est unique",
"simple et accessible",
"sur le long terme",
"durables et évolutives,",
"résultats qui durent"
],
"em": "Jean-Joseph Lattuada, Ouest-France",
"nbWords": 762,
"nbWordsAll": 1414,
"ratio": 6.91,
"pertinence": 54,
"nbWordsDistinct": 427,
"beginWith": {
"référencement": 19,
"agence": 12,
"seo": 8,
"naturel": 5,
"solutions": 5,
"cookies": 5,
"beweb": 5,
"web": 5,
"visibilité": 5,
"optimisation": 4,
"analyse": 4,
"google": 4
},
"langs": {
"country": "FR",
"langOfPage": "fr",
"headers-content-type": "text/html",
"meta-charset": "utf-8",
"headers-content-language": "non renseigné",
"meta-content-language": "non renseigné",
"meta-name-language": "non renseigné",
"html-lang": "fr-FR"
},
"nbPhrases": 49,
"nbPhrasesAll": 111,
"entities": [
{
"id": 0,
"type": [
"Number"
],
"matchingTokens": [
2
],
"entityId": "78",
"confidenceScore": 0.5,
"wikiLink": "",
"matchedText": "78",
"relevanceScore": 0,
"entityEnglishId": "",
"startingPos": 5,
"endingPos": 7,
"unit": "Number"
},
{
"id": 1,
"type": [
"Number"
],
"matchingTokens": [
1
],
"entityId": "6",
"confidenceScore": 0.5,
"wikiLink": "",
"matchedText": "06",
"relevanceScore": 0,
"entityEnglishId": "",
"startingPos": 2,
"endingPos": 4,
"unit": "Number"
},
{
"id": 2,
"matchingTokens": [
792
],
"entityId": "Algorithme",
"freebaseTypes": [
"/award/award_discipline",
"/education/field_of_study",
"/symbols/namesake",
"/book/book_subject"
],
"confidenceScore": 5.629,
"wikiLink": "http://fr.wikipedia.org/wiki/Algorithme",
"matchedText": "algorithmes",
"freebaseId": "/m/0jpv",
"relevanceScore": 0.2498,
"entityEnglishId": "Algorithm",
"startingPos": 5522,
"endingPos": 5533,
"wikidataId": "Q8366"
},
{
"id": 3,
"matchingTokens": [
808
],
"entityId": "Privacy",
"freebaseTypes": [
"/media_common/quotation_subject",
"/film/film_subject",
"/law/legal_subject",
"/book/book_subject"
],
"confidenceScore": 5.349,
"wikiLink": "http://en.wikipedia.org/wiki/Privacy",
"matchedText": "privacy",
"freebaseId": "/m/06804",
"relevanceScore": 0,
"entityEnglishId": "Privacy",
"startingPos": 5633,
"endingPos": 5640,
"wikidataId": "Q188728"
},
{
"id": 4,
"matchingTokens": [
812
],
"entityId": "Website",
"freebaseTypes": [
"/book/book_subject",
"/business/industry",
"/award/award_category",
"/dataworld/information_source",
"/fictional_universe/fictional_organization_type",
"/organization/non_profit_organization",
"/location/location",
"/internet/website_category",
"/award/award_discipline",
"/organization/contact_category",
"/business/business_location",
"/education/school_category",
"/organization/role",
"/business/employer",
"/organization/organization_sector"
],
"confidenceScore": 10.45,
"wikiLink": "http://en.wikipedia.org/wiki/Website",
"matchedText": "website",
"freebaseId": "/m/085n4",
"relevanceScore": 0,
"entityEnglishId": "Website",
"startingPos": 5656,
"endingPos": 5663,
"wikidataId": "Q35127"
},
{
"id": 5,
"matchingTokens": [
814
],
"entityId": "Cookie (informatique)",
"freebaseTypes": [
"/book/book_subject"
],
"confidenceScore": 3.079,
"wikiLink": "http://fr.wikipedia.org/wiki/Cookie_(informatique)",
"matchedText": "cookies",
"freebaseId": "/m/0d18sk",
"relevanceScore": 0.3457,
"entityEnglishId": "HTTP cookie",
"startingPos": 5669,
"endingPos": 5676,
"wikidataId": "Q178995"
},
{
"id": 6,
"matchingTokens": [
892,
893
],
"entityId": "Option de retrait dans l'Union européenne",
"confidenceScore": 1.016,
"wikiLink": "http://fr.wikipedia.org/wiki/Option_de_retrait_dans_l'Union_européenne",
"matchedText": "opt out",
"freebaseId": "/m/03cfnlw",
"relevanceScore": 0.1998,
"entityEnglishId": "Opt-outs in the European Union",
"startingPos": 6098,
"endingPos": 6105,
"wikidataId": "Q1349687"
},
{
"id": 7,
"matchingTokens": [
899,
900
],
"entityId": "Opt-out (marketing)",
"confidenceScore": 1.776,
"wikiLink": "http://fr.wikipedia.org/wiki/Opt-out_(marketing)",
"matchedText": "opting out",
"freebaseId": "",
"relevanceScore": 0.06177,
"entityEnglishId": "Opt-out",
"startingPos": 6128,
"endingPos": 6138,
"wikidataId": "Q1368455"
},
{
"id": 8,
"matchingTokens": [
907
],
"entityId": "Affect",
"confidenceScore": 0.9559,
"wikiLink": "http://fr.wikipedia.org/wiki/Affect",
"matchedText": "affect",
"freebaseId": "/m/09f7n8",
"relevanceScore": 0.1276,
"entityEnglishId": "Affect (psychology)",
"startingPos": 6168,
"endingPos": 6174,
"wikidataId": "Q159904",
"wikidataTypes": [
"Q96634632/psychology term",
"Q12812139/technical term"
]
},
{
"id": 9,
"matchingTokens": [
928
],
"entityId": "Analytics",
"freebaseTypes": [
"/organization/organization_sector",
"/business/competitive_space",
"/computer/software_genre",
"/internet/website_category",
"/book/book_subject",
"/business/industry",
"/media_common/quotation_subject"
],
"confidenceScore": 2.001,
"wikiLink": "http://en.wikipedia.org/wiki/Analytics",
"matchedText": "analytics",
"freebaseId": "/m/02gcn9",
"relevanceScore": 0,
"entityEnglishId": "Analytics",
"startingPos": 6296,
"endingPos": 6305,
"wikidataId": "Q485396",
"wikidataTypes": [
"Q105948247/knowledge system",
"Q1047113/specialty",
"Q2198779/unit",
"Q4671286/academic major",
"Q26256810/matter",
"Q11953984/linguistic unit",
"Q11862829/academic discipline",
"Q110403031/knowledge type",
"Q115786086/linguistic form",
"Q115372263/word or phrase",
"Q1128340/subject heading"
]
}
],
"opengraph": {
"og:locale": "fr_FR",
"og:type": "article",
"og:title": "Agence SEO France - Référencement Naturel Google | BEWEB",
"og:description": "Besoin d",
"og:url": "https://beweb.fr/seo/",
"og:site_name": "Consultant SEO : Expert référencement de site internet à Rennes"
},
"twitter": [],
"robotsTxtInfo": {
"code": 200,
"response": {},
"content": "User-agent: *\r\nDisallow:\r\n\r\n#test o2"
},
"nbImg": 13,
"nbImgNoAlt": 3,
"firstPerson": {
"notre": 10,
"nos": 13,
"nous": 31,
"mes": 1,
"me": 1,
"je": 2,
"ma": 1
},
"mykeyword": "",
"verif_presence": 1,
"words": {
"agence": 18,
"référencement": 27,
"naturel": 9,
"référencement naturel": 5,
"google": 9,
"beweb": 6,
"france": 1,
"besoin": 6,
"solutions": 6,
"accompagnement": 5,
"rédaction": 4,
"améliorer": 5,
"visibilité": 7,
"mesure": 3,
"optimisation": 7,
"audit": 7,
"bonne": 3,
"développer": 2,
"optimisé": 2,
"cherchez": 2,
"croissance": 2,
"saura": 1,
"proposons": 2,
"contact": 1,
"contactez": 1,
"rigueur": 1,
"choisir": 1,
"sérieux": 1,
"confiez": 1,
"large": 1,
"laissons": 1,
"proposé": 1,
"panel": 1,
"adaptées": 1,
"temps": 1,
"outils": 1,
"tracking": 1,
"paramétrage": 1,
"longue": 1,
"manager": 1,
"contenu": 2,
"client": 8,
"stratégie": 8,
"technique": 6,
"recherche": 6,
"analyse": 6,
"experience": 6,
"cookies": 6,
"balises": 5,
"travail": 5,
"objectif": 4,
"sites": 4,
"place": 4,
"these": 4,
"performance": 4,
"résultats": 4,
"website": 4,
"comprendre": 4,
"aider": 4
},
"optimise": {
"agence": 51,
"référencement": 50,
"naturel": 39,
"google": 28,
"beweb": 28,
"france": 23,
"besoin": 12,
"solutions": 11,
"audit": 7,
"visibilité": 7
},
"wordsOptimiseFor": {
"agence": 51,
"référencement": 50,
"naturel": 39,
"google": 28,
"beweb": 28,
"france": 23,
"besoin": 12,
"solutions": 11,
"audit": 7,
"visibilité": 7,
"améliorer": 7,
"mesure": 7,
"rédaction": 7,
"optimisation": 7,
"accompagnement": 7
},
"groupOptimiseFor": {
"agence": 51,
"référencement": 50,
"naturel": 39,
"google": 28,
"beweb": 28,
"france": 23,
"besoin": 12,
"solutions": 11,
"audit": 7,
"visibilité": 7,
"améliorer": 7,
"mesure": 7,
"rédaction": 7,
"optimisation": 7,
"accompagnement": 7
},
"lexies": {
"proposons": {
"4": "proposition",
"22": "viser",
"24": "mesure",
"26": "objectif",
"33": "agence",
"35": "contenu",
"43": "sites",
"47": "services",
"53": "concurrence",
"83": "option",
"164": "projet",
"197": "atteindre",
"201": "client",
"211": "découvrir",
"214": "devis",
"228": "gratuit",
"277": "accompagnement"
},
"référencement": [
"recherche",
"optimisation",
"visibilité",
"contenu",
"internet",
"visible",
"complexe",
"optimisé"
],
"solutions": [
"optimisation",
"analyse",
"efficace",
"simple",
"optimiser",
"amélioration",
"performance",
"référencement",
"stratégie",
"processus",
"adaptées"
],
"agence": {
"14": "entreprise",
"16": "client",
"32": "objectif",
"37": "secteur"
},
"naturel": {
"38": "simple",
"126": "migration",
"187": "recherche",
"195": "force"
},
"besoin": [
"amélioration",
"objectif",
"qualité",
"utile",
"entreprise",
"client",
"disponible",
"projet",
"bonne",
"adaptées"
],
"développer": {
"0": "croissance",
"1": "secteur",
"2": "trafic",
"3": "processus",
"4": "entreprise",
"6": "améliorer"
},
"mesure": [
"temps",
"point",
"secteur",
"stade",
"ligne",
"force",
"commun",
"durée",
"travail",
"processus",
"terme",
"nouveau",
"ensemble",
"photographe",
"studio",
"performance",
"ordinaire",
"longue"
],
"outils": {
"8": "analyse",
"75": "optimisation",
"77": "ergonomie",
"98": "guide",
"111": "simple"
},
"confiez": {
"7": "laisser",
"8": "confiance",
"24": "découvrir",
"34": "choisir",
"99": "enregistrer"
},
"rédaction": {
"13": "projet",
"14": "quotidien",
"17": "cahier"
},
"contact": {
"11": "direct"
},
"contactez": {
"20": "aider",
"54": "découvrir",
"118": "proposer",
"126": "rendre",
"127": "répondre",
"134": "savoir"
},
"sérieux": {
"41": "confiance",
"55": "gratuit"
},
"saura": {
"51": "montre",
"59": "commun",
"64": "découvrir",
"167": "disponibilité",
"193": "force",
"272": "point",
"279": "processus"
},
"laissons": {
"50": "cours",
"69": "mettre",
"88": "rendre",
"97": "découvrir",
"114": "maîtriser",
"188": "place",
"265": "aimons",
"271": "appliquer"
}
},
"listLexies": {
"agence": {
"ponderation": 51,
"color": "264653"
},
"référencement": {
"ponderation": 74,
"color": "287271"
},
"naturel": {
"ponderation": 39,
"color": "2A9D8F"
},
"besoin": {
"ponderation": 23,
"color": "8AB17D"
},
"solutions": {
"ponderation": 73,
"color": "E9C46A"
},
"mesure": {
"ponderation": 17,
"color": "EFB366"
},
"rédaction": {
"ponderation": 7,
"color": "F4A261"
},
"développer": {
"ponderation": 18,
"color": "EE8959"
},
"contact": {
"ponderation": 5,
"color": "E76F51"
},
"contactez": {
"ponderation": 5,
"color": "E97C61"
},
"proposons": {
"ponderation": 75,
"color": "f45b5b"
},
"sérieux": {
"ponderation": 5,
"color": "e4d354"
},
"confiez": {
"ponderation": 10,
"color": "413775"
},
"saura": {
"ponderation": 5,
"color": "e91e63"
},
"laissons": {
"ponderation": 5,
"color": "9c27b0"
},
"outils": {
"ponderation": 12,
"color": "90ed7d"
}
},
"lexiesOptimiseFor": {
"proposons": 75,
"référencement": 74,
"solutions": 73,
"agence": 51,
"naturel": 39,
"besoin": 23,
"développer": 18,
"mesure": 17,
"outils": 12
},
"listPresence": {
"title": {
"référencement naturel": 1,
"référencement": 1,
"agence": 1,
"google": 1,
"naturel": 1,
"beweb": 1,
"france": 1
},
"h1": {
"référencement naturel": 1,
"référencement": 1,
"agence": 1,
"naturel": 1
},
"h2": {
"référencement naturel": 1,
"référencement": 1,
"agence": 1,
"naturel": 1,
"solutions": 1,
"services": 1,
"développer": 1,
"besoin": 1,
"consultants": 1,
"contact": 1,
"contactez": 1
},
"strong": {
"référencement naturel": 1,
"référencement": 1,
"agence": 1,
"stratégie": 1,
"naturel": 1,
"google": 1,
"pratiques": 1,
"bonne": 1,
"mobile": 1,
"first": 1
},
"description": {
"agence": 1,
"stratégie": 1,
"visibilité": 1,
"besoin": 1,
"améliorer": 1,
"mesure": 1,
"ligne": 1
},
"h3": {
"référencement": 1,
"audit": 1,
"trouver": 1,
"freins": 1,
"recherche": 1,
"visible": 1,
"accompagnement": 1,
"accompagné": 1,
"durée": 1,
"optimisation": 1,
"balises": 1,
"rédaction": 1,
"charges": 1,
"refonte": 1,
"cahier": 1,
"guide": 1,
"rennes": 1,
"région": 1,
"rennaise": 1
},
"host": {
"beweb": 1
},
"url": {
"beweb": 1
},
"firstWords": {
"référencement": 1,
"agence": 1,
"google": 1,
"visibilité": 1,
"audit": 1,
"optimisation": 1,
"besoin": 1,
"beweb": 1,
"solutions": 1,
"accompagnement": 1,
"améliorer": 1,
"place": 1,
"rédaction": 1,
"bonne": 1,
"mesure": 1,
"proposer": 1,
"concrètes": 1,
"trafic": 1,
"internet": 1,
"cherchez": 1,
"optimisé": 1,
"contenu": 1,
"hasard": 1,
"proposons": 1,
"croissance": 1,
"rigueur": 1,
"choisir": 1,
"sérieux": 1,
"confiez": 1,
"saura": 1,
"large": 1,
"laissons": 1,
"panel": 1,
"adaptées": 1,
"temps": 1,
"outils": 1,
"tracking": 1,
"paramétrage": 1,
"manager": 1,
"proposé": 1,
"longue": 1
},
"footerTxt": {
"agence": 1,
"besoin": 1,
"beweb": 1,
"experts": 1,
"répondre": 1,
"rennes": 1,
"christophe": 1,
"consultants": 1,
"services": 1,
"contact": 1,
"contactez": 1,
"répond": 1
},
"em": {
"ouest": 1,
"france": 1,
"lattuada": 1,
"joseph": 1
}
},
"scoreSeo": 96.5,
"hnInFooter": []
},
"response": 200,
"message": "ok",
"timing": 0.3334009999999999,
"creditUsed": 1,
"method": "tf_related",
"credits": 2947
}
Description : Fournit une analyse sémantique et propose du vocabulaire sémantique.
Endpoint : https://www.textfocus.net/apis/tf_semantic/
Méthode : POST
key (string, requis) : Clé API.lang (string, requis) : Code langue+marché sur 5 caractères (ex : fr-FR, en-US, fr-CA) — format recommandé pour cibler un marché précis. Un code sur 2 caractères (ex : fr) est également accepté. Consultez tf_langs pour la liste complète des codes disponibles.keyword (string, requis) : Mot-clé à analyser.force_refetch (int, optionnel) : Mettre à 1 pour ignorer le cache et forcer le recalcul.callback (string, optionnel) : URL de callback pour récupérer la réponse asynchrone. En effet, l'analyse sémantique peut prendre jusqu'à 30 secondes, il peut donc être utile de gérer sa réponse via un callback. Exemple de réponse JSON :
{
"version": "1.0.3",
"params": {
"lang": "fr",
"keyword": "mini serre",
"key": "Votre clé d'API"
},
"result": {
"nbCompete": 34,
"nbFound": 119,
"nbWordsContentMoy": 904.6470588235294,
"nbWordsTitleMoy": 6.0588235294117645,
"semantic": {
"0": {
"id": "mini serre",
"keyword": "semis",
"kei": "100.00",
"ngram": "1",
"used": "82.35",
"occ": "105",
"omin": "1",
"omax": "36",
"omoy": "7.5",
"osd": "8.1",
"nbwmoy": "555",
"intitle": "14.71",
"inhn": "26.47",
"frequency": "22.85",
"tfidf": "0.0613",
"context": "a:3:{i:0;s:16:\"mini serre semis\";i:1;s:21:\"fleurs légumes semis\";i:2;s:16:\"serre semis pots\";}"
},
"1": {
"id": "mini serre",
"keyword": "plantes",
"kei": "99.11",
"ngram": "1",
"used": "73.53",
"occ": "97",
"omin": "1",
"omax": "44",
"omoy": "7.8",
"osd": "11.1",
"nbwmoy": "606",
"intitle": "0.00",
"inhn": "14.71",
"frequency": "16.74",
"tfidf": "0.0573",
"context": "a:3:{i:0;s:23:\"plantes fleurs légumes\";i:1;s:23:\"serre hivernage plantes\";i:2;s:24:\"hivernage plantes fleurs\";}"
},
"2": {
"id": "mini serre",
"keyword": "jardin",
"kei": "98.01",
"ngram": "1",
"used": "79.41",
"occ": "140",
"omin": "1",
"omax": "54",
"omoy": "12.0",
"osd": "11.9",
"nbwmoy": "605",
"intitle": "20.59",
"inhn": "38.24",
"frequency": "30.33",
"tfidf": "0.0694",
"context": "a:3:{i:0;s:17:\"mini serre jardin\";i:1;s:19:\"petite serre jardin\";i:2;s:26:\"serre jardin polycarbonate\";}"
},
"3": {
"id": "mini serre",
"keyword": "culture",
"kei": "95.93",
"ngram": "1",
"used": "76.47",
"occ": 83,
"omin": "1",
"omax": "23",
"omoy": "5.5",
"osd": "5.2",
"nbwmoy": "589",
"intitle": "14.71",
"inhn": "29.41",
"frequency": "19.50",
"tfidf": "0.0492",
"context": "a:3:{i:0;s:18:\"mini serre culture\";i:1;s:23:\"serre culture plastique\";i:2;s:13:\"serre culture\";}"
},
"4": {
"id": "mini serre",
"keyword": "balcon",
"kei": "77.62",
"ngram": "1",
"used": "47.06",
"occ": "24",
"omin": "1",
"omax": "6",
"omoy": "2.6",
"osd": "1.6",
"nbwmoy": "595",
"intitle": "0.00",
"inhn": "8.82",
"frequency": "4.29",
"tfidf": "0.0324",
"context": "a:3:{i:0;s:15:\"balcon terrasse\";i:1;s:13:\"serres balcon\";i:2;s:12:\"serre balcon\";}"
},
// Jusqu'à 100 termes peuvent être retournés
}
},
"response": 200,
"message": "ok",
"timing": 0.020776,
"creditUsed": 1,
"method": "tf_keyword",
"credits": 2948
}
Description : Analyse le fichier robots.txt d'un domaine : présence du sitemap XML, agents IA bloqués, Content Signals.
Endpoint : https://www.textfocus.net/apis/tf_robotstxt/
Méthode : POST
key (string, requis) : Clé API.url (string, requis) : URL de la page ou du domaine à analyser.Exemple de réponse JSON :
{
"version": "1.0.4",
"params": {
"url": "https://beweb.fr/seo/",
"key": "Votre clé d'API"
},
"result": {
"score": 75,
"issues": [
"Aucun Content Signal détecté dans le robots.txt"
],
"details": {
"sitemaps": [
"https://beweb.fr/sitemap.xml"
],
"blocked_bots": [],
"content_signals": {}
}
},
"response": 200,
"message": "ok",
"timing": 0.312,
"creditUsed": 1,
"method": "tf_robotstxt",
"credits": 293
}
result.score : Score de 0 à 100 évaluant l'accessibilité du site pour les agents IA.result.issues : Liste des problèmes détectés (sitemap absent, agents IA bloqués, Content Signals manquants, etc.).result.details.sitemaps : URLs des sitemaps déclarés dans le robots.txt.result.details.blocked_bots : Liste des agents IA bloqués (GPTBot, Claude-Web, PerplexityBot, etc.).result.details.content_signals : Directives Content Signal détectées (ai-train, search, ai-input), cf. contentsignals.org.Description : Effectue une analyse complète d'optimisation GEO (Generative Engine Optimization) d'une page web : structure des titres, données structurées, lisibilité, cohérence sémantique, performances, accessibilité pour les agents IA, etc. Retourne un score global IA-Ready et des scores par axe.
Endpoint : https://www.textfocus.net/apis/tf_geo/
Méthode : POST
key (string, requis) : Clé API.url (string, requis) : URL de la page à analyser.force_refetch (int, optionnel) : Mettre à 1 pour ignorer le cache et forcer le recalcul.Exemple de réponse JSON (condensé) :
{
"version": "1.0.4",
"params": {
"url": "https://beweb.fr/seo/",
"key": "Votre clé d'API"
},
"result": {
"ia_ready_score": 68.4,
"geo_commentary": {
"comment": "Cette page présente une optimisation correcte pour les IA, mais plusieurs points méritent attention.",
"priority_text": "Les principaux axes d'amélioration sont la table des matières et les données structurées (Schema.org)."
},
"all_scores": {
"structure_score": 80,
"structured_data_score": 40,
"segmentation_markup_score": 75,
"readability_score": 70,
"semantic_coherence_score": 65,
"toc_score": 30,
"concise_answer_score": 60,
"images_score": 55,
"loading_score": 85,
"accessibility_score": 90,
"robots_txt_score": 75
},
"structure_and_accessibility": {
"structure": {
"analysis": {
"score": 80,
"issues": [],
"details": {
"nb_h1": 1,
"nb_h2": 2,
"h1_matches_topic": true
}
}
},
"structured_data": {
"analysis": {
"score": 40,
"issues": ["Aucun type Schema.org pertinent détecté (Article, FAQ, HowTo…)"],
"types": ["WebPage"]
}
},
"segmentation_markup": {
"analysis": {
"score": 75,
"issues": []
}
}
},
"content_clarity": {
"readability": {
"analysis": {
"score": 70,
"issues": [],
"details": {
"flesch_kincaid": 33.7,
"avg_sentence_length": 18.4
}
}
},
"concise_answer": {
"analysis": {
"score": 60,
"issues": ["Aucune réponse concise détectée en début de page"]
}
},
"semantic_coherence": {
"analysis": {
"score": 65,
"issues": [],
"details": {
"title_to_content": 0.82,
"description_to_content": 0.74
}
}
}
},
"seo_ia_optimization": {
"toc": {
"analysis": {
"score": 30,
"issues": ["Aucune table des matières cliquable détectée"]
}
}
},
"multimodality": {
"alt_tags": {
"analysis": {
"score": 55,
"issues": ["3 image(s) sans attribut alt"],
"details": {
"nb_images": 13,
"nb_missing_alt": 3
}
}
}
},
"performance": {
"fast_loading": {
"analysis": {
"score": 85,
"issues": [],
"details": {
"lcp_ms": 1276,
"ttfb_ms": 15,
"tti_ms": 199
}
}
},
"main_readability_accessibility": {
"analysis": {
"score": 90,
"issues": []
}
},
"robots_txt": {
"analysis": {
"score": 75,
"issues": ["Aucun Content Signal détecté dans le robots.txt"],
"details": {
"sitemaps": ["https://beweb.fr/sitemap.xml"],
"blocked_bots": [],
"content_signals": {}
}
}
}
},
"res": {
"url": "https://beweb.fr/seo/",
"urlDecode": "https://beweb.fr/seo/",
"title": "Agence SEO France - Référencement Naturel Google | BEWEB",
"description": "Besoin d'une agence SEO pour améliorer votre visibilité en ligne ?",
"h1": "AGENCE SEO Pilotez votre référencement naturel",
"h2": ["Les services de notre agence SEO", "Besoin d'une agence SEO ?"],
"nbWords": 762,
"host": "https://beweb.fr",
"whatIsAbout": ["référencement", "agence", "naturel", "google", "seo", "visibilité"]
},
"lang": "fr",
"country": "fr",
"resume_ia": "Cette page présente l'agence SEO Beweb, spécialisée dans le référencement naturel en France..."
},
"response": 200,
"message": "ok",
"timing": 4.21,
"creditUsed": 1,
"method": "tf_geo",
"credits": 292
}
result.ia_ready_score : Score global IA-Ready de 0 à 100, pondéré sur l'ensemble des axes.result.geo_commentary : Commentaire textuel sur le score global et les 3 principaux axes d'amélioration.result.all_scores : Scores individuels par axe (structure, données structurées, lisibilité, cohérence sémantique, table des matières, images, chargement, accessibilité, robots.txt).result.structure_and_accessibility : Module 1 — Structure des titres Hn, Schema.org, segmentation du contenu.result.content_clarity : Module 2 — Lisibilité Flesch-Kincaid, réponse concise, cohérence sémantique titre/contenu.result.seo_ia_optimization : Module 3 — Table des matières cliquable, liens internes, ton du contenu.result.multimodality : Module 4 — Balises alt des images, légendes, balisage figure/figcaption.result.performance : Module 5 — Core Web Vitals (LCP, TTI, TTFB), accessibilité SSR, analyse robots.txt.result.res : Métadonnées de la page analysée (title, description, H1, H2, nombre de mots, sujets principaux).result.resume_ia : Résumé automatique de la page généré par IA (disponible pour les packs payants).Note : Cette API effectue une analyse approfondie qui peut prendre entre 3 et 10 secondes selon la page analysée.
Description : Analyse concurrentielle pour un mot-clé donné : récupère les pages en tête des résultats Google et calcule leurs métriques SEO (score SEO, score sémantique, nombre de mots, pertinence, type de page). L'analyse est complète : les pages non encore analysées sont récupérées et calculées à la volée.
Endpoint : https://www.textfocus.net/apis/tf_competition/
Méthode : POST
Paramètres :
key (string, requis) : Clé API.lang (string, requis) : Code langue+marché sur 5 caractères (ex : fr-FR, en-US, fr-CA) — format recommandé pour cibler un marché précis. Un code sur 2 caractères (ex : fr) est également accepté. Consultez tf_langs pour la liste complète des codes disponibles.keyword (string, requis) : Mot-clé cible.force_refetch (int, optionnel) : Mettre à 1 pour ignorer le cache et forcer le recalcul de toutes les pages concurrentes.callback (string, optionnel) : URL de callback (webhook) pour recevoir la réponse de façon asynchrone. Recommandé : l'analyse peut prendre jusqu'à 2 minutes selon le nombre de pages à récupérer. Lorsque ce paramètre est fourni, la réponse immédiate confirme la mise en file d'attente (message: "callback is queued") ; le résultat complet est ensuite envoyé en POST à l'URL fournie une fois le calcul terminé.Exemple de réponse JSON :
{
"version": "1.0.4",
"params": {
"lang": "fr",
"keyword": "agence seo",
"key": "Votre clé d'API"
},
"result": {
"keyword": "agence seo",
"lang": "fr",
"nbCompete": 10,
"competitors": [
{
"url": "https://www.optimize360.fr/agence-seo/",
"position": 1,
"title": "Agence SEO - Optimize 360",
"h1": "Agence SEO Optimize 360",
"nbWords": 312,
"nbWordsAll": 687,
"pertinence": 45,
"scoreSeo": 87.5,
"scoreSemantic": 62.3,
"typePage": "page"
},
{
"url": "https://www.primelis.com/agence-seo/",
"position": 2,
"title": "Agence SEO - Primelis",
"h1": "Votre agence SEO",
"nbWords": 489,
"nbWordsAll": 1102,
"pertinence": 44,
"scoreSeo": 91.0,
"scoreSemantic": 71.8,
"typePage": "page"
}
// Jusqu'à nbCompeteMax concurrents selon votre abonnement ]
},
"response": 200,
"message": "ok",
"timing": 12.4,
"creditUsed": 1,
"method": "tf_competition",
"credits": 291
}
result.nbCompete : Nombre de concurrents analysés.result.competitors[].url : URL du concurrent.result.competitors[].position : Position dans les résultats Google.result.competitors[].title : Balise title de la page.result.competitors[].h1 : Contenu du H1.result.competitors[].nbWords : Nombre de mots significatifs (stopwords exclus).result.competitors[].nbWordsAll : Nombre total de mots bruts.result.competitors[].pertinence : Ratio mots significatifs / mots totaux en pourcentage.result.competitors[].scoreSeo : Score SEO global de 0 à 100.result.competitors[].scoreSemantic : Score sémantique par rapport au mot-clé cible (0 à 100).result.competitors[].typePage : Type de page détecté (page, article, ecommerce, etc.).Note : Cette API peut prendre entre 5 et 30 secondes selon le nombre de pages à analyser. Les pages déjà analysées récemment sont servies depuis le cache.
Description : Extrait et analyse les données structurées JSON-LD (Schema.org) d'une page web. Retourne les blocs JSON-LD bruts, les types Schema.org détectés et une analyse complète de la qualité des données structurées.
Endpoint : https://www.textfocus.net/apis/tf_structured_data/
Méthode : POST
key (string, requis) : Clé API.url (string, requis) : URL de la page à analyser.force_refetch (int, optionnel) : Mettre à 1 pour ignorer le cache et forcer le recalcul.Exemple de réponse JSON :
{
"version": "1.0.4",
"params": {
"url": "https://beweb.fr/seo/",
"key": "Votre clé d'API"
},
"result": {
"jsonLd": [
{
"@context": "https://schema.org",
"@type": "Article",
"name": "Agence SEO Paris",
"description": "Optimisation SEO pour votre site web"
}
],
"jsonLdType": ["Article"],
"analysis": {
"score": 60,
"types_found": ["Article"],
"issues": ["Missing recommended property: author"],
"recommendations": ["Add author property to Article schema"]
}
},
"response": 200,
"message": "ok",
"timing": 1.24,
"creditUsed": 1,
"method": "tf_structured_data",
"credits": 292
}
result.jsonLd : Tableau des blocs JSON-LD bruts trouvés dans la page.result.jsonLdType : Liste des types Schema.org détectés (Article, Product, FAQPage, BreadcrumbList, etc.).result.analysis.score : Score de qualité des données structurées de 0 à 100.result.analysis.types_found : Types Schema.org présents sur la page.result.analysis.issues : Liste des problèmes détectés (propriétés requises manquantes, erreurs de format, etc.).result.analysis.recommendations : Recommandations pour améliorer les données structurées.Description : Retourne l'historique des analyses SEO d'une URL précédemment analysée : score SEO, score de performance, score sémantique, score IA, nombre de mots et date de chaque enregistrement.
Endpoint : https://www.textfocus.net/apis/tf_history/
Méthode : POST
key (string, requis) : Clé API.url (string, requis) : URL dont vous souhaitez récupérer l'historique d'analyse.Exemple de réponse JSON :
{
"version": "1.0.4",
"params": {
"url": "https://beweb.fr/seo/",
"key": "Votre clé d'API"
},
"result": {
"url": "https://beweb.fr/seo/",
"keyword": "agence seo",
"session": "a1b2c3d4e5f6",
"snapshots": [
{
"date": "2024-09-01 10:15:00",
"scoreSeo": 72.5,
"scorePerf": 65.0,
"scoreSem": 58.3,
"scoreIa": 61.0,
"nbwordsall": 1240
},
{
"date": "2025-01-15 14:30:00",
"scoreSeo": 78.2,
"scorePerf": 70.1,
"scoreSem": 63.5,
"scoreIa": 67.4,
"nbwordsall": 1350
}
]
},
"response": 200,
"message": "ok",
"timing": 0.08,
"creditUsed": 0,
"method": "tf_history",
"credits": 292
}
result.url : URL analysée.result.keyword : Mot-clé cible associé à l'analyse.result.session : Identifiant de session de l'analyse.result.snapshots[].date : Date de l'enregistrement (YYYY-MM-DD HH:MM:SS).result.snapshots[].scoreSeo : Score SEO global de 0 à 100.result.snapshots[].scorePerf : Score de performance de 0 à 100.result.snapshots[].scoreSem : Score sémantique de 0 à 100.result.snapshots[].scoreIa : Score IA de 0 à 100.result.snapshots[].nbwordsall : Nombre total de mots de la page à cette date.Note : L'historique n'est disponible que si la page a été analysée au moins une fois depuis votre compte. Les données sont classées par date croissante.
Description : Analyse les performances mobiles d'une page via Google Lighthouse / PageSpeed Insights. Retourne le score global de performance et les Core Web Vitals : FCP, LCP, TBT, CLS, Speed Index, TTI et TTFB.
Endpoint : https://www.textfocus.net/apis/tf_perf/
Méthode : POST
key (string, requis) : Clé API.url (string, requis) : URL de la page à analyser.force_refetch (int, optionnel) : Mettre à 1 pour ignorer le cache (validité : 60 minutes).Exemple de réponse JSON :
{
"version": "1.0.4",
"params": {
"url": "https://beweb.fr/seo/",
"key": "Votre clé d'API"
},
"result": {
"url": "https://beweb.fr/seo/",
"scorePerf": 72.0,
"strategy": "MOBILE",
"metrics": {
"first-contentful-paint": { "value": 1820, "score": 75, "unit": "ms" },
"largest-contentful-paint": { "value": 3200, "score": 48, "unit": "ms" },
"total-blocking-time": { "value": 240, "score": 62, "unit": "ms" },
"cumulative-layout-shift": { "value": 0.04, "score": 90, "unit": "" },
"speed-index": { "value": 2900, "score": 71, "unit": "ms" },
"interactive": { "value": 4100, "score": 55, "unit": "ms" },
"server-response-time": { "value": 310, "score": 85, "unit": "ms" }
}
},
"response": 200,
"message": "ok",
"timing": 8.4,
"creditUsed": 1,
"method": "tf_perf",
"credits": 291
}
result.scorePerf : Score de performance mobile global de 0 à 100.result.strategy : Stratégie d'analyse (toujours MOBILE).result.metrics[key].value : Valeur brute de la métrique (en millisecondes, sauf CLS qui est sans unité).result.metrics[key].score : Score de 0 à 100 pour cette métrique.result.metrics[key].unit : Unité : ms pour la plupart des métriques, chaîne vide pour CLS.Note : Les résultats sont mis en cache 60 minutes. Utilisez force_refetch=1 pour forcer une nouvelle analyse.
Description : Extrait tous les liens sortants d'une page : texte de l'ancre, URL résolue (relative → absolue), attribut rel, emplacement dans la page (main, nav, footer, aside, header, breadcrumb) et type (interne ou externe).
Endpoint : https://www.textfocus.net/apis/tf_links/
Méthode : POST
key (string, requis) : Clé API.url (string, requis) : URL de la page à analyser.force_refetch (int, optionnel) : Mettre à 1 pour ignorer le cache de la page.Exemple de réponse JSON :
{
"version": "1.0.4",
"params": {
"url": "https://beweb.fr/seo/",
"key": "Votre clé d'API"
},
"result": {
"url": "https://beweb.fr/seo/",
"total": 34,
"internal": 22,
"external": 12,
"links": [
{
"url": "https://beweb.fr/audit-seo/",
"anchor": "audit seo",
"rel": null,
"title": null,
"location": "main",
"type": "internal"
},
{
"url": "https://www.google.fr/",
"anchor": "google",
"rel": "nofollow",
"title": "Google",
"location": "footer",
"type": "external"
}
]
},
"response": 200,
"message": "ok",
"timing": 1.8,
"creditUsed": 1,
"method": "tf_links",
"credits": 290
}
result.total : Nombre total de liens uniques (URL + ancre).result.internal : Nombre de liens internes (même domaine).result.external : Nombre de liens externes (domaine différent).result.links[].url : URL absolue résolue du lien.result.links[].anchor : Texte de l'ancre (en minuscules).result.links[].rel : Valeur de l'attribut rel (nofollow, sponsored…) ou null.result.links[].title : Valeur de l'attribut title ou null.result.links[].location : Zone de la page où se trouve le lien : main, nav, footer, aside, header ou breadcrumb.result.links[].type : internal (même domaine) ou external.Note : Les codes HTTP de chaque lien ne sont pas testés (évite des dizaines de requêtes supplémentaires). Ancres de page (#...), liens mailto: et tel: sont exclus.
Description : Audit SEO on-page en masse : analyse jusqu'à 50 URLs en séquentiel et envoie les résultats consolidés à une URL de callback. Les crédits sont consommés uniquement pour les pages analysées avec succès.
Endpoint : https://www.textfocus.net/apis/tf_seo_bulk/
Méthode : POST
key (string, requis) : Clé API.urls[] (array, requis) : Tableau d'URLs à analyser (maximum 50). En form-data, répéter la clé urls[] pour chaque URL.callback (string, requis) : URL de votre webhook qui recevra les résultats consolidés via HTTP POST (JSON) à la fin du traitement.keyword (string, optionnel) : Mot-clé cible appliqué à toutes les URLs (active le scoring on-page du mot-clé).force_refetch (int, optionnel) : Mettre à 1 pour ignorer le cache pour toutes les URLs.{
"response": 202,
"message": "processing started",
"urls_count": 5
}
{
"response": 200,
"method": "tf_seo_bulk",
"processed": 4,
"errors": 1,
"skipped": 0,
"credits_consumed": 4,
"timing": 38.2,
"results": [
{
"url": "https://example.com/page-1",
"status": "ok",
"scoreSeo": 67.3,
"scoreSem": 52.0,
"title": "Titre de la page",
"h1": "Titre H1",
"description": "Meta description...",
"nbMots": 842
},
{
"url": "https://example.com/page-unreachable",
"status": "error",
"error": "analysis returned no result"
}
]
}
processed : Nombre d'URLs analysées avec succès (= crédits consommés).errors : Nombre d'URLs en échec (page inaccessible ou sans résultat).skipped : Nombre d'URLs non traitées (crédits épuisés en cours de route).skip_reason : Présent si skipped > 0. Valeur : insufficient_credits.credits_consumed : Nombre total de crédits débités (égal à processed).results[].scoreSeo : Score SEO global de 0 à 100.results[].scoreSem : Score sémantique de 0 à 100.results[].title : Contenu de la balise <title>.results[].h1 : Contenu de la balise <h1>.results[].description : Contenu de la meta description.results[].nbMots : Nombre de mots utiles dans la page.Note : Le délai entre chaque URL est de 1 seconde. Pour 50 URLs, le traitement peut durer plusieurs minutes. Assurez-vous que votre endpoint de callback accepte les requêtes POST avec un Content-Type: application/json.
Certaines APIs, comme tf_semantic, peuvent nécessiter un traitement asynchrone.
Dans ce cas, un callback peut être défini pour recevoir la réponse sur votre serveur.
<?php
public function my_callback(){
log_message('error', 'Call of my_callback');
$payload = file_get_contents('php://input');
log_message('error', 'Content : '. $payload);
print_r($payload);
}
?>