SEOキーワード監視
中級
これはAI, Marketing分野の自動化ワークフローで、13個のノードを含みます。主にIf, Code, Merge, Slack, Airtableなどのノードを使用、AI技術を活用したスマート自動化を実現。 Apify および ZeroBounce を統合した YouTube チャネル リード獲得およびメール タッチ
前提条件
- •Slack Bot Token または Webhook URL
- •Airtable API Key
- •ターゲットAPIの認証情報が必要な場合あり
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"id": "1xrqMJ6EWwURrcKa",
"meta": {
"instanceId": "84ad02d6104594179f43f1ce9cfe3a81637b2faedb57dafcb9e649b7542988db",
"templateCredsSetupCompleted": true
},
"name": "SEO Keyword Monitoring",
"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": "## 🔍 **Section 1: Fetch and Merge Data**\n\n### 🎯 Goal: Get keyword data from Airtable, fetch rank info from Firecrawl, and merge both for comparison.\n\n---\n\n### 🧱 **Step 1: Fetch Keywords from Airtable**\n\n**Node Name:** `Fetch Keywords from Airtable`\n**📌 Description:**\nTriggers when a new or updated record is found in Airtable. It fetches the following fields:\n\n* `Keyword`\n* `Target URL`\n* `Current Rank`\n\nThis is the starting point of the workflow.\n\n---\n\n### 🌐 **Step 2: Check Rank via Firecrawl**\n\n**Node Name:** `Check Rank via Firecrawl`\n**📌 Description:**\nSends a POST request to [Firecrawl API](https://api.firecrawl.dev) with the `Keyword` as the main parameter. It returns updated ranking information for that keyword.\n\n---\n\n### 🔗 **Step 3: Combine Airtable + Firecrawl Result**\n\n**Node Name:** `Combine Airtable + Firecrawl Result`\n**📌 Description:**\nA `Merge` node that combines:\n\n* The original data from Airtable\n* The response from Firecrawl\n\nThis prepares a unified object to be used in the next comparison step.\n"
},
"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": "## 🧠 **Section 2: Compare & Update Airtable Record**\n\n### 🎯 Goal: Check if the rank has changed. If yes, update Airtable with the new rank.\n\n---\n\n### 🧮 **Step 4: Compare Ranks**\n\n**Node Name:** `Compare Ranks`\n**📌 Description:**\nA `Code` node that compares the `Current Rank` from Airtable and the `New Rank` from Firecrawl.\nIt adds a new field:\n\n```js\nrankChanged: true // or false\n```\n\nThis acts as the decision flag for the next step.\n\n---\n\n### 📝 **Step 5: Update Airtable Record**\n\n**Node Name:** `Update Airtable Record`\n**📌 Description:**\nUses the unique record ID to update the Airtable row with the new rank.\nOptional fields to update:\n\n* `New Rank`\n* `Rank Changed Date`\n* Any notes or audit logs\n\n---\n\n"
},
"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": "## ✅ **Section 3: Conditional Alert**\n\n### 🎯 Goal: Notify via Slack if the rank has changed.\n\n---\n\n### 🔀 **Step 6: Check if Rank Changed**\n\n**Node Name:** `Check if Rank Changed`\n**📌 Description:**\nAn `If` node that checks the `rankChanged` flag from the previous step.\n\n* **true:** Proceed to send Slack notification\n* **false:** Do nothing and stop workflow here\n\n---\n\n### 💬 **Step 7: Send Slack Notification**\n\n**Node Name:** `Send Slack Notification`\n**📌 Description:**\nPosts a message in a specified Slack channel with:\n\n* 📈 `Keyword`\n* 🔗 `Target URL`\n* 🆕 `New Rank`\n* 🕓 Timestamp or context\n\nThis ensures the team is alerted about SEO improvements or drops.\n"
},
"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": "=======================================\n WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n - YouTube: https://www.youtube.com/@YaronBeen/videos\n - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"
},
"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": "\n# 🚀 **Automated Rank Tracker Workflow (n8n)**\n\n---\n\n## 📌 **Purpose**\n\nThis workflow is designed to **automatically monitor keyword rankings**, compare them with new data from an SEO API (Firecrawl), and **alert your team on Slack** whenever there’s a change. It helps you stay on top of your SEO game **without manual checking**! ⚡\n\n---\n\n## 🧠 **What It Does — In 3 Simple Steps**\n\n---\n\n### 🔍 **1. Fetch & Merge Data**\n\n📦 **Source:** Airtable\n🌐 **Analyzer:** Firecrawl API\n🔗 **Process:** Merge both for side-by-side comparison\n\n* ✅ Grabs `Keyword`, `Target URL`, and `Current Rank` from Airtable\n* 🌐 Sends the `Keyword` to Firecrawl API to get the **Latest Rank**\n* 🔗 Merges original Airtable data + Firecrawl result\n* 🛠️ Prepares a complete object for decision-making\n\n---\n\n### 🧮 **2. Compare & Update Airtable**\n\n🧠 **Compare:** Current Rank vs Latest Rank\n📝 **Update:** Airtable if there's a difference\n\n* 🔍 Uses a Code node to check:\n\n ```js\n if (currentRank !== latestRank) → rankChanged = true\n ```\n* 📝 If there's a change, updates the original Airtable row with:\n\n * New Rank\n * Timestamp\n * Optional status/comments\n\n---\n\n### ✅ **3. Alert If Rank Changed**\n\n🧪 **Decision:** Did rank change?\n📣 **Notify:** Slack if yes\n\n* 🤖 Uses an `If` node to evaluate the `rankChanged` flag\n* 💬 Posts a message in Slack like:\n\n > “🎯 Keyword: *‘best running shoes’* rank has changed from *5 ➡ 2*! 🚀”\n\n---\n\n## 🧩 **Visual Flow Overview**\n\n```\nAirtable Trigger\n ↓\nFirecrawl HTTP Request\n ↓\nMerge Results\n ↓\nCompare Ranks (Code Node)\n ↓\nUpdate Airtable\n ↓\nCheck If Rank Changed (If Node)\n ↳ true → Send Slack Notification\n```\n\n---\n\n\n## 💡 Final Thoughts\n\nThis elegant workflow combines **data fetching, comparison, storage, and notification** in a streamlined way. It’s ideal for:\n\n* SEO Teams\n* Content Managers\n* Digital Agencies\n* Growth Hackers\n\n✨ **Set it and forget it — your ranks are now being watched 24/7.**\n\n---\n\nLet me know if you'd like a **shareable Markdown version** or a **Notion-style document**.\n"
},
"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": {
"479ab102-bd2c-4278-b869-4a72fbdaa639": {
"main": [
[
{
"node": "bf89e7d8-bc10-4e12-9671-3b21976f901d",
"type": "main",
"index": 0
}
]
]
},
"6cda42ab-19eb-4309-85f3-0d84a195931a": {
"main": [
[
{
"node": "02ed48b0-4e24-42ea-8856-8a25ca0446cb",
"type": "main",
"index": 0
}
],
[
{
"node": "dff0f256-73c3-4cdc-8b1c-db30070a3965",
"type": "main",
"index": 0
}
]
]
},
"bf89e7d8-bc10-4e12-9671-3b21976f901d": {
"main": [
[
{
"node": "6cda42ab-19eb-4309-85f3-0d84a195931a",
"type": "main",
"index": 0
}
]
]
},
"0cc36294-63c3-4ffb-9282-8a9d98a3606d": {
"main": [
[
{
"node": "3b38da51-67e5-45b5-a481-6b064c143eca",
"type": "main",
"index": 0
}
]
]
},
"dd7dfdd7-afc0-4e42-abbb-00a79bad0cd4": {
"main": [
[
{
"node": "0cc36294-63c3-4ffb-9282-8a9d98a3606d",
"type": "main",
"index": 0
},
{
"node": "3b38da51-67e5-45b5-a481-6b064c143eca",
"type": "main",
"index": 1
}
]
]
},
"3b38da51-67e5-45b5-a481-6b064c143eca": {
"main": [
[
{
"node": "479ab102-bd2c-4278-b869-4a72fbdaa639",
"type": "main",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
中級 - 人工知能, マーケティング
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
WordPress コンテンツジェネレータ v3
WordPress コンテンツジェネレーター v3
If
Set
Code
+
If
Set
Code
102 ノードAlex Kim
人工知能
AI YouTube分析アシスタント:コメント分析とインサイトレポート
AI YouTube分析アシスタント:コメント分析ツールとインサイトレポート生成ツール
If
Set
Code
+
If
Set
Code
19 ノードYaron Been
人工知能
GPT-4を使用して、自動のにLinkedInの投稿を生成し、プロフィールとグループに配信する
GPT-4 を使って LinkedIn の投稿を自動生成してプロフィールとグループへ配信する
If
Code
Limit
+
If
Code
Limit
14 ノードYaron Been
人工知能
SEO キーワード監視
YouTubeチャンネルのリード獲得とメールアウトラ/メールトリガー自動化、Apify と ZeroBounce を統合
If
Set
Gmail
+
If
Set
Gmail
16 ノードYaron Been
人工知能
FireCrawl要約ボット
Firecrawl AI搭載マーケットインテリジェンスロボット:自動ニュースインサイト配送
Code
Slack
Http Request
+
Code
Slack
Http Request
10 ノードYaron Been
人工知能
OpenAI、Google Sheets、Jina AI、Slackを活用したAI駆動型情報監視
AIベースの情報監視ワークフローで、OpenAI、Google Sheets、Jina AI、Slackを統合
If
Set
Code
+
If
Set
Code
31 ノードDataki
営業
ワークフロー情報
難易度
中級
ノード数13
カテゴリー2
ノードタイプ9
作成者
Yaron Been
@yaron-nofluffBuilding 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で表示 →
このワークフローを共有