Ouvrir le Studio

Internal Link Recommendation

Le node Internal Link Recommendation classe les pages d'un dataset CSV en croisant similarité sémantique et PageRank pour faire émerger les meilleures opportunités de maillage interne.

seo tools internal link recommendation node on the workflow canvas

Le node Internal Link Recommendation prend une requête textuelle et classe les pages d’un dataset CSV en combinant deux signaux : la similarité sémantique entre la requête et chaque titre de page (TF-IDF + cosinus, avec stopwords adaptés à la langue détectée) et le score PageRank interne de la page (colonne inrank). Il renvoie le top N sous forme de tableau JSON, avec une rotation aléatoire entre les pages sélectionnées pour éviter de toujours proposer exactement les mêmes suggestions.

Cas d’usage typiques :

  • Générer une short-list de liens internes pertinents lors de la rédaction d’un article.
  • Construire des cocons sémantiques en faisant ressortir les pages thématiquement liées à un sujet pilier.
  • Mieux distribuer le link equity en augmentant le poids du PageRank pour favoriser les pages à forte autorité.

Configuration rapide

Ajouter le node au canevas

Ouvrez la bibliothèque de nodes (Node Library), allez dans Integrations > SEO Tools, puis glissez-déposez le node Internal Link Recommendation sur votre espace de travail.

Préparer le dataset d’URLs

Exportez un CSV depuis votre crawler (Screaming Frog, Oncrawl, etc.) contenant exactement trois colonnes en minuscules : url, title et inrank. La colonne inrank doit être numérique.

Configurer le node

Uploadez le CSV dans URL Dataset, définissez Number of links to return puis ajustez Semantic Weight et PageRank Weight selon votre stratégie de maillage.

Connecter les entrées et la sortie

Reliez une source texte (LLM, Text Input, Paragraph) à l’entrée Query, puis branchez la sortie au node suivant (LLM pour formater des ancres HTML, Find and Replace pour injecter dans un template, etc.).

Paramètres de configuration

internal link recommendation node settings panel

Le node combine un port d’entrée pour la requête et des paramètres dans le panneau latéral.

Champs requis

Name string required default: Internal Link Recommendation

Nom du node — Sert à identifier le node lors de l’exécution et du débogage du workflow (ex : Maillage blog).

Description string required default: Recommends internal links based on content relevance and page importance

Description du node — Courte phrase décrivant ce que fait cette instance du node.

Query string required

Port d’entrée — Le texte utilisé pour scorer les pages. Typiquement un ensemble de mots-clés, un titre d’article ou un paragraphe du contenu en cours de rédaction. Une requête vide déclenche Internal Link Recommendation Tool: Missing query parameter.

URL Dataset csv required

Un fichier CSV (ou XLSX) uploadé en tant que Datasource. Colonnes requises (insensibles à la casse, mises en minuscules à la lecture) :

  • url — URL absolue de la page.
  • title — Titre de la page utilisé pour l’appariement sémantique.
  • inrank — Score PageRank interne (numérique).

Le délimiteur CSV est auto-détecté (,, ;, tab ou |). L’encodage est auto-détecté via chardet. Les lignes invalides sont ignorées.

Champs optionnels

Number of links to return number default: 5

Nombre de recommandations à retourner. Plage de 1 à 20. Le node peut en retourner moins si peu de pages ont une similarité strictement positive.

Semantic Weight number default: 0.8

Coefficient appliqué au score de similarité cosinus dans le classement final (0 à 1, pas de 0,1). Des valeurs plus élevées privilégient les pages dont les titres collent le mieux à la requête.

PageRank Weight number default: 0.4

Coefficient appliqué au score inrank normalisé (min-max) dans le classement final (0 à 1, pas de 0,1). Des valeurs plus élevées privilégient les pages à forte autorité indépendamment du match sémantique.

Tip

Les deux poids sont indépendants et ne doivent pas obligatoirement faire 1 au total. Le score final est semanticWeight * similarity + pageRankWeight * normalizedInrank. Une configuration 0.8 / 0.4 signifie que la pertinence sémantique pèse environ deux fois plus que l’autorité.

Info

Les stopwords sont chargés automatiquement selon la langue détectée à partir des titres (anglais, français, allemand, italien, portugais, espagnol). Si la détection échoue, l’anglais est utilisé par défaut.

Que renvoie le node ?

Le node renvoie une chaîne JSON représentant un tableau de liens recommandés, triés par final_score décroissant puis pivotés selon un offset aléatoire. Les pages dont la similarité vaut 0 sont filtrées. Chaque entrée contient l’URL source, le titre, le inrank brut, la similarité cosinus et le final_score combiné.

Comment récupérer l’output ?

  1. Tirez un lien depuis la sortie Recommended Links.
  2. Connectez-le au node suivant (typiquement un LLM, un JSON Path Extractor ou un HTML to Markdown).
  3. Dans ce node suivant, nommez votre propre variable (par exemple liens_json). La chaîne JSON y est injectée directement. Passez-la à un JSON Path Extractor ou demandez à un LLM de formater des ancres HTML.
Recommended Links string

Tableau JSON encodé en chaîne, dont chaque objet possède les champs url, title, inrank, similarity, final_score. Tableau vide si aucune page n’a une similarité supérieure à 0.

[
  {
    "url": "https://example.com/guides/technical-seo-checklist",
    "title": "Technical SEO Checklist for 2025",
    "inrank": 7.8,
    "similarity": 0.91,
    "final_score": 0.98
  },
  {
    "url": "https://example.com/blog/crawl-budget-optimization",
    "title": "How to Optimize Your Crawl Budget",
    "inrank": 6.3,
    "similarity": 0.84,
    "final_score": 0.87
  }
]

Exemples d’utilisation

Cas 1 : Maillage éditorial depuis un brouillon d’article

Vous rédigez un article sur l’audit SEO technique et voulez cinq liens internes pertinents à intégrer dans le corps du texte.

Donnée d’entrée (Query) :

audit SEO technique erreurs de crawl indexation

Dataset CSV (extrait) :

url,title,inrank
https://exemple.com/guides/checklist-seo-technique,Checklist SEO technique 2025,7.8
https://exemple.com/blog/optimisation-budget-crawl,Optimiser son budget de crawl,6.3
https://exemple.com/outils/audit-site,Outil d'audit de site gratuit,9.1
https://exemple.com/blog/recettes,Meilleures recettes de pâtes,4.2

Configuration :

  • Number of links to return : 5
  • Semantic Weight : 0.8
  • PageRank Weight : 0.4

Output :

[
  {
    "url": "https://exemple.com/guides/checklist-seo-technique",
    "title": "Checklist SEO technique 2025",
    "inrank": 7.8,
    "similarity": 0.91,
    "final_score": 1.04
  },
  {
    "url": "https://exemple.com/outils/audit-site",
    "title": "Outil d'audit de site gratuit",
    "inrank": 9.1,
    "similarity": 0.42,
    "final_score": 0.74
  }
]

La page de recettes est filtrée car sa similarité vaut 0.

Cas 2 : Construction d’un cocon avec biais d’autorité

Vous bâtissez un cocon sémantique autour de content marketing et souhaitez favoriser les pages à forte autorité.

Configuration :

  • Number of links to return : 10
  • Semantic Weight : 0.5
  • PageRank Weight : 0.7

Workflow :

graph LR
    Input[Text Input
<br/>mots-clés du sujet] --> ILR[Internal Link Recommendation]
    ILR --> LLM[LLM
<br/>formate les ancres HTML]
    LLM --> FR[Find and Replace
<br/>injecte dans le template]

Le LLM consomme le tableau JSON et produit des ancres HTML prêtes à coller. Le Find and Replace remplace ensuite un placeholder du template d’article par le bloc généré.

Problèmes courants

La sortie est un tableau vide

Cause : Aucune page du dataset n’a une similarité TF-IDF non nulle avec la requête (vocabulaire incompatible, titres très courts ou stopwords trop agressifs).

Solution : Élargissez la requête, vérifiez que les titres sont descriptifs, et confirmez que la langue détectée correspond à celle du dataset. Une requête composée uniquement de stopwords produit également des similarités nulles.

Le node échoue avec `Title column not found`, `Url column not found` ou `Inrank column not found`

Cause : L’en-tête du CSV ne contient pas l’une des colonnes obligatoires. Les en-têtes sont mis en minuscules à la lecture, mais la colonne doit être présente.

Solution : Réexportez le CSV avec exactement url, title, inrank (la casse n’importe pas, mais les noms doivent matcher).

Le node échoue avec `Page rank must be a number`

Cause : La colonne inrank contient des valeurs non numériques (texte, cellules vides, séparateurs de milliers).

Solution : Nettoyez la colonne avant export. Les valeurs doivent être numériques (entiers ou décimaux). Supprimez ou complétez les lignes sans PageRank.

Les suggestions changent d'une exécution à l'autre avec les mêmes entrées

Cause : Comportement attendu. Le node applique une rotation aléatoire à la liste filtrée et triée avant de retourner le top N, ce qui fait varier la sélection d’une exécution à l’autre.

Solution : Aucune action requise. Augmentez Number of links to return pour obtenir une short-list plus stable, ou normalisez la sortie de façon déterministe en aval.

Bonnes pratiques et pièges à éviter

Tip

Adaptez les poids au cas d’usage. Le maillage éditorial favorise le sémantique (0.8 / 0.3). Les pages piliers et hubs de navigation favorisent l’autorité (0.5 / 0.7). Testez les deux configurations sur une requête de référence.

Tip

Rafraîchissez le dataset régulièrement. Les recommandations valent ce que vaut l’export. Recrawlez régulièrement pour rendre les nouvelles pages éligibles et éviter que des inrank obsolètes ne biaisent les résultats.

Warning

La qualité des titres conditionne le match sémantique. Des titres génériques (Page 1, Sans titre) ne peuvent pas être appariés. Vérifiez que chaque ligne a un titre descriptif avant d’exploiter la sortie.

Comment s’intègre-t-il dans un workflow ?

Internal Link Recommendation se place typiquement entre une source de contenu et une étape de mise en forme, transformant un sujet en liste JSON d’ancres suggérées que les nodes en aval injectent dans le contenu final.

graph LR
    Topic[Text Input
<br/>sujet ou brouillon] --> ILR[Internal Link Recommendation]
    ILR --> LLM[LLM
<br/>construit les ancres HTML]
    LLM --> Output[Docs Writer
<br/>ou Find and Replace]

Nodes complémentaires