8
n8n 中文网amn8n.com

SEO 关键词监控

中级

这是一个AI, Marketing领域的自动化工作流,包含 13 个节点。主要使用 If, Code, Merge, Slack, Airtable 等节点,结合人工智能技术实现智能自动化。 自动化 YouTube 频道潜在客户生成和邮件触达,集成 Apify 和 ZeroBounce

前置要求
  • Slack Bot Token 或 Webhook URL
  • Airtable API Key
  • 可能需要目标 API 的认证凭证
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "1xrqMJ6EWwURrcKa",
  "meta": {
    "instanceId": "84ad02d6104594179f43f1ce9cfe3a81637b2faedb57dafcb9e649b7542988db",
    "templateCredsSetupCompleted": true
  },
  "name": "SEO 关键词监控",
  "tags": [],
  "nodes": [
    {
      "id": "dd7dfdd7-afc0-4e42-abbb-00a79bad0cd4",
      "name": "从 Airtable 获取关键词",
      "type": "n8n-nodes-base.airtableTrigger",
      "position": [
        0,
        0
      ],
      "parameters": {
        "baseId": {
          "__rl": true,
          "mode": "url",
          "value": "https://airtable.com/appjaqV0O7FkXT2qj/shrst7GnlbzMDz4te"
        },
        "tableId": {
          "__rl": true,
          "mode": "url",
          "value": "https://airtable.com/appjaqV0O7FkXT2qj/tblTAvRqVFOo5AVDF/viwEp0ssaidZOo4nl?blocks=hide"
        },
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerField": "Keyword",
        "authentication": "airtableTokenApi",
        "additionalFields": {}
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "OQJxQX3N8GKNxEOl",
          "name": "Airtable Personal Access Token account 2"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "0cc36294-63c3-4ffb-9282-8a9d98a3606d",
      "name": "通过 Firecrawl 检查排名",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        300,
        -220
      ],
      "parameters": {
        "url": "https://api.firecrawl.dev/serp",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "query",
              "value": "={{ $json.fields.Keyword }}"
            },
            {
              "name": "country",
              "value": "us"
            },
            {
              "name": "language",
              "value": "en"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_API_KEY"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "3b38da51-67e5-45b5-a481-6b064c143eca",
      "name": "合并 Airtable + Firecrawl 结果",
      "type": "n8n-nodes-base.merge",
      "position": [
        580,
        -20
      ],
      "parameters": {},
      "typeVersion": 3.1
    },
    {
      "id": "479ab102-bd2c-4278-b869-4a72fbdaa639",
      "name": "比较排名",
      "type": "n8n-nodes-base.code",
      "position": [
        900,
        -20
      ],
      "parameters": {
        "jsCode": "// Find the item that contains results\nconst resultItem = items.find(item => Array.isArray(item.json.results));\nconst dataItem = items.find(item => item.json.fields && item.json.fields[\"Target URL\"]);\n\n// Defensive check\nif (!resultItem || !dataItem) {\n  throw new Error(\"Missing result or Airtable data\");\n}\n\nconst results = resultItem.json.results;\nconst fields = dataItem.json.fields;\n\nconst targetUrl = fields[\"Target URL\"];\nconst keyword = fields[\"Keyword\"];\n\nlet rank = null;\n\nfor (let i = 0; i < results.length; i++) {\n  const resultUrl = results[i].url?.toLowerCase() || '';\n  if (resultUrl.includes(targetUrl.toLowerCase())) {\n    rank = i + 1;\n    break;\n  }\n}\n\nreturn [\n  {\n    json: {\n      keyword,\n      target_url: targetUrl,\n      current_rank: fields[\"Current Rank\"],\n      new_rank: rank !== null ? rank : \"Not in Top 10\",\n      rank_changed: rank !== null && rank !== fields[\"Current Rank\"],\n      notes: fields[\"Notes\"] || \"\",\n      airtable_id: dataItem.json.id,\n      raw_results: results // Optional\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "bf89e7d8-bc10-4e12-9671-3b21976f901d",
      "name": "更新 Airtable 记录",
      "type": "n8n-nodes-base.airtable",
      "position": [
        1120,
        -20
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appjaqV0O7FkXT2qj",
          "cachedResultUrl": "https://airtable.com/appjaqV0O7FkXT2qj",
          "cachedResultName": "Table no.1"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblTAvRqVFOo5AVDF",
          "cachedResultUrl": "https://airtable.com/appjaqV0O7FkXT2qj/tblTAvRqVFOo5AVDF",
          "cachedResultName": "Table 1"
        },
        "columns": {
          "value": {
            "id": "={{ $json.airtable_id }}",
            "Current Rank": "={{ $json.new_rank }}"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "Keyword",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Keyword",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Target URL",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Target URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Current Rank",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Current Rank",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "OQJxQX3N8GKNxEOl",
          "name": "Airtable Personal Access Token account 2"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "6cda42ab-19eb-4309-85f3-0d84a195931a",
      "name": "检查排名是否改变",
      "type": "n8n-nodes-base.if",
      "position": [
        1460,
        -20
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "e16a90ab-e577-46f8-abf2-9c8de77059fc",
              "operator": {
                "type": "number",
                "operation": "notEquals"
              },
              "leftValue": "={{ $('Compare Ranks').item.json.current_rank }}",
              "rightValue": "={{ $('Compare Ranks').item.json.new_rank }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "02ed48b0-4e24-42ea-8856-8a25ca0446cb",
      "name": "发送 Slack 通知",
      "type": "n8n-nodes-base.slack",
      "position": [
        1740,
        -200
      ],
      "webhookId": "f0ed69d2-fcd1-457e-b981-614ec29954cc",
      "parameters": {
        "text": "hi",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C08TTV0CC3E",
          "cachedResultName": "all-nathing"
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "id": "L2vpqY0w5ba50NlR",
          "name": "Slack account 2"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "dff0f256-73c3-4cdc-8b1c-db30070a3965",
      "name": "无操作,不执行任何动作",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1740,
        180
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "a9171863-7fd9-4cd4-ac67-b6b4fb5b7dc7",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -40,
        -1320
      ],
      "parameters": {
        "width": 760,
        "height": 1520,
        "content": "## 🔍 **第一部分:获取并合并数据**"
      },
      "typeVersion": 1
    },
    {
      "id": "7c568ca6-16dd-4d16-bea1-7cbdbf5b973b",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        820,
        -980
      ],
      "parameters": {
        "color": 3,
        "width": 460,
        "height": 1180,
        "content": "## 🧠 **第二部分:比较并更新 Airtable 记录**"
      },
      "typeVersion": 1
    },
    {
      "id": "60ea4f45-7a33-4cf1-8952-7989df4c6edf",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1400,
        -900
      ],
      "parameters": {
        "color": 7,
        "width": 500,
        "height": 1220,
        "content": "## ✅ **第三部分:条件警报**"
      },
      "typeVersion": 1
    },
    {
      "id": "bd9813ca-f877-4a50-8b4a-8284dc5cd2da",
      "name": "便签9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1720,
        -1320
      ],
      "parameters": {
        "color": 4,
        "width": 1300,
        "height": 320,
        "content": "======================================="
      },
      "typeVersion": 1
    },
    {
      "id": "8c6e6722-1d72-4736-8c69-cf245d6cc06d",
      "name": "便签4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1720,
        -980
      ],
      "parameters": {
        "color": 4,
        "width": 1289,
        "height": 2178,
        "content": "# 🚀 **自动化排名追踪工作流 (n8n)**"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {
    "Check Rank via Firecrawl": [
      {
        "json": {
          "results": [
            {
              "url": "https://moz.com/blog/seo-automation-tools",
              "title": "Top SEO Automation Tools for 2025",
              "description": "Explore the best SEO automation tools for boosting rankings in 2025."
            },
            {
              "url": "https://your-site.com/seo-guide",
              "title": "Beginner’s Guide to SEO Automation",
              "description": "Learn how to automate your SEO efforts effectively."
            },
            {
              "url": "https://ahrefs.com/blog/automate-keyword-research",
              "title": "How to Automate Keyword Research",
              "description": "Streamline your SEO keyword research using automation."
            }
          ]
        }
      }
    ]
  },
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "aded958b-db96-4a80-b05b-27afdb05f950",
  "connections": {
    "Compare Ranks": {
      "main": [
        [
          {
            "node": "Update Airtable Record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if Rank Changed": {
      "main": [
        [
          {
            "node": "Send Slack Notification",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Operation, do nothing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Airtable Record": {
      "main": [
        [
          {
            "node": "Check if Rank Changed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Rank via Firecrawl": {
      "main": [
        [
          {
            "node": "Combine Airtable + Firecrawl Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Keywords from Airtable": {
      "main": [
        [
          {
            "node": "Check Rank via Firecrawl",
            "type": "main",
            "index": 0
          },
          {
            "node": "Combine Airtable + Firecrawl Result",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Combine Airtable + Firecrawl Result": {
      "main": [
        [
          {
            "node": "Compare Ranks",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

中级 - 人工智能, 营销

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
中级
节点数量13
分类2
节点类型9
难度说明

适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流

作者
Yaron Been

Yaron Been

@yaron-nofluff

Building AI Agents and Automations | Growth Marketer | Entrepreneur | Book Author & Podcast Host If you need any help with Automations, feel free to reach out via linkedin: https://www.linkedin.com/in/yaronbeen/ And check out my Youtube channel: https://www.youtube.com/@YaronBeen/videos

外部链接
在 n8n.io 查看

分享此工作流