AI SEO可読性審査:ウェブサイトのLLM対応状況の確認

中級

これはAI, Marketing分野の自動化ワークフローで、8個のノードを含みます。主にCode, HttpRequest, ChainLlm, ChatTrigger, LmChatOpenAiなどのノードを使用、AI技術を活用したスマート自動化を実現。 AI SEO可読性審査:ウェブサイトの大規模言語モデルに対する対応状況の確認

前提条件
  • ターゲットAPIの認証情報が必要な場合あり
  • OpenAI API Key
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
  "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": "チャットメッセージ受信時",
      "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": "ウェブサイトからHTMLを取得",
      "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": "ウェブサイト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": "HTML特徴を抽出",
      "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分析",
      "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": "付箋",
      "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": "付箋1",
      "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": "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": [
        []
      ]
    },
    "7228e3be-1ef7-4f5a-bcb0-2a9299d53cfe": {
      "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
          }
        ]
      ]
    },
    "ea4c49eb-5a9d-4de9-acc7-3eef90b11f29": {
      "main": [
        [
          {
            "node": "96d8c97a-8d7b-41fb-a109-d56e34d7dff1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
よくある質問

このワークフローの使い方は?

上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。

このワークフローはどんな場面に適していますか?

中級 - 人工知能, マーケティング

有料ですか?

このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。

ワークフロー情報
難易度
中級
ノード数8
カテゴリー2
ノードタイプ6
難易度説明

経験者向け、6-15ノードの中程度の複雑さのワークフロー

外部リンク
n8n.ioで表示

このワークフローを共有

カテゴリー

カテゴリー: 34