Vérificateur de liens en temps réel
Ceci est unAI, Marketingworkflow d'automatisation du domainecontenant 13 nœuds.Utilise principalement des nœuds comme Code, Wait, HttpRequest, GoogleSheets, ManualTrigger, combinant la technologie d'intelligence artificielle pour une automatisation intelligente. Surveillance automatisée des liens retour avec Google Sheets et DataForSEO
- •Peut nécessiter les informations d'identification d'authentification de l'API cible
- •Informations d'identification Google Sheets API
Nœuds utilisés (13)
Catégorie
{
"id": "WGUpujme8ctIkBF8",
"meta": {
"instanceId": "431560c610ab26f4776059ff809760704293c90767af32183943d4c54ac57441",
"templateCredsSetupCompleted": true
},
"name": "Live link checker",
"tags": [],
"nodes": [
{
"id": "40009961-9c97-49ee-b9ce-440e65b41e47",
"name": "Boucler sur les éléments",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-280,
200
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "85a73ac8-a8c6-4b5e-a870-3b1a58336037",
"name": "Lors du clic sur 'Tester le workflow'",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-1060,
200
],
"parameters": {},
"typeVersion": 1
},
{
"id": "a1495fc5-d39d-4cf5-b8d3-a804d82ba1a5",
"name": "Lit Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
-780,
200
],
"parameters": {
"options": {
"dataLocationOnSheet": {
"values": {
"range": "D1:E",
"rangeDefinition": "specifyRangeA1"
}
}
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1573787772,
"cachedResultUrl": "",
"cachedResultName": "Lost links"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "10CYntk8OmYemJBpcfs1dH_7p_PJxiBMpsfATtLYw7jI",
"cachedResultUrl": "",
"cachedResultName": "Sheet with lost links"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "shxBIVyk68LlqTnb",
"name": "Google Sheets account 3"
}
},
"typeVersion": 4.5
},
{
"id": "bd055fee-f66b-4b1d-9ee2-3581021d8b1f",
"name": "Nettoie l'URL du backlink",
"type": "n8n-nodes-base.code",
"position": [
-560,
200
],
"parameters": {
"jsCode": "return items.map(item => {\n let url = item.json['Backlink URL']; // Get the URL from the current item's JSON\n let domain = url.match(/https?:\\/\\/(?:www\\.)?([^/]+)/)[1]; \n return { json: { domain, url } };\n});\n$input.first().json['Backlink URL']"
},
"typeVersion": 2
},
{
"id": "030b04e9-da35-4448-b2f4-c1543eafabf5",
"name": "Envoie une requête POST HTTP à DataForSEO",
"type": "n8n-nodes-base.httpRequest",
"position": [
-20,
220
],
"parameters": {
"url": "https://api.dataforseo.com/v3/on_page/task_post",
"method": "POST",
"options": {},
"jsonBody": "=[{\n\"target\": \"{{ $json.domain }}\",\n\"start_url\": \"{{ $json.url }}\",\n\"max_crawl_pages\": 1\n}]",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBasicAuth"
},
"credentials": {
"httpBasicAuth": {
"id": "MeuonUXyXYX6lg4R",
"name": "Unnamed credential"
}
},
"typeVersion": 4.2
},
{
"id": "6ac33fbd-2daf-4b5f-a7a2-fe742294765b",
"name": "Attend 20 secondes",
"type": "n8n-nodes-base.wait",
"position": [
200,
220
],
"webhookId": "f1cc4df1-6443-4ecd-8708-fd40858f3762",
"parameters": {
"amount": 20
},
"typeVersion": 1.1
},
{
"id": "2213992d-d782-4357-8f59-87a8afb3f7f1",
"name": "Envoie une requête liens HTTP à DataForSEO",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
440,
220
],
"parameters": {
"url": "https://api.dataforseo.com/v3/on_page/links",
"method": "POST",
"options": {
"batching": {
"batch": {
"batchSize": 1
}
}
},
"jsonBody": "=[\n {\n \"id\": \"{{ $json.tasks[0].id }}\"\n }\n]\n",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBasicAuth"
},
"credentials": {
"httpBasicAuth": {
"id": "MeuonUXyXYX6lg4R",
"name": "Unnamed credential"
}
},
"typeVersion": 4.2,
"alwaysOutputData": false
},
{
"id": "ab3b47d7-381a-48e9-aad3-8555d6c36145",
"name": "Vérifie quels backlinks existent sur la page de destination",
"type": "n8n-nodes-base.code",
"position": [
680,
220
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "const result = $json.tasks?.[0]?.result?.[0];\nconst links = result?.items || []; // Safe fallback to an empty array\n\nlet backlink = $('Reads Google Sheets').item.json['Landing page']; // Expected backlink\n\n// Find the backlink in the scraped data\nlet foundLink = links.find(link => link.link_to === backlink);\n\n// Check if the backlink exists and if it's dofollow\nlet status = \"Lost\"; // Default to lost\nif (foundLink) {\n status = foundLink.dofollow ? \"Live\" : \"Lost (Nofollow)\";\n}\n\nreturn {\n json: {\n backlink: backlink,\n status: status\n }\n};\n"
},
"typeVersion": 2
},
{
"id": "d07a8791-74d9-4f86-b9d8-e0847406a96e",
"name": "Envoie les données vers Google sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
900,
220
],
"parameters": {
"columns": {
"value": {
"Status": "={{ $json.status }}",
"Backlink URL": "={{ $('Loop Over Items').item.json.url }}"
},
"schema": [
{
"id": "Company",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Company",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Contact A",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Contact A",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Channel",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Channel",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Backlink URL",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Backlink URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Landing page",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Landing page",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Anchor",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Anchor",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Money out",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Money out",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Money in",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Money in",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Invoice OUT",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Invoice OUT",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Invoice IN",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Invoice IN",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Invoice out status",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Invoice out status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Invoice in status",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Invoice in status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Backlink URL"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1573787772,
"cachedResultUrl": "",
"cachedResultName": "Lost links"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "10CYntk8OmYemJBpcfs1dH_7p_PJxiBMpsfATtLYw7jI",
"cachedResultUrl": "",
"cachedResultName": "Sheet with lost links"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "shxBIVyk68LlqTnb",
"name": "Google Sheets account 3"
}
},
"typeVersion": 4.5
},
{
"id": "f241c2f2-6a0b-4709-92ff-c6c11f9477f5",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
-880,
-200
],
"parameters": {
"color": 4,
"width": 300,
"height": 340,
"content": "Connect your Google Sheets account.\nEnsure your Google Sheet has clearly defined columns:\n\n\"Backlink URL\": URL of the page containing the backlink.\n\n\"Landing page\": The exact URL of your website page you're checking the backlink for.\n\nDefine your data range explicitly (e.g., D1:E) to accurately fetch these columns. The columns must be named exactly as specified to ensure the workflow functions correctly."
},
"typeVersion": 1
},
{
"id": "42390706-6877-4f67-92d5-fcc13903bb6c",
"name": "Note adhésive 1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-140,
-320
],
"parameters": {
"color": 4,
"width": 380,
"height": 480,
"content": "## Configure your DataForSEO TASK POST NODE\n(Basic Authentication). Insert your API key and password into n8n's Credentials settings. This node sends each URL/domain pair to the DataForSEO On-Page API for analysis.\n\n\nSettings:\n\nMethod:POST\n\nURL:https://api.dataforseo.com/v3/on_page/task_post\n\nJSON body:\n\n[{\n \"target\": \"{{ $json.domain }}\",\n \"start_url\": \"{{ $json.url }}\",\n \"max_crawl_pages\": 1\n}]\n"
},
"typeVersion": 1
},
{
"id": "60d54c3d-a2be-4961-9932-4075d769896e",
"name": "Note adhésive 2",
"type": "n8n-nodes-base.stickyNote",
"position": [
300,
-320
],
"parameters": {
"color": 4,
"width": 400,
"height": 480,
"content": "## Configure your DataForSEO ON-PAGE LINKS NODE\n\nFetches the results from DataForSEO. Ensure your credentials are properly set (same as the previous DataForSEO node). This node retrieves link data, checking if the backlink exists and its status (dofollow/nofollow).\n\nSettings: \nMethod: Post\n\nURL:https://api.dataforseo.com/v3/on_page/links\n\nJSON body example:\n\n[\n {\n \"id\": \"{{ $json.tasks[0].id }}\"\n }\n]\n"
},
"typeVersion": 1
},
{
"id": "1d800e2a-4385-4f98-b891-c40c7706bdee",
"name": "Note adhésive 3",
"type": "n8n-nodes-base.stickyNote",
"position": [
760,
-260
],
"parameters": {
"color": 4,
"width": 440,
"height": 400,
"content": "## Send data to Google Sheets\n\nThis node updates your Google Sheet with backlink check results.\n\nMap each column manually as follows:\n\nMatching Column (used to find the correct row): Backlink URL\n\nBacklink URL: {{ $('Loop Over Items').item.json.url }}\n\nStatus: {{ $json.status }}\n\nMake sure these columns (Backlink URL and Status) already exist in your Google Sheet and have these exact names.\n\nThis will correctly update the backlink status (e.g., Live, Lost, or Lost (Nofollow)) based on each URL processed."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {
"When clicking ‘Test workflow’": [
{
"json": {}
}
]
},
"settings": {
"executionOrder": "v1"
},
"versionId": "f74ca31f-8b7c-48d9-9b5f-d8295c642497",
"connections": {
"40009961-9c97-49ee-b9ce-440e65b41e47": {
"main": [
[],
[
{
"node": "030b04e9-da35-4448-b2f4-c1543eafabf5",
"type": "main",
"index": 0
}
]
]
},
"6ac33fbd-2daf-4b5f-a7a2-fe742294765b": {
"main": [
[
{
"node": "2213992d-d782-4357-8f59-87a8afb3f7f1",
"type": "main",
"index": 0
}
]
]
},
"bd055fee-f66b-4b1d-9ee2-3581021d8b1f": {
"main": [
[
{
"node": "40009961-9c97-49ee-b9ce-440e65b41e47",
"type": "main",
"index": 0
}
]
]
},
"a1495fc5-d39d-4cf5-b8d3-a804d82ba1a5": {
"main": [
[
{
"node": "bd055fee-f66b-4b1d-9ee2-3581021d8b1f",
"type": "main",
"index": 0
}
]
]
},
"d07a8791-74d9-4f86-b9d8-e0847406a96e": {
"main": [
[
{
"node": "40009961-9c97-49ee-b9ce-440e65b41e47",
"type": "main",
"index": 0
}
]
]
},
"85a73ac8-a8c6-4b5e-a870-3b1a58336037": {
"main": [
[
{
"node": "a1495fc5-d39d-4cf5-b8d3-a804d82ba1a5",
"type": "main",
"index": 0
}
]
]
},
"030b04e9-da35-4448-b2f4-c1543eafabf5": {
"main": [
[
{
"node": "6ac33fbd-2daf-4b5f-a7a2-fe742294765b",
"type": "main",
"index": 0
}
]
]
},
"2213992d-d782-4357-8f59-87a8afb3f7f1": {
"main": [
[
{
"node": "ab3b47d7-381a-48e9-aad3-8555d6c36145",
"type": "main",
"index": 0
}
]
]
},
"ab3b47d7-381a-48e9-aad3-8555d6c36145": {
"main": [
[
{
"node": "d07a8791-74d9-4f86-b9d8-e0847406a96e",
"type": "main",
"index": 0
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Intermédiaire - Intelligence Artificielle, Marketing
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Mykolas Bartkus
@mykolas-saaslinkbuilderMykolas is the founder of saaslinkbuilder and has built over 5,000 high-quality links for SaaS companies. He got his start working with top Lithuanian SaaS brands and now shares his SEO AI workflows.
Partager ce workflow