审核 SEO 可读性 AI:检查网站对大型语言模型de友好性
Ceci est unAI, Marketingworkflow d'automatisation du domainecontenant 8 nœuds.Utilise principalement des nœuds comme Code, HttpRequest, ChainLlm, ChatTrigger, LmChatOpenAi, combinant la technologie d'intelligence artificielle pour une automatisation intelligente. 审核 SEO 可读性 AI:检查网站对大型语言模型de友好性
- •Peut nécessiter les informations d'identification d'authentification de l'API cible
- •Clé API OpenAI
Nœuds utilisés (8)
Catégorie
{
"id": "qthXGkJCm1YAAQpW",
"meta": {
"instanceId": "c586b172acc6a68496c50087fe4c45ad1d861562820afb3dfa9dc2c12688d8c2",
"templateCredsSetupCompleted": true
},
"name": "AI SEO Readability Audit: Check Website Friendliness for LLMs",
"tags": [
{
"id": "JkpR8IEIpOrc2x6l",
"name": "Leonard van Hemert",
"createdAt": "2025-05-17T14:14:16.649Z",
"updatedAt": "2025-05-17T14:14:16.649Z"
}
],
"nodes": [
{
"id": "ea4c49eb-5a9d-4de9-acc7-3eef90b11f29",
"name": "À la réception du message",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
-340,
-140
],
"webhookId": "f41e2ff4-b329-4c64-9147-963726a1eb76",
"parameters": {
"public": true,
"options": {
"title": "🚀 AI SEO Readability Checker",
"subtitle": "Test how AI-friendly your website is for search engines like ChatGPT & Perplexity – built by [Leonard van Hemert](https://nl.linkedin.com/in/leonard-van-hemert)",
"responseMode": "lastNode",
"inputPlaceholder": "https://example.com"
},
"initialMessages": "Hi! 👋 \nSend your website link and I’ll check how AI-friendly it is for tools like ChatGPT and Perplexity. Let’s go! 🚀"
},
"typeVersion": 1.1
},
{
"id": "0ede3abb-3cad-4e9a-bc8c-79d8eac06fe6",
"name": "Get HTML from Website",
"type": "n8n-nodes-base.httpRequest",
"position": [
100,
-140
],
"parameters": {
"url": "={{ $json.url }}",
"options": {
"timeout": 10000
},
"jsonHeaders": "{\n \"User-Agent\": \"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)\",\n \"Accept-Language\": \"nl-NL,nl;q=0.9,en-US;q=0.8,en;q=0.7\"\n}",
"sendHeaders": true,
"specifyHeaders": "json"
},
"retryOnFail": true,
"typeVersion": 4.2,
"alwaysOutputData": true
},
{
"id": "96d8c97a-8d7b-41fb-a109-d56e34d7dff1",
"name": "Sanitize Website URL",
"type": "n8n-nodes-base.code",
"position": [
-120,
-140
],
"parameters": {
"jsCode": "return [\n {\n json: {\n url: (() => {\n let input = $json.chatInput.trim().toLowerCase();\n if (!input.startsWith('http')) input = 'https://' + input;\n return input;\n })()\n }\n }\n];"
},
"typeVersion": 2
},
{
"id": "2b8a702e-b141-4f71-9e8f-2caa69cfad80",
"name": "Extract HTML Features",
"type": "n8n-nodes-base.code",
"position": [
320,
-140
],
"parameters": {
"jsCode": "const html = $json.data || '';\n\n// Remove scripts, styles, and extract visible text\nconst cleanedText = html\n .replace(/<script[\\s\\S]*?<\\/script>/gi, '')\n .replace(/<style[\\s\\S]*?<\\/style>/gi, '')\n .replace(/<[^>]*>/g, '') // strip all HTML tags\n .replace(/\\s+/g, ' ')\n .trim();\n\n// Preview: first 400 chars of visible content\nconst previewText = cleanedText.slice(0, 400);\n\n// Lowercased text for language-agnostic JS block detection\nconst lowerText = cleanedText.toLowerCase();\n\n// Common JS-related blocking messages (EN + NL + DE)\nconst jsBlockIndicators = [\n 'enable javascript',\n 'javascript is required',\n 'please enable javascript',\n 'javascript moet ingeschakeld zijn',\n 'schakel javascript in',\n 'javascript erforderlich'\n];\n\n// Scan for any of the indicators\nconst jsWarningDetected = jsBlockIndicators.some(phrase => lowerText.includes(phrase));\n\nreturn [\n {\n json: {\n visibleTextLength: cleanedText.length,\n previewText,\n hasH1: /<h1[\\s>]/i.test(html),\n hasH2: /<h2[\\s>]/i.test(html),\n hasH3: /<h3[\\s>]/i.test(html),\n hasMetaDescription: /<meta[^>]+name=[\"']description[\"']/i.test(html),\n hasOpenGraph: /<meta[^>]+property=[\"']og:/i.test(html),\n hasStructuredData: /<script[^>]*type=[\"']application\\/ld\\+json[\"']/i.test(html),\n hasNoscript: /<noscript[\\s>]/i.test(html),\n jsWarning: jsWarningDetected,\n robotsTxt: $('Sanitize Website URL').first().json.url.replace(/\\/$/, '') + '/robots.txt'\n }\n }\n];"
},
"typeVersion": 2
},
{
"id": "58591741-7896-4f0f-a5d6-a16efccdf4a3",
"name": "AI SEO Analysis",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
540,
-140
],
"parameters": {
"text": "=You are an expert in AI SEO analysis and AI search engine accessibility.\n\nYou are evaluating a website’s readability for LLM-based tools like ChatGPT, Perplexity, and Google AI Overviews. The website's raw HTML was fetched *without JavaScript execution*, simulating how LLMs typically see pages.\n\n---\n\n### 🧾 Technical Scan Summary\n\n**Visible content (no JS):**\n- Text length: {{ $json.visibleTextLength }} characters\n- Preview: \"{{ $json.previewText }}\"\n\n**Detected features:**\n- Structured Data (JSON-LD): {{ $json.hasStructuredData }}\n- Meta Description: {{ $json.hasMetaDescription }}\n- Open Graph Metadata: {{ $json.hasOpenGraph }}\n- Headings: H1: {{ $json.hasH1 }}, H2: {{ $json.hasH2 }}, H3: {{ $json.hasH3 }}\n- `<noscript>` fallback present: {{ $json.hasNoscript }}\n- JavaScript-blocking warning found: {{ $json.jsWarning }}\n\n---\n\n### 🎯 Your task:\nEvaluate the AI-readability of this website and return:\n\n1. An **AI Readability Score (0–10)**\n2. A **brief summary** of the current state (2–4 sentences)\n3. Up to **5 actionable recommendations** to improve visibility and accessibility for AI search engines\n\n💡 If the text length is below 300 or the `JavaScript-blocking warning found` is true, clearly state that the site may not be accessible to LLMs due to JavaScript dependency.\n\n⚠️ **Important:**\nYou must also **tell the user** to check their `robots.txt` file manually, and provide this exact clickable link: \n👉 [{{ $json.robotsTxt }}]({{ $json.robotsTxt }}) \nExplain they must ensure bots like `GPTBot`, `ChatGPT-User`, and `Google-Extended` are **not blocked**.\n\nDo not perform this check yourself — just inform the user to do it.\n\n---\n\n🎁 Format your response like this:\n\n**Score:** x/10 \n**Summary:** ... \n**Recommendations:**\n- ...\n- Check your robots.txt file at [{{ $json.robotsTxt }}]({{ $json.robotsTxt }}) to ensure AI bots are allowed.",
"promptType": "define"
},
"typeVersion": 1.6
},
{
"id": "080e40e2-bfb3-42df-8f92-ac1379135aad",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
-380,
20
],
"parameters": {
"color": 4,
"width": 740,
"height": 700,
"content": "# 🚀 AI SEO Readability Audit Workflow\n\n**Purpose:** This workflow analyzes a website's HTML to assess its readability and accessibility for Large Language Models (LLMs) like ChatGPT and Perplexity, which often crawl without executing JavaScript.\n\n**How it Works:**\n1. Enter a website URL in the chat.\n2. The workflow fetches the raw HTML (simulating a no-JS crawler).\n3. It extracts key SEO features (text content, headings, meta tags, etc.).\n4. An LLM (via OpenAI) analyzes these features to provide:\n - An AI Readability Score (0-10)\n - A summary of the site's AI-friendliness\n - Actionable recommendations\n - A reminder to check `robots.txt`\n\n**Setup Required:**\n- An **OpenAI Account & API Key**: Configure your credentials in the \"OpenAI Chat Model\" node.\n- **n8n Instance**: This workflow runs on any n8n instance (cloud or self-hosted).\n\n**To Use:**\n1. Ensure the \"OpenAI Chat Model\" node is configured with your API key.\n2. Activate the workflow.\n3. Open the chat URL provided by the \"When chat message received\" trigger.\n\n**Customization:**\n- **LLM Model:** Change the model in the \"OpenAI Chat Model\" node.\n- **Analysis Prompt:** Modify the prompt in the \"AI SEO Analysis\" node.\n\n🔗 *For more details on setup and customization, see the template description on n8n.io.*"
},
"typeVersion": 1
},
{
"id": "a737c2cb-1d6c-4e69-9d92-c7177c42049a",
"name": "Note adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
360,
260
],
"parameters": {
"width": 540,
"height": 460,
"content": "# **🚀 Developed by Leonard van Hemert** \n\nThank you for using this **AI SEO Readability Audit** workflow! 🎉 \n\nThis workflow was created to help users understand how AI tools \"see\" their websites and to provide actionable insights for improving AI-friendliness.\n\nIf you find this useful, feel free to **connect with me on LinkedIn** and stay updated on my latest AI & automation projects! \n\n🔗 **Follow me on LinkedIn**: [Leonard van Hemert](https://www.linkedin.com/in/leonard-van-hemert/) \n\nI truly appreciate the support from the **n8n community**, and I can’t wait to see how you use and improve this workflow! 🚀 \n\nHappy optimizing, \n**Leonard van Hemert** 💡"
},
"typeVersion": 1
},
{
"id": "7228e3be-1ef7-4f5a-bcb0-2a9299d53cfe",
"name": "Modèle de chat OpenAI",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
628,
80
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o",
"cachedResultName": "gpt-4o"
},
"options": {
"temperature": 0.3
}
},
"credentials": {
"openAiApi": {
"id": "1OV4I35YEqCf9qI5",
"name": "OpenAI account"
}
},
"typeVersion": 1.2
}
],
"active": true,
"pinData": {},
"settings": {
"callerPolicy": "workflowsFromSameOwner",
"executionOrder": "v1",
"executionTimeout": 300
},
"versionId": "9e18a350-a243-4368-b3d3-746a55bceb24",
"connections": {
"58591741-7896-4f0f-a5d6-a16efccdf4a3": {
"main": [
[]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "58591741-7896-4f0f-a5d6-a16efccdf4a3",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"96d8c97a-8d7b-41fb-a109-d56e34d7dff1": {
"main": [
[
{
"node": "0ede3abb-3cad-4e9a-bc8c-79d8eac06fe6",
"type": "main",
"index": 0
}
]
]
},
"2b8a702e-b141-4f71-9e8f-2caa69cfad80": {
"main": [
[
{
"node": "58591741-7896-4f0f-a5d6-a16efccdf4a3",
"type": "main",
"index": 0
}
]
]
},
"0ede3abb-3cad-4e9a-bc8c-79d8eac06fe6": {
"main": [
[
{
"node": "2b8a702e-b141-4f71-9e8f-2caa69cfad80",
"type": "main",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "96d8c97a-8d7b-41fb-a109-d56e34d7dff1",
"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
Leonard
@leonardvanhemertPartager ce workflow