8
n8n 中文网amn8n.com

从Google Trends到WordPress的SEO博客生成器

高级

这是一个Content Creation, Miscellaneous, Multimodal AI领域的自动化工作流,包含 24 个节点。主要使用 Set, Code, Aggregate, Wordpress, HttpRequest 等节点。 使用GPT和Perplexity AI从Google Trends生成SEO博客文章到WordPress

前置要求
  • 可能需要目标 API 的认证凭证
  • Google Sheets API 凭证
  • OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "meta": {
    "instanceId": "e5475e3f5ea4317f0b981b80d6948e4bd2ba92e8c8af9ecbbaf8d90708882234"
  },
  "nodes": [
    {
      "id": "de7e7025-fa2a-42f1-a0b7-ded8f9268d0a",
      "name": "获取 Google Trends",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1328,
        608
      ],
      "parameters": {
        "url": "https://serpapi.com/search?engine=google_trends",
        "options": {},
        "sendQuery": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpQueryAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "q",
              "value": "=ai agent"
            },
            {
              "name": "geo",
              "value": "US"
            },
            {
              "name": "hl",
              "value": "en"
            },
            {
              "name": "date",
              "value": "={{ $now.minus({ days: 3 }).format('yyyy-MM-dd') }} {{ $now.format('yyyy-MM-dd') }}"
            },
            {
              "name": "data_type",
              "value": "RELATED_QUERIES"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "dbc47254-c260-44aa-86b8-183b68e9d500",
      "name": "转换研究格式",
      "type": "n8n-nodes-base.set",
      "position": [
        2736,
        608
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "23b8e8c4-9191-415a-9661-1b60d413528a",
              "name": "research",
              "type": "string",
              "value": "={{ $json.choices[0].message.content.replaceAll(\"[1]\", \" - source: \" +$json.citations[0]).replaceAll(\"[2]\",\" - source:\" +$json.citations[1]).replaceAll(\"[3]\",\" - source: \" +$json.citations[2]).replaceAll(\"[4]\",\" - source: \"+$json.citations[3]).replaceAll(\"[5]\",\" - source: \"+$json.citations[4]).replaceAll(\"[6]\",\" - source: \"+$json.citations[5]).replaceAll(\"[7]\",\" - source: \"+$json.citations[6]).replaceAll(\"[8]\",\" - source: \"+$json.citations[7]).replaceAll(\"[9]\",\" - source: \"+$json.citations[8]).replaceAll(\"[10]\",\" - source: \"+$json.citations[9]) }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "4209d536-18d9-40f2-98b2-c0854d4cc82a",
      "name": "准备内部链接数据集",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        1728,
        896
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "previous-posts"
      },
      "typeVersion": 1
    },
    {
      "id": "e1acf94f-f7af-455d-b9f6-79808d9611a9",
      "name": "存储封面图片 URL",
      "type": "n8n-nodes-base.set",
      "position": [
        1392,
        1184
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "1f0541df-05ab-4e3d-a5d8-3904579fc8a9",
              "name": "image-url",
              "type": "string",
              "value": "={{ $json.images_results[1].original }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "d78d08b5-2307-42cf-915c-ad31d3d6ade1",
      "name": "由 Github 模型提供支持",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        1088,
        608
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "0080012b-4f35-4588-a5e1-fcea4f9bd871",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        -128
      ],
      "parameters": {
        "color": 5,
        "width": 920,
        "height": 2056,
        "content": "# 从 Google Trends 到 WordPress 自动生成 SEO 博客文章"
      },
      "typeVersion": 1
    },
    {
      "id": "468c22d2-13a1-4110-a4bb-de96342c36c0",
      "name": "提取前 2 个趋势",
      "type": "n8n-nodes-base.set",
      "position": [
        1600,
        608
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "={\n  \"most-trending\": {\n\n    \"#1\": { \n\n      \"query\":\"{{ $json.related_queries.rising[0].query }}\",\n      \"score\":\"{{ $json.related_queries.rising[0].extracted_value }}\"\n\n    },\n\n\n    \"#2\": { \n\n      \"query\":\"{{ $json.related_queries.rising[1].query }}\",\n      \"score\":\"{{ $json.related_queries.rising[1].extracted_value }}\"\n\n    }\n  }\n}"
      },
      "typeVersion": 3.4
    },
    {
      "id": "a4a393e5-2802-4986-b088-eeefaa0ee43b",
      "name": "过滤高流量关键词",
      "type": "n8n-nodes-base.code",
      "position": [
        1840,
        608
      ],
      "parameters": {
        "jsCode": "// Get the top array from your JSON\nconst topItems = $('Get Google Trends').first().json.related_queries.top;\n\n// Filter the items to only include those with extracted_value > 30\nconst filtered = topItems.filter(item => item.extracted_value > 30);\n\n// Map the filtered items to their query values and join them with commas\nconst resultString = filtered.map(item => item.query).join(', ');\n\n// Return the result in a new JSON property\nreturn [{ json: { result: resultString } }];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "ef2c3a0e-a0e0-4226-950a-e9ffa76d308e",
      "name": "选择最佳 SEO 主题",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        2112,
        608
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4",
          "cachedResultName": "GPT-4"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are part of a team that creates world class blog posts. Your job is to choose the topic for each blog post. \n\nThe blog posts are posted on the website of a [COMPANY NAME + DESCRIPTION + PRODUCTS + TARGET MARKET]. The blog posts are mainly posted as part of an SEO campaign to get [COMPANY NAME] to rank high for its products and services.\n\nIn this instance, you are given a list of 2 keywords which have been trending the most on Google news search over the past few days. \n\nYour job is to pick one which you think would make for the most relevant blog post with the best SEO outcomes for the client. \n\nThe keywords have two attributes: \n\n1. query: This attribute determines the search query that users have been searching for which is trending. \n\n2. value: This attribute determines what percentage increase the keyword has seen compared to previous periods (i.e. the increase in search volume). \n\nYou must choose one out of the taking into consideration both the relevance of the keyword for [COMPANY NAME's] SEO efforts and the comparative trendiness determined by the value attribute. \n\nOutput the keyword you decided to post a blog on and nothing else. Don't explain your reasoning. Just output the keyword. \n\nThis instance: \n\nKeyword 1:\n{{ $('Extract Top 2 Trends').item.json['most-trending']['#1'].toJsonString() }} \n\nKeyword2: \n{{ $('Extract Top 2 Trends').item.json['most-trending']['#2'].toJsonString() }} "
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "UTi3Hh062Ao84SGu",
          "name": "OpenAi Averis"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "12da6344-e832-46ac-bdd7-4a0f3bb40db0",
      "name": "研究可靠来源",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2496,
        608
      ],
      "parameters": {
        "url": "https://api.perplexity.ai/chat/completions",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"model\": \"sonar-pro\",\n  \"messages\": [\n    {\n      \"role\": \"system\",\n      \"content\": \"Act as a professional news researcher who is capable of finding detailed summaries about a news topic from highly reputable sources.\"\n    },\n    {\n      \"role\": \"user\",\n      \"content\": \" Research the following topic and return everything you can find: '{{ $('Select Best SEO Topic').item.json.message.content }}' \"\n    }\n  ]\n}\n",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "3P23x7U4eYW4f3nU",
          "name": "Twitter-API.io"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "1ed934d0-921a-4deb-a794-27ea4c1ac8f2",
      "name": "起草博客内容",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1120,
        896
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4",
          "cachedResultName": "GPT-4"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are part of a team that creates world class blog posts for SEO purposes. \n\nEvery week your team posts one blog post on the most trending news in this week of AI. As the copywriter for the blogs, you are provided with the folling information: \n\n- Query: The topic of this weeks blog post. This is the most trending news in the space.\n\n- Other keywords: This is a list of some high search volume keywords in the AI space. The goal is to include some of these into the blog post naturally. This is only optional and dependant on the natural dependancy of this weeks topic to the blog post. Include any of the keywords in the blog, if you can do so naturally without changing the meaning of the blog post.  \n\n\n- Research findings: This is research found from very reputable resources in relation to the topic of the post. Your blog post must be based off this research.\n\n\nGiven the said info, you must write the blog post.\n \nThe blog post must: \n\n- Place the query in the blog title, H1 header and early in the introduction. \n\n- Include all detail in research findings. When including the research points, make sure to also include their source URL so that the copywriter can use them as hyperlinks. (source url for each statement is given in the research findings next to the text)\n\n- Be very detailed. \n\n- Be using tone similar to that of a reporter, invoking curiosity and excitement and thrill in the readers.\n\n- Flow naturally and make sense. \n\n- Be at minimum 1500 to 2000 words long. \n\n- Be suitable for a year 5 reading level. \n\nMake sure to create the entire blog post draft in your first output. Don't stop or cut it short. \n\nYour output must be the blog post and nothing else.\n\nHere are the details of your next blog post project: \n\nQuery: \n{{ $('Select Best SEO Topic').item.json.message.content }}\n\nDetailed Research: \n{{ $json.research }}\n\nWrite the blog post in perfect spanish.\n"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "UTi3Hh062Ao84SGu",
          "name": "OpenAi Averis"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "ce242655-b51c-4ff3-8374-1ac63dc6b2f7",
      "name": "查找之前的文章",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1520,
        896
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1D-dJ9OrRpJQ3QrUqXDQSZnJOf4iO0kw17A3G_gxDI3k/edit#gid=0",
          "cachedResultName": "Hoja 1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1D-dJ9OrRpJQ3QrUqXDQSZnJOf4iO0kw17A3G_gxDI3k",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1D-dJ9OrRpJQ3QrUqXDQSZnJOf4iO0kw17A3G_gxDI3k/edit?usp=drivesdk",
          "cachedResultName": "CONTROL BLOG WEB"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "OeyDebGZ6hnXoE0m",
          "name": "Google Sheets daniel@averis.es"
        }
      },
      "typeVersion": 4.5,
      "alwaysOutputData": true
    },
    {
      "id": "d3d3e76f-12fb-4bac-b4af-d61cf2b0c9c3",
      "name": "插入内部 SEO 链接",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1904,
        896
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "o1-mini-2024-09-12",
          "cachedResultName": "O1-MINI-2024-09-12"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are part of a SPANISH team that creats world class blog posts. \n\nYou are in charge of internal linking between blog posts. \n\nFor each new blog post that comes across your desk, your job is to look through previously posted blogs and make atleast 5 internal links. \n\nTo choose the best internal linking opportunities you must: \n\n- Read the previous blog post summaries and look through their keywords. If there is a match where the previous blog post is highly relevant, then this is an internal linking opportunity. \n\n- Do not link if it is not highly relevant. Only make a link if it makes sense and adds value for the reader. \n\nOnce you've found the best linking opportunities, you must update the blog post with the internal links. To do this you must: \n\n- Add the link of the previous blog post at the relevant section of the new blog post. Drop the URL at the place which makes most sense. Later we will hyperlink the URL to the word in the blog post which it is placed next to. So your placing is very important. \n\nMake sure to not delete any existing URLs or change anything about the blog post provided to you. You must only add new internal linking URLs and output the revised blog post. \n\nYour output must be the blog post given to you plus the new urls. Don't remove any info. \n\nDon't return the previous blog posts. Only return the current blog post with the internal links added.\n\nCurrent blog Post: \n{{ $('Draft Blog Content').item.json.message.content }}\n\nPrevious Blog Posts: \n{{ $json['previous-posts'].toJsonString().split() }}\n\n"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "UTi3Hh062Ao84SGu",
          "name": "OpenAi Averis"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "8638519e-a8cb-4259-bb4f-de1e7d13dfda",
      "name": "生成语义化 HTML",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        2288,
        896
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "o1-preview",
          "cachedResultName": "O1-PREVIEW"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=DO NOT OUTPUT ANYTHING OTHER THAN THE CODE. I want you to follow the layout of the template as a guide to generate the WordPress code for a blog post. Here are the rules to follow:\n\nThe blog post should have a title, estimated reading time, key takeaways, table of contents, body, and FAQ in this order.\nMake it engaging by using italics, dot points, quotes, bold, spaces, and sometimes new lines. Never use emojis.\nThe blog post will have some URLs referenced next to certain keyphrases to show where the info came from. You must hyperlink the keyphrase with the provided URL so that the reader can click on the referenced URL. It is critical you get this right.\nWrap the entire content in a container <div> with inline CSS that sets the text color to white (#ffffff), uses a legible font such as Arial, sans-serif, and sets line-height to 1.6.\nEnsure that all non-heading text elements (e.g., paragraphs, list items) have an inline style or embedded style that sets their font size to 20px and color to white (#ffffff) using !important to override theme styles.\nHyperlinks, points in the table of contents, and FAQ questions must be styled in blue (#00c2ff).\nAll headings and subheadings should have an underline implemented via a bottom border in blue (#00c2ff) with appropriate padding.\nPlace a double break (<br><br>) between each section to improve readability.\nDo not output any extra text or mention code tags like HTML''' around the output; just output the HTML code.\nBlog post: \n\n{{ $json.message.content }}\n\nHere's an example of a well formatted output:\n\n<div style=\"color: #ffffff; font-family: Arial, sans-serif; line-height: 1.6;\"> <style> p, .wp-block-paragraph, ul.wp-block-list, li { color: #ffffff !important; font-size: 20px !important; } a { color: #00c2ff !important; } </style> <h1 id=\"h-devin-ai-the-hype-and-reality-of-an-ai-software-engineer\" class=\"wp-block-heading\" style=\"border-bottom: 2px solid #00c2ff; padding-bottom: 5px;\">Devin AI: The Hype and Reality of an AI Software Engineer</h1> <br><br> <p class=\"estimated-reading-time\" style=\"color: #ffffff; font-size: 20px !important;\">Estimated reading time: 5 minutes</p> <br><br> <h2 id=\"h-key-takeaways\" class=\"wp-block-heading\" style=\"border-bottom: 2px solid #00c2ff; padding-bottom: 5px;\"><strong>Key Takeaways</strong></h2> <br><br> <ul class=\"wp-block-list\"> <li><mark style=\"background-color: #ffd966;\"><strong>Devin AI</strong></mark> claims to be the world's first fully autonomous AI software engineer.</li> <br><br> <li>Initial demos and claims have generated significant <mark style=\"background-color: #ffff00;\">hype</mark> and interest.</li> <br><br> <li>Critics argue some capabilities may be exaggerated or misleading.</li> <br><br> <li>Real-world testing reveals both <em>strengths</em> and <em>limitations</em>.</li> <br><br> <li>The true impact on software engineering remains to be seen.</li> </ul> <br><br> <div class=\"wp-block-yoast-seo-table-of-contents yoast-table-of-contents\"> <h2 style=\"color: #ffffff; border-bottom: 2px solid #00c2ff; padding-bottom: 5px;\">Table of contents</h2> <br><br> <ul> <li><a href=\"#h-devin-ai-the-hype-and-reality-of-an-ai-software-engineer\" data-level=\"1\">Devin AI: The Hype and Reality of an AI Software Engineer</a></li> <br><br> <li><a href=\"#h-key-takeaways\" data-level=\"2\">Key Takeaways</a></li> <br><br> <li><a href=\"#h-what-is-devin-ai\" data-level=\"2\">What is Devin AI?</a></li> <br><br> <li><a href=\"#h-the-hype-around-devin-ai\" data-level=\"2\">The Hype Around Devin AI</a></li> <br><br> <li><a href=\"#h-putting-devin-to-the-test\" data-level=\"2\">Putting Devin to the Test</a></li> <br><br> <li><a href=\"#h-the-reality-check\" data-level=\"2\">The Reality Check</a></li> <br><br> <li><a href=\"#h-the-future-of-ai-in-software-development\" data-level=\"2\">The Future of AI in Software Development</a></li> <br><br> <li><a href=\"#h-frequently-asked-questions\" data-level=\"2\">Frequently Asked Questions</a></li> </ul> </div> <br><br> <p>Devin AI has burst onto the tech scene, promising to revolutionize software development as we know it. But does this AI-powered coding assistant live up to the hype? Let's dive into what Devin AI really is, what it can do, and what developers are saying after putting it to the test.</p> <br><br> <!-- Rest of blog post content goes here --> </div>\n"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "UTi3Hh062Ao84SGu",
          "name": "OpenAi Averis"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "06cc783c-61c6-4a9a-b323-262ba6fb1c25",
      "name": "创建 SEO Slug",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        2608,
        896
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini",
          "cachedResultName": "GPT-4O-MINI"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=Create a slug for the following blog post: \n{{ $('Insert Internal SEO Links').item.json.message.content }}\n\nA slug in a blog post is the part of the URL that comes after the domain name and identifies a specific page. It is typically a short, descriptive phrase that summarizes the content of the post, making it easier for users and search engines to understand what the page is about. For example, in the URL www.example.com/intelligent-agents, the slug is intelligent-agents. A good slug is concise, contains relevant keywords, and avoids unnecessary words to improve readability and SEO. \n\nThe slug must be 4 or 5 words max and must include the primary keyword of the blog post which is {{ $('Select Best SEO Topic').item.json.message.content }}\n\nYour output must be the slug and nothing else so that I can copy and paste your output and put it at the end of my blog post URL to post it right away. "
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "UTi3Hh062Ao84SGu",
          "name": "OpenAi Averis"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "b205436c-d54d-4feb-b61a-623283be197f",
      "name": "生成博客标题",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        2992,
        896
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-2024-11-20",
          "cachedResultName": "GPT-4O-2024-11-20"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=Extract the blog post title from the following blog post: \n{{ $('Insert Internal SEO Links').item.json.message.content }}\n\n\n\nThe blog post title must include the primary keyword '{{ $('Select Best SEO Topic').item.json.message.content }}' and must inform the users right away of what they can expect from reading the blog post. \n\n- Don't put the output in \"\". The output should just text with no markdown or formatting. \n\nYour output must only be the blog post title and nothing else. "
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "UTi3Hh062Ao84SGu",
          "name": "OpenAi Averis"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "c27126d7-1bd6-4d92-834f-e72fb99051a5",
      "name": "创建元描述",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        3376,
        896
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-2024-11-20",
          "cachedResultName": "GPT-4O-2024-11-20"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=Create a good meta description for the following blog post: \n\n{{ $('Insert Internal SEO Links').item.json.message.content }}\n\nA good meta description for a blog post that is SEO-optimized should:\n- Be Concise: Stick to 150-160 characters to ensure the full description displays in search results. \n- Include Keywords: Incorporate primary keywords naturally to improve visibility and relevance to search queries.\n\nPrimary keyword = {{ $('Select Best SEO Topic').item.json.message.content }}\n\n\n- Provide Value: Clearly describe what the reader will learn or gain by clicking the link. \n\n- Be Engaging: Use persuasive language, such as action verbs or a question, to encourage clicks. \n\n- Align with Content: Ensure the description accurately reflects the blog post to meet user expectations and reduce bounce rates. \n\nYour output must only be the meta description and nothing else. \n"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "UTi3Hh062Ao84SGu",
          "name": "OpenAi Averis"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "056b2d84-3167-41cf-860e-716d32ed6847",
      "name": "获取封面图片",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1136,
        1184
      ],
      "parameters": {
        "url": "https://serpapi.com/search?engine=google_images",
        "options": {},
        "sendQuery": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpQueryAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "q",
              "value": "={{ $('Select Best SEO Topic').item.json.message.content }}"
            },
            {
              "name": "gl",
              "value": "us"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "16721919-87a9-4cb5-b71b-26cc24a68f93",
      "name": "发布到 WordPress",
      "type": "n8n-nodes-base.wordpress",
      "position": [
        1616,
        1184
      ],
      "parameters": {
        "title": "={{ $('Generate Blog Title').item.json.message.content }}",
        "additionalFields": {
          "slug": "={{ $('Create SEO Slug').item.json.message.content }}",
          "status": "draft",
          "sticky": false,
          "content": "=<img src=\"{{ $json['image-url'] }}\" alt=\"Cover Image\">\n{{ $('Generate Semantic HTML').item.json.message.content }}}",
          "authorId": 5,
          "categories": [
            43
          ],
          "postTemplate": {
            "values": {}
          },
          "commentStatus": "closed"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "9298b0b6-c50e-47b7-9150-a25d618118ff",
      "name": "记录已发布文章",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1856,
        1184
      ],
      "parameters": {
        "columns": {
          "value": {
            "Link": "={{ $json.link }}",
            "Título": "={{ $json.title.raw }}"
          },
          "schema": [
            {
              "id": "Link",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Título",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Título",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Transcripción",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Transcripción",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Estado",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Estado",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "HTML",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "HTML",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TXJxLUoreFyiz4Fx9U_Lna3Zpgjs0kfgUgd2Ng4uXQw/edit#gid=0",
          "cachedResultName": "Hoja 1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1TXJxLUoreFyiz4Fx9U_Lna3Zpgjs0kfgUgd2Ng4uXQw",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TXJxLUoreFyiz4Fx9U_Lna3Zpgjs0kfgUgd2Ng4uXQw/edit?usp=drivesdk",
          "cachedResultName": "VIDEO TRANSCRIPT PARA BLOG - LA TRIBU DIVISUAL"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "OeyDebGZ6hnXoE0m",
          "name": "Google Sheets daniel@averis.es"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "7220c803-86a4-42d0-aa00-d739d919f390",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1056,
        -128
      ],
      "parameters": {
        "width": 712,
        "height": 552,
        "content": "## 自动化 SEO 博客生成器"
      },
      "typeVersion": 1
    },
    {
      "id": "520ca0f8-0744-44ca-8823-15efd58bb12e",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1840,
        -128
      ],
      "parameters": {
        "color": 3,
        "width": 664,
        "height": 456,
        "content": "### 设置要求"
      },
      "typeVersion": 1
    },
    {
      "id": "824a8054-9c38-4a93-99dd-bba5e62b0f7e",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3056,
        352
      ],
      "parameters": {
        "color": 4,
        "width": 424,
        "height": 424,
        "content": "## SEO 优化特性"
      },
      "typeVersion": 1
    },
    {
      "id": "300b8f94-07c4-4e8f-8e4a-a569b0c4bfb3",
      "name": "便签4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2160,
        1184
      ],
      "parameters": {
        "color": 4,
        "width": 824,
        "height": 104,
        "content": "Google Sheets 模板:"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "Create SEO Slug": {
      "main": [
        [
          {
            "node": "Generate Blog Title",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get Google Trends",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Cover Image": {
      "main": [
        [
          {
            "node": "Store Cover Image URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Google Trends": {
      "main": [
        [
          {
            "node": "Extract Top 2 Trends",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Draft Blog Content": {
      "main": [
        [
          {
            "node": "Find Previous Posts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Find Previous Posts": {
      "main": [
        [
          {
            "node": "Prepare Internal Link Dataset",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Blog Title": {
      "main": [
        [
          {
            "node": "Create Meta Description",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Top 2 Trends": {
      "main": [
        [
          {
            "node": "Filter High Volume Keywords",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish to WordPress": {
      "main": [
        [
          {
            "node": "Log Published Post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Select Best SEO Topic": {
      "main": [
        [
          {
            "node": "Research Reliable Sources",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Store Cover Image URL": {
      "main": [
        [
          {
            "node": "Publish to WordPress",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Semantic HTML": {
      "main": [
        [
          {
            "node": "Create SEO Slug",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert Research Format": {
      "main": [
        [
          {
            "node": "Draft Blog Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Meta Description": {
      "main": [
        [
          {
            "node": "Fetch Cover Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Insert Internal SEO Links": {
      "main": [
        [
          {
            "node": "Generate Semantic HTML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Research Reliable Sources": {
      "main": [
        [
          {
            "node": "Convert Research Format",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter High Volume Keywords": {
      "main": [
        [
          {
            "node": "Select Best SEO Topic",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Internal Link Dataset": {
      "main": [
        [
          {
            "node": "Insert Internal SEO Links",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

高级 - 内容创作, 杂项, 多模态 AI

需要付费吗?

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

工作流信息
难度等级
高级
节点数量24
分类3
节点类型9
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

作者
Daniel Lianes

Daniel Lianes

@daniellianes

As a strategic consultant in Automation and AI, I'm passionate about helping business owners simplify operations and scale smarter. My approach is a partnership: I listen to your unique needs to design custom solutions that solve real challenges. But I don't just build and leave—I also coach your team to master these new systems, empowering you for sustainable success. Beyond client work, I'm a true enthusiast, always exploring new possibilities and sharing what I learn with the community.

外部链接
在 n8n.io 查看

分享此工作流