AutomationFlowsAI & RAG › Generate & Publish SEO Blog Posts to Blogger

Generate & Publish SEO Blog Posts to Blogger

Original n8n title: Generate & Publish SEO Blog Posts to Blogger Using Openrouter AI & Mediastack News

Bygalelem @hagtic on n8n.io

This n8n workflow automates the entire pipeline of generating, formatting, and publishing SEO-rich blog posts to a Blogger site—ideal for auto service businesses.

Cron / scheduled trigger★★★★☆ complexityAI-powered16 nodesTelegramHTTP RequestAgentOpenRouter Chat
AI & RAG Trigger: Cron / scheduled Nodes: 16 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #6015 — we link there as the canonical source.

This workflow follows the Agent → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "G1eREYnY4yiandtW",
  "name": "My workflow",
  "tags": [],
  "nodes": [
    {
      "id": "86c9ee32-ba63-4a07-a1e6-62f964f706b7",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1700,
        100
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "489847e0-e119-49c7-b64f-116943472e6a",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 710,
        "height": 400,
        "content": "## Create Title, Slug & Meta\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ea71fac4-238b-4ed8-9e12-390b76993b3d",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "disabled": true,
      "position": [
        -1760,
        40
      ],
      "parameters": {
        "color": 4,
        "height": 220,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "d7bbe474-1314-4126-91e5-37417717a1ce",
      "name": "Send a text message",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1900,
        100
      ],
      "parameters": {
        "text": "=Success! Your blog post was created at {{ $now }} \ntitle : {{ $('Parsing').item.json.title }}",
        "chatId": "$vars.telegramchatid",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2,
      "alwaysOutputData": false
    },
    {
      "id": "b074b82d-0989-47ee-8835-8a38f95cd617",
      "name": "Mediastack News",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1220,
        100
      ],
      "parameters": {
        "url": "https://api.mediastack.com/v1/news?categories=technology&limit=1&languages=en",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpQueryAuth"
      },
      "credentials": {
        "httpQueryAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "a2a9fb36-f8d7-4aad-bf85-5213754d1fc8",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        880,
        20
      ],
      "parameters": {
        "color": 3,
        "width": 420,
        "height": 380,
        "content": "## Write SEO Optimized Blog Post\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "1e647313-6fd6-4c3f-9f9b-f4763db57fd9",
      "name": "Copywriter AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        960,
        100
      ],
      "parameters": {
        "text": "=Act as a professional blogger, SEO specialist, and generative engine optimization (GEO) expert. Write a\ncomprehensive, data-driven, and easy-to-follow WordPress blog post that is 1,000 words long. Follow the structure\nand guidelines below strictly, while using advanced generative techniques to ensure the content is engaging,\npersonalized, and semantically optimized for search engines.\nSEO Requirements:\nBlog Post Title: {{ $('Parsing').first().json.title }}\nFocus Keyword: {{ $('Parsing').first().json.meta }}\nRelated keywords : {{ $('Parsing').first().json.meta }}\nHighlight the focus keyword \u201c {{ $('Parsing').first().json.meta }} \u201c by making the font bold and Link the focus\nkeyword to \u2018 https://gdroid.tn \u2018 using an HTML hyperlink, Use the following exact HTML format for the focus keyword:\n<a href=\" https://gdroid.tn \" target=\"_blank\"><strong> {{ $('Parsing').first().json.meta }} </strong></a>`.\nHighlight the related keyword \u201c {{ $('Parsing').first().json.meta }} \u201c by making the font bold and Link the related\nkeyword to \u2018 https://gdroid.tn \u2018 using an HTML hyperlink, Use the following exact HTML format for the focus keyword:\n<a href=\"gdroid.tn\" target=\"_blank\"><strong>{{ $('Parsing').first().json.meta }}</strong></a>`.\nIntegrate the focus keyword naturally throughout the post, particularly in the headline, subheadings, and within the\nfirst 100 words.Use semantic variations and related keywords to enhance search engine context and relevance.\nContent Structure:\nStart with an intriguing, data-backed question that captures the reader\u2019s attention immediately.Ensure the question\nis relevant to \u201cYour recipe,\u201d challenges common beliefs, and evokes curiosity.\nSeamlessly incorporate the focus keyword within the first 100 words.\nIngredients List (H2):\n<img src=\"{{ $('Genarate image').item.json.photos[0].src.original }}\"/>\nProvide a clear, organized list of ingredients, including suggestions for potential substitutions.Use engaging\nlanguage and sensory descriptions to enhance reader interest.\nTiming (H2):\nDetail the preparation, cooking, and total time required.\nInclude any data or comparisons that can add context (e.g., \u201c90 minutes, which is 20% less time than the average\nrecipe\u201d).\nStep-by-Step Instructions (H3 for each step):\n<img src=\"{{ $('Genarate image').item.json.photos[1].src.original }}\"/>\nPresent clear, easy-to-follow steps with dynamic and personalized language.\nInclude actionable tips and tricks that add value, ensuring each step feels engaging and tailored.\nNutritional Information (H2):\nProvide comprehensive nutritional details, citing data insights where applicable.\nHealthier Alternatives for the Recipe (H2):\nSuggest modifications or ingredient swaps that maintain flavor while enhancing nutritional benefits.\nOffer creative ideas to make the recipe adaptable for various dietary needs.\nServing Suggestions (H2):\nOffer creative, appealing serving suggestions that resonate with a broad audience. Incorporate personalized tips\nthat make the dish more inviting and versatile.\nCommon Mistakes to Avoid (H2):\nList typical pitfalls with insights on how to avoid them.Use a mix of data insights and experiential advice to enhance\ncredibility.\nStoring Tips for the Recipe (H2):\nProvide practical advice on storing leftovers or prepping ingredients ahead of time.\nEmphasize best practices for maintaining freshness and flavor.\nConclusion (H2):\nSummarize the key points of the recipe.\nInclude a dynamic call-to-action that invites readers to try the recipe, share feedback, or explore similar posts.\nFAQs (H2):\nCreate a set of anticipated questions and clear, engaging answers to address common reader concerns.Ensure\nthe FAQs add further value by clarifying any potential ambiguities in the post.\nAdditional Instructions:\nTone & Style: Write in a friendly, easy-to-follow tone. The content should be engaging, informative, and\ntrustworthy.Personalization & Data Insights: Leverage generative AI capabilities to infuse personalized\nrecommendations and data-driven insights. Tailor content to meet diverse reader needs.\nSemantic Richness: Optimize for semantic search by using structured data, related keywords, and natural\nlanguage variations. User Engagement: Incorporate interactive elements or suggestions for readers to explore\nadditional content (e.g., links to related recipes or cooking tips). Quality & Readability: Prioritize clarity, logical flow,\nand readability. Ensure that every section is useful and maintains high-quality standards.\n\nBegin directly with the content and avoid any preambles such as 'Here's the article' or similar., write the heading\nwithout starting with \u2018section\u2018\n\nOnly output the HTML content without preamble or further explanation. Generate WordPress-compatible HTML for a blog post based on the provided content.\n\n### CONTENT PROCESSING:\n- Process all content \n- Preserve all original facts, information, and URLs\n- Format according to the specifications below\n\n### REQUIRED STRUCTURE (IN THIS ORDER):\n1. Title (H2)\n2. Estimated reading time\n3. Key takeaways (3-5 bullet points)\n4. Table of contents (linked to all headings)\n5. Main content (with proper heading hierarchy)\n\n### STYLING REQUIREMENTS:\n- Style Override: Include a style section with !important declarations\n- Links: All hyperlinks, TOC items, and FAQ questions must be #00c2ff (blue)\n- Headings: All headings need a bottom border in #00c2ff with padding\n- Spacing: Add <br><br> between each major section\n\n### ENGAGEMENT FORMATTING:\n- Use bold, italics, bullet points, quotes, and highlighting for emphasis\n- Create proper paragraph structure with appropriate line breaks\n- NO emojis allowed\n- Use whitespace strategically for readability\n\n### Blogger COMPATIBILITY:\n- Use Blogger block\n- Add heading IDs starting with \"h-\" for better TOC linking\n- Ensure all styles use !important to override theme styles\n\nDO NOT include any explanations, code tags, or comments. Output ONLY the raw HTML.\n\n",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "770936a2-a027-481a-b5c7-a6a26dc501e0",
      "name": "OpenRouter Chat Model2",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        960,
        260
      ],
      "parameters": {
        "model": "microsoft/mai-ds-r1:free",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "a406d8d5-4582-4c2f-9f97-d380cb099aea",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "disabled": true,
      "position": [
        -1320,
        40
      ],
      "parameters": {
        "color": 4,
        "width": 340,
        "height": 280,
        "content": "Get NEWS"
      },
      "typeVersion": 1
    },
    {
      "id": "df6976ce-a924-4fa8-a84b-f21f5e957b1c",
      "name": "Cleanup HTML ",
      "type": "n8n-nodes-base.set",
      "position": [
        1460,
        100
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "0afb2988-1481-4b04-b16d-fb33c50a16d0",
              "name": "content",
              "type": "string",
              "value": "={{ $json.output.replaceAll('```html', '').replaceAll('```','') }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "f16a6603-9703-48b9-bb9a-d759c2993169",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        80,
        100
      ],
      "parameters": {
        "text": "=**Create a slug, blog post title, and meta description for the following blog post:**\n{{ $json.data[0].title }}\n**Slug Guidelines:**\n- Keep it concise (4-5 words maximum).\n- Include the primary keyword related to recruitment or HR.\n- Use hyphens to separate words.\n- Avoid unnecessary words, articles, or prepositions.\n- Ensure it reflects the main topic of the blog post.\n- Make it readable and relevant for both users and search engines.\n\n**Title Guidelines:**\n- Avoid AI words like \"Transform\" or \"Revolutionize\" and similar overused terms.\n- Avoid using a colon (:) in the title.\n- Never structure it as a primary/secondary title separated by a colon.\n- Include the primary keyword related to recruitment or HR (e.g., 'AI in recruitment' or 'talent acquisition trends').\n- Clearly inform users what they can expect from reading the blog post.\n- Be concise and engaging, ideally 50-60 characters long.\n- Incorporate power words that appeal to HR professionals and recruiters.\n\n**Meta Description Guidelines:**\n- Avoid AI words like \"Transform\" or \"Revolutionize\" and similar overused terms.\n- Be concise: Limit to 150-160 characters to ensure full visibility in search results.\n- Include keywords: Naturally incorporate primary recruitment-related keywords to enhance relevance and visibility.\n- Provide value: Clearly convey the benefits or insights readers will gain from the article.\n- Be engaging: Use action-oriented language or a thought-provoking question to encourage clicks.\n- Align with content: Accurately reflect the blog post's content to meet user expectations and reduce bounce rates.\n- Highlight expertise: Subtly emphasize SocialFind's authority in the recruitment field.\n\nYour output must be a single valid JSON object with these 3 fields:\n-slug: The slug\n-title: The blog post title\n-meta: The meta description  \n\nEach should be presented without any additional text, explanation, quotation marks, or formatting.\n",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "e6cde9bc-9585-493d-9fae-9389db2ac56c",
      "name": "OpenRouter Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        80,
        260
      ],
      "parameters": {
        "model": "microsoft/mai-ds-r1:free",
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4a4e3d8c-3fd5-44d6-8d76-7344b973d715",
      "name": "Parsing",
      "type": "n8n-nodes-base.code",
      "position": [
        460,
        100
      ],
      "parameters": {
        "jsCode": "const rawInput = $input.first().json.output;\nconst cleaned = rawInput.replace(/```json|```/g, '').trim();\nconst jsonObject = JSON.parse(cleaned);\nreturn [jsonObject];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "b6e78c05-8b99-4bf0-9b06-4846e1425b45",
      "name": "HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1680,
        100
      ],
      "parameters": {
        "url": "https://www.googleapis.com/blogger/v3/blogs/$vars.bloggerid/posts",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"kind\": \"blogger#post\",\n  \"blog\": {\n    \"id\": \"{{$vars.bloggerid}}\"\n  },\n  \"title\": \"{{ $('Parsing').first().json.title }}\",\n  \"content\": \"{{ $json.content.replaceAll(\"\\n\",\"\").replaceAll(\"\\\"\",\"\\'\").replaceAll('>        <',\"\").replaceAll('>    <',\"\").split(\"\\n\\n\") }}\"\n\n} ",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "oAuth2Api",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "56afb94c-db6c-4ce9-8c64-cf4a5aa25c73",
      "name": "Send a text message1",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -360,
        100
      ],
      "parameters": {
        "text": "=\ud83d\uddbc Generating Image ...\n------------------------------\n{{ $json.photos[0].src.landscape }}\n------------------------------\n{{ $json.photos[1].src.landscape }}",
        "chatId": "$vars.telegramchatid",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2,
      "alwaysOutputData": false
    },
    {
      "id": "3499d257-993a-4f00-9aa0-458b1ef356d2",
      "name": "Genarate image",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -740,
        100
      ],
      "parameters": {
        "url": "https://api.pexels.com/v1/search",
        "options": {},
        "sendQuery": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "query",
              "value": "={{ $json.data[0].title }}"
            },
            {
              "name": "per_page",
              "value": "2"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "d7b7bdfd-53b8-4ab8-bac2-f986cd2e83ec",
  "connections": {
    "Parsing": {
      "main": [
        [
          {
            "node": "Copywriter AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Parsing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "Send a text message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Cleanup HTML ": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Genarate image": {
      "main": [
        [
          {
            "node": "Send a text message1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mediastack News": {
      "main": [
        [
          {
            "node": "Genarate image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Mediastack News",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Copywriter AI Agent": {
      "main": [
        [
          {
            "node": "Cleanup HTML ",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send a text message1": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model2": {
      "ai_languageModel": [
        [
          {
            "node": "Copywriter AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This n8n workflow automates the entire pipeline of generating, formatting, and publishing SEO-rich blog posts to a Blogger site—ideal for auto service businesses.

Source: https://n8n.io/workflows/6015/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

This workflow is for beauty salons who want consistent, high‑quality social media content without writing every post manually. It also suits agencies and automation builders who manage multiple beauty

Telegram, Google Sheets Trigger, Agent +26
AI & RAG

Who Is This For?

Telegram, Google Sheets Trigger, Lm Chat Mistral Cloud +17
AI & RAG

This cutting-edge n8n workflow is a comprehensive automation solution designed to streamline various Instagram operations. It combines an intelligent AI chatbot for direct message management, automate

Agent, OpenRouter Chat, Output Parser Structured +4
AI & RAG

AI powered Automated Crypto Insights with Chart-img and BrowserAI

HTTP Request, Output Parser Structured, OpenRouter Chat +2
AI & RAG

This workflow automatically generates stock market insights for selected tickers (e.g. GAZP, SBER, LKOH) using historical data, technical indicators, and an AI model. The results are then sent to Tele

Agent, OpenRouter Chat, Telegram Trigger +5