Blog-Publisher – vollständige Automatisierung der KI-gesteuerten Inhaltserstellung, -optimierung und -veröffentlichung

Experte

Dies ist ein Content Creation, Multimodal AI-Bereich Automatisierungsworkflow mit 35 Nodes. Hauptsächlich werden If, Set, Code, Discord, HttpRequest und andere Nodes verwendet. Automatisierung der Blog-Erstellung und -Veröffentlichung mit Gemini, Ideogram AI und WordPress

Voraussetzungen
  • Discord Bot Token oder Webhook
  • Möglicherweise sind Ziel-API-Anmeldedaten erforderlich
  • Google Sheets API-Anmeldedaten
  • OpenAI API Key
  • Google Gemini API Key
Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in n8n
{
  "id": "3LIrbty8O6tBURFs",
  "meta": {
    "instanceId": "bc8ca75c203589705ae2e446cad7181d6f2a7cc1766f958ef9f34810e53b8cb2",
    "templateCredsSetupCompleted": true
  },
  "name": "Blog Publisher – Complete AI-Powered Content Research, Creation, Optimization, and Publishing Automation",
  "tags": [],
  "nodes": [
    {
      "id": "2c398975-2f74-43e6-8450-e69392869450",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -3696,
        256
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "id": "xbK4CzkeE3YrIut4",
          "name": "Shan API"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ece45d3f-313b-48ab-b086-1250b695ea86",
      "name": "Google Gemini Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -3312,
        256
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "id": "xbK4CzkeE3YrIut4",
          "name": "Shan API"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "9823b639-66c5-4cd8-b47d-94dc080e7eae",
      "name": "Recherche zum Thema durchführen",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -3696,
        32
      ],
      "parameters": {
        "text": "=Keyword: {{ $json['Focus Keyword'] }}\nContent Topic: {{ $json['Content Topic'] }}",
        "options": {
          "systemMessage": "I will provide a content topic and a targeted keyword. As an expert content writer, please conduct comprehensive research and deliver a detailed, actionable report that will help craft a highly engaging, user-focused blog post. Your report should include:\n\nSearch Intent Analysis: Identify the main search intent (informational, commercial, navigational, transactional) behind the keyword and explain why it matters for content strategy.\n\nTop Competitor Insights: Analyze the top 5–10 ranking pages for this keyword. For each, provide the title, meta description, URL, and a brief summary highlighting their approach and content strengths.\n\nContent Gaps & Opportunities: Identify what these top pages miss or underdeliver on, revealing opportunities to make my blog more valuable and distinctive.\n\nAudience Profile & Needs: Describe the target audience’s demographics, pain points, desires, and the key questions they want answered related to this topic.\n\nTrending Subtopics & Related Keywords: List relevant, trending subtopics and related keywords, including search volume and difficulty metrics where available, to help expand and deepen the blog content.\n\nLSI Keywords & Related Keywords: Provide 5 LSI (Latent Semantic Indexing) keywords and 5 closely related keywords that can be incorporated to improve SEO and content relevance.\n\nSEO-Optimized Blog Outline: Propose a detailed blog outline with clear headings and subheadings designed to maximize SEO impact and reader engagement.\n\nTrusted Sources & References: Provide a curated list of credible sources and references for fact-checking and citation to ensure authoritative and trustworthy content.\n\nPlease make your recommendations practical and focused on creating an engaging, authoritative, and SEO-friendly blog post that stands out."
        },
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "e34a1527-856d-4d83-975e-87eb5b79a5ec",
      "name": "Inhalt verfassen",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -3312,
        32
      ],
      "parameters": {
        "text": "=- **Keyword:** {{ $('Pass 1 Blog Topic').item.json['Focus Keyword'] }}\n- **Content Topic:** {{ $('Pass 1 Blog Topic').item.json['Content Topic'] }}\n- **Target Page:** {{ $('Pass 1 Blog Topic').item.json['Target Page'] }}\n- **Words:** {{ $('Pass 1 Blog Topic').item.json.Words }}\n\n - Reaesrch: {{ $json.output }}",
        "options": {
          "systemMessage": "=You are an expert content writer. Write an 800–1000 word article in clear, easy-to-read, conversational English. Use short sentences, avoid heavy jargon, and explain technical terms simply for an Indian investor audience. The content must have a high readability score.\n\nInstructions:\nStart content with the Question.\nDo not use AI Terms Like Imagine\nUse simple HTML with only these tags: <h1>, <h2>, <p>, <ul>, <ol>, <b>, <i>, <a>.\n\nStart directly with the content section—no <head>, <footer>, CSS, or extra formatting.\n\nIntegrate the primary keyword naturally without repeating it too closely. Use it once in a subheading (<h2> or <h3>), phrased naturally (e.g., instead of “buy sell unlisted shares India,” write “buy and sell unlisted shares in India”).\n\nAdd relevant LSI keywords naturally to provide context.\n\nInclude at least 3 internal links to relevant pages on the target website. Use descriptive anchor text (not exact keywords) and apply this inline CSS to each link: <a style=\"color: #256181; font-weight: 700\">.\n\nKeep paragraphs short (3–4 sentences) to enhance readability.\n\nAvoid repeated points and do not use em dashes or \\n line breaks in the HTML.\n\nWrite as if explaining to a smart friend, with practical tips and examples tailored for Indian investors.\n\nAvoid keyword stuffing; integrate keywords naturally throughout the text.\n\nDeliverable:\nOutput only the HTML content—no explanations or extra comments."
        },
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "7db51d0d-7467-4b9b-983d-032e0b7b8a5c",
      "name": "Blog-Veröffentlichungsstatus prüfen",
      "type": "n8n-nodes-base.if",
      "position": [
        -4896,
        48
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "ad02573b-8ca4-4657-9e4a-ee6490d9cce3",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "={{ $json['Weekly Frequency'] }}",
              "rightValue": "={{ $now.toFormat('ccc') }}"
            },
            {
              "id": "b170466b-7f1b-4575-8749-1e6185cae9f8",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json['Weekly Frequency'] }}",
              "rightValue": "Daily"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "a7d9e1aa-bc4f-4ca8-806c-aca8a8fd7762",
      "name": "1 Blog-Thema übergeben",
      "type": "n8n-nodes-base.code",
      "position": [
        -3936,
        32
      ],
      "parameters": {
        "jsCode": "// Keep only the first item\nreturn [items[0]];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "da031e62-192f-4be0-b4e0-df6a60153fe0",
      "name": "Inhaltsqualität prüfen",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -2960,
        32
      ],
      "parameters": {
        "text": "={{ $json.output }}",
        "options": {
          "systemMessage": "Please evaluate this content for its humanized writing style by answering the following:\n\nDoes the content use a conversational tone that feels natural and friendly?\n\nAre personal pronouns (I, you, we) used effectively to engage the reader?\n\nAre sentences short, clear, and easy to understand?\n\nIs the language simple and free of jargon or complex terms?\n\nDoes the content show empathy or emotional connection with the reader?\n\nAre stories, examples, or anecdotes used to illustrate key points?\n\nAre questions included to engage the reader and encourage interaction?\n\nIs the writing primarily in active voice rather than passive?\n\nDoes the content include contractions to sound more natural?\n\nAre paragraphs short and well-structured with bullet points or lists where appropriate?\n\nDoes the content convey authenticity and personality?\n\nIs the content clearly focused on the reader’s needs, problems, or desires?\n\n\n\nI want what to improve in the content as output "
        },
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "62c25f2c-5311-4df1-8d55-202bbc033843",
      "name": "Qualitätsprobleme beheben",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -2608,
        32
      ],
      "parameters": {
        "text": "=Original Content\n\n{{ $('Write the Content').item.json.output }}\n\nQC Feedback\n{{ $json.output }}",
        "options": {
          "systemMessage": "Assume you are and expert content writer and this the feedback of the content. do not change the entire flow of the content just optimize the content base on the feedback\nInstructions:\nContent should in the same html structure\nNo Extra comment or expiations\nPlain simple HTML format content\nDo not Use the ```html and \\n for line break\n1 mistake related to each\nIncorrect comma usage (missing commas, comma splices, or overusing commas)\nMisuse of apostrophes (its vs. it’s)\nOveruse or misuse of semicolons and colons\nNot using periods or question marks properly\nExtra spaces between words or after punctuation"
        },
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "0405e8b2-c932-448d-8cee-6b1438fd5be7",
      "name": "Über Elemente iterieren",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -4640,
        32
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "542bf697-9b66-44c9-a1ee-46a013828b00",
      "name": "Zeitplan-Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "disabled": true,
      "position": [
        -5312,
        48
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 7
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "bcd14b3a-e70e-4faf-a1a1-db7284796a08",
      "name": "Wenn",
      "type": "n8n-nodes-base.if",
      "position": [
        -4176,
        48
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "8cc1c059-bf65-4864-bfb8-12c56481789a",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json['Focus Keyword'] }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "a951e883-0729-4142-9dbc-b9a834bf7408",
      "name": "Ausstehende Themen aus Content Req & Posting abrufen",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -4384,
        48
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "Approved",
              "lookupColumn": "Status for Approval"
            },
            {
              "lookupValue": "Pending",
              "lookupColumn": "Live Link"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Content Req & Posting"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "YOUR_GOOGLE_SHEET_URL"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "Aam5AW9oxNhvIGd2",
          "name": "Shiv@incrementors.com - Google Sheets"
        }
      },
      "executeOnce": false,
      "notesInFlow": false,
      "typeVersion": 4.5,
      "alwaysOutputData": true
    },
    {
      "id": "aa0b797c-fcea-4fdf-8e11-86f16fc453b6",
      "name": "Finale Daten vorbereiten",
      "type": "n8n-nodes-base.set",
      "position": [
        -2048,
        32
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "879ec377-94b8-47da-a593-5876e2f35f28",
              "name": "S NO",
              "type": "string",
              "value": "={{ $('Pass 1 Blog Topic').item.json['S.No.'] }}"
            },
            {
              "id": "be91b8ad-22cd-4a72-ae04-0e9a44df7cb2",
              "name": "Blog Title",
              "type": "string",
              "value": "={{ $('Pass 1 Blog Topic').item.json['Content Topic'] }}"
            },
            {
              "id": "b04eb3ec-c74d-42ca-95ea-190f05e160d2",
              "name": "Content",
              "type": "string",
              "value": "={{ $json.excludedH1 }}"
            },
            {
              "id": "5267bc48-e1ec-454b-b85c-c87b9f789123",
              "name": "Auth Code",
              "type": "string",
              "value": "={{ $('Fetch Client Details').item.json['Blog Posting Auth Code'] }}"
            },
            {
              "id": "23e11954-9595-448c-ad95-ad56c652edf5",
              "name": "Website URL",
              "type": "string",
              "value": "={{ $('Fetch Client Details').item.json['Website URL'] }}"
            },
            {
              "id": "e9e5d5fd-973f-4f82-b433-a6ef83697dc5",
              "name": "OnPage SEO",
              "type": "string",
              "value": "={{ $('Fetch Client Details').item.json['On Page Sheet'] }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "e9ff48d2-dce5-48bb-a96f-fb7a141a7afe",
      "name": "Blog-Titel extrahieren",
      "type": "n8n-nodes-base.code",
      "position": [
        -2256,
        32
      ],
      "parameters": {
        "jsCode": "// Get the input string\nlet content = $input.first().json.output;\n\n// Remove all newlines\ncontent = content.replace(/\\n/g, '');\n\n// Remove em dashes\ncontent = content.replace(/—/g, ' ');\n\n// Extract the content inside the first <h1> tag\nconst h1Match = content.match(/<h1[^>]*>(.*?)<\\/h1>/);\nconst h1Content = h1Match ? h1Match[1] : '';\n\n// Remove all <h1> tags and their content from the original string\nconst excludedH1Content = content.replace(/<h1[^>]*>.*?<\\/h1>/g, '');\n\nreturn {\n  json: {\n    h1Only: h1Content,\n    excludedH1: excludedH1Content\n  }\n};\n"
      },
      "typeVersion": 2
    },
    {
      "id": "c48aad87-2bf1-4b0a-a75d-b9722cc6a2da",
      "name": "Image Prompt generieren",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -1808,
        32
      ],
      "parameters": {
        "text": "=Heading: {{ $('Edit Fields').item.json['Blog Title'] }}\nContent:\n{{ $('Edit Fields').item.json.Content }}",
        "options": {
          "systemMessage": "=You are an expert AI image prompt creator for Blog Posting visuals. Based on the following Blog Content, write a rich, vivid, and visually appealing image prompt that would generate a share-worthy image. Use Realistic image with Real Persons. Keep it realistic, aesthetic, and optimized for high engagement.\n\nThis is the Heading so first make it 4 to 5 words and that should be added on the image\n{{ $json['Blog Title'] }}\n\nin output just give me plain prompt do not include supportive text and explanatory words.\nand supporting words like \"image prompt:\"\n\nOUTPUT REQUIREMENTS:\n\nBackground: Light beige to gradient with a subtle golden overlay effect on the edges.\n\nStyle: Clean, professional business graphic with detailed visual hierarchy\n\nColors: Choose 2-3 vibrant professional colors\n\nText: Heading\n\nText Heading should be in bottom or left side\n\nAVOID:\n\nComplex graphics or multiple elements\n\nLong text or paragraphs\n\nUnrealistic photos\n\nCluttered designs\n\nDo not use other text on the image only add the heading\n\nDo not use icons\n\nMake the image realistic, not animated or cartoonish"
        },
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "b4f07418-a028-456c-8846-e650c23172c4",
      "name": "OpenAI Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -1808,
        256
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "tCrLCjVYHhZMrULt",
          "name": "OpenAI - Keyword Research"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "8e9a83db-005f-42bc-acf3-ec2b5dcfc354",
      "name": "Bild generieren",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        -1456,
        32
      ],
      "parameters": {
        "url": "https://api.ideogram.ai/v1/ideogram-v3/generate",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "=prompt",
              "value": "={{ $json.output }}"
            },
            {
              "name": "rendering_speed",
              "value": "QUALITY"
            },
            {
              "name": "resolution",
              "value": "1248x832"
            },
            {
              "name": "num_images",
              "value": "1"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Api-Key",
              "value": "YOUR_IDEOGRAM_API_KEY"
            }
          ]
        }
      },
      "typeVersion": 4.2,
      "alwaysOutputData": true
    },
    {
      "id": "e3118468-ded3-4e2c-a9ee-aceb2e2b034f",
      "name": "Bild als Binärdatei herunterladen",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1200,
        32
      ],
      "parameters": {
        "url": "={{ $json.data[0].url }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "44a76ee6-989a-4c06-a524-d59830a151b2",
      "name": "Bild in Wordpress hochladen",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -960,
        32
      ],
      "parameters": {
        "url": "={{ $('Edit Fields').item.json['Website URL'] }}wp-json/wp/v2/media",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "binaryData",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Disposition",
              "value": "=attachment; filename=\"{{ $('Edit Fields').item.json['Blog Title'] }}\".jpg"
            },
            {
              "name": "Content-Type",
              "value": "image/png"
            },
            {
              "name": "Authorization",
              "value": "Basic YOUR_WORDPRESS_AUTH_CODE"
            }
          ]
        },
        "inputDataFieldName": "data"
      },
      "typeVersion": 4.2
    },
    {
      "id": "ed475e00-2634-40f8-8f86-8c3dd862e013",
      "name": "Bild als Beitragsbild festlegen",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -496,
        32
      ],
      "parameters": {
        "url": "={{ $('Edit Fields').item.json['Website URL'] }}wp-json/wp/v2/posts/{{ $('Publish Blog on Wordpress').item.json.id }}",
        "method": "POST",
        "options": {},
        "sendQuery": true,
        "sendHeaders": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "featured_media",
              "value": "={{ $('Upload Image in Wordpress').item.json.id }}"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Basic YOUR_WORDPRESS_AUTH_CODE"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "4f3f2c07-8388-4ce6-95c1-dad017caa081",
      "name": "Blog auf Wordpress veröffentlichen",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -736,
        32
      ],
      "parameters": {
        "url": "={{ $('Edit Fields').item.json['Website URL'] }}wp-json/wp/v2/posts",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "title",
              "value": "={{ $('Edit Fields').item.json['Blog Title'] }}"
            },
            {
              "name": "content",
              "value": "=<img src=\"{{ $json.guid.rendered }}\">\n{{ $('Edit Fields').item.json.Content }}"
            },
            {
              "name": "status",
              "value": "publish"
            },
            {
              "name": "categories",
              "value": "=7"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Basic YOUR_WORDPRESS_AUTH_CODE"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "eb1985f3-8c5c-47d4-82a9-7f4fa0d07115",
      "name": "Google Gemini Chat Model2",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -2960,
        272
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "id": "xbK4CzkeE3YrIut4",
          "name": "Shan API"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e4217e7b-d2bf-4612-9fd1-b1531d6a076d",
      "name": "Google Gemini Chat Model3",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -2608,
        256
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "id": "xbK4CzkeE3YrIut4",
          "name": "Shan API"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "9fb77411-6eb6-4fb7-859a-3df4eecd47d6",
      "name": "Kundendetails abrufen",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -5088,
        48
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "Automation",
              "lookupColumn": "Project Status"
            },
            {
              "lookupValue": "Automation",
              "lookupColumn": "Blog Publishing"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "YOUR_GOOGLE_SHEET_URL",
          "cachedResultName": "Project"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "YOUR_GOOGLE_SHEET_URL"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "Aam5AW9oxNhvIGd2",
          "name": "Shiv@incrementors.com - Google Sheets"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "fc4a1ec4-7119-4e53-8684-e9892392c98a",
      "name": "Blog-Status in Sheet aktualisieren",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -256,
        32
      ],
      "parameters": {
        "columns": {
          "value": {
            "S.No.": "={{ $('Edit Fields').item.json['Blog S No'] }}",
            "Live Link": "={{ $json.link }}"
          },
          "schema": [
            {
              "id": "S.No.",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "S.No.",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Focus Keyword",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Focus Keyword",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Content Topic",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Content Topic",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Target Page",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Target Page",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Words",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Words",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Brief URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Brief URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Content URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Content URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status for Approval ",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status for Approval ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Live Link",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Live Link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "S.No."
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Content Req & Posting"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "YOUR_GOOGLE_SHEET_URL"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "Aam5AW9oxNhvIGd2",
          "name": "Shiv@incrementors.com - Google Sheets"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "38ba9188-ccc3-4d64-86de-2563673d5722",
      "name": "Neuen Blog ankündigen",
      "type": "n8n-nodes-base.discord",
      "position": [
        -64,
        32
      ],
      "webhookId": "YOUR_DISCORD_API_KEY",
      "parameters": {
        "content": "=<@1314814621777133568>\n\nA new article has just been published on the Hair Transplant Istanbul Website.\n\nCheck it out here: \n{{ $json['Live Link'] }}\n\n✅ Please review the content and let us know if you’d like any changes to the article publishing automation. ",
        "guildId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_DISCORD_API_KEY",
          "cachedResultUrl": "https://discord.com/channels/YOUR_DISCORD_API_KEY",
          "cachedResultName": "Project Delivery"
        },
        "options": {},
        "resource": "message",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_DISCORD_API_KEY"
        }
      },
      "credentials": {
        "discordBotApi": {
          "id": "FrBoFzk7ybIfABi8",
          "name": "Nathan - Shan"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "6a3e2526-b010-438d-b437-d47f12994b7c",
      "name": "Notizzettel9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -6240,
        -752
      ],
      "parameters": {
        "color": 4,
        "width": 720,
        "height": 1232,
        "content": "## 🚀 Automation Summary\n\n### 🔹 What does this automation do?\nThis automation takes care of the entire blog publishing process automatically.\nYou don’t have to manually research, write, design, or post content. Instead:\n\nYou just add or approve a blog topic in Google Sheets.\nThe system will then research the topic, write the blog, create an image, publish it on WordPress, update the sheet, and notify your team – all without any manual effort.\n\n### 🔹 How does it work step by step?\n**Start –** The workflow runs on a schedule (like every morning) or whenever you trigger it manually.\n\n**Read Topics from Google Sheets –** It looks at your content sheet and picks only those topics that are approved and still pending to be published.\n\n**AI Research & Content Writing -**\nGoogle Gemini (AI) does in-depth research on the topic and target keyword.\nThen it writes a full 800–1000 word article in clear, simple language with SEO optimization.\n\n**Quality Check & Fixes: -**\nThe blog draft is checked to make sure it sounds natural, human-friendly, and well-written. Any grammar, flow, or readability issues are automatically improved.\n\n**Image Creation –**\nAn image prompt is created based on the blog title and content.\nThe prompt is sent to Ideogram AI, which generates a realistic and professional blog cover image.\n\n**Publish to WordPress –**\nThe article and image are uploaded directly to your WordPress site.\nThe image is set as the blog’s featured image, so the post looks complete and professional.\n\n**Update & Notify –**\nThe blog’s live link is saved back into your Google Sheet.\nA notification is sent to your team on Discord with the new blog link, so everyone knows it’s published.\n\n### 🔹 Which APIs power this workflow?\n**Google Sheets API →** To read topics and update status.\n**Google Gemini API →** For research and blog writing.\n**OpenAI API →** To create creative image prompts.\n**Ideogram API →** To generate professional blog images.\n**WordPress REST API →** To publish content and images.\n**Discord API →** To notify the team automatically.\n\n### 🔹 Why is this useful?\nSaves hours of manual work (research, writing, image design, posting).\nEnsures blogs are always SEO-optimized and published on time.\nKeeps everything organized in Google Sheets.\nKeeps the team updated instantly after publishing.\n\n### 👉 In short: Approve a topic in Google Sheets → The automation handles everything else from research to publishing.\n\n📩 For any questions or support, please contact:\n✉️ info@incrementors.com\nor fill out this form: https://www.incrementors.com/contact-us/"
      },
      "typeVersion": 1
    },
    {
      "id": "8d955eea-8ca4-4dc3-a962-dde31f266308",
      "name": "Notizzettel",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -5152,
        -256
      ],
      "parameters": {
        "color": 6,
        "width": 448,
        "height": 464,
        "content": "### 🟡 Get the Client Data:\n\"Fetches client data from Google Sheet (Auth Code, Website URL, SEO Sheet, Frequency, etc.). Only picks rows where Project Status = Active and Blog Publishing = Automation.\"\n\n### 🟡 Check Blog Publishing Status:\n\"Checks the client’s publishing schedule. If Weekly Frequency matches the current day or is set to Daily, the workflow continues; otherwise, it stops.\""
      },
      "typeVersion": 1
    },
    {
      "id": "d492e8f8-bcef-4309-913e-72c4db55c785",
      "name": "Notizzettel1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -4432,
        -256
      ],
      "parameters": {
        "color": 6,
        "width": 640,
        "height": 464,
        "content": "### 🟡 Fetch Pending Topics from Content Req & Posting:\n\"Reads the client’s sheet and selects only those topics where status is Approved and Live Link is still Pending, meaning they are ready for publishing.\"\n\n### 🟡 If condition:\n\"Checks whether the selected topic has a Focus Keyword; if empty the process stops, if not empty the workflow continues to content creation.\"\n\n### 🟡 Pass 1 Blog Topic:\n\"Keeps only the first blog topic from the list so that the workflow processes one topic at a time.\""
      },
      "typeVersion": 1
    },
    {
      "id": "86cfa16b-0242-4452-a388-ab19a5d560e4",
      "name": "Notizzettel3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3760,
        -256
      ],
      "parameters": {
        "color": 6,
        "width": 704,
        "height": 464,
        "content": "### 🟡 Do the Research on the Topic:\n\"Generates an in-depth research report for the given keyword and topic, covering search intent, top competitors, content gaps, audience profile, trending subtopics, related keywords, and a suggested SEO-friendly blog outline.\"\n\n### 🟡 Write the Content:\n\"Creates a complete 800–1000 word blog article in clean HTML format, written in a simple and conversational style, naturally integrating keywords, adding internal links, and ensuring readability for the target audience.\""
      },
      "typeVersion": 1
    },
    {
      "id": "66771410-a54c-4ef6-ad58-716b3d2ce537",
      "name": "Notizzettel4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3008,
        -256
      ],
      "parameters": {
        "color": 6,
        "width": 640,
        "height": 464,
        "content": "### 🟡 Check Content Quality:\n\"Analyzes the generated blog to ensure it reads like human-written content by checking tone, conversational flow, readability, sentence clarity, empathy, active voice usage, and overall engagement, then produces feedback on what to improve.\"\n\n### 🟡 Fix the Quality Issues:\n\"Takes the feedback from the quality check and improves the content by correcting grammar, punctuation, sentence flow, and readability issues while keeping the same HTML format, structure, and overall meaning of the blog intact.\""
      },
      "typeVersion": 1
    },
    {
      "id": "8c3d27bd-8e51-4e00-818f-8eb948acb67d",
      "name": "Notizzettel5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2336,
        -256
      ],
      "parameters": {
        "color": 6,
        "width": 816,
        "height": 464,
        "content": "### 🟡 Extract Blog Title:\n\"Processes the AI-generated HTML content to extract the main <h1> title separately and remove it from the body text, ensuring the blog title and content are clean and distinct.\"\n\n### 🟡 Prepare Final Data:\n\"Collects all required fields (S. No, Blog Title, Content, Auth Code, Website URL, and OnPage SEO) into a structured format, preparing the data for final publishing to the correct WordPress site.\"\n\n### 🟡 Sticky Note for Generate Image Prompt:\n\"Generates a clean and professional AI image prompt from the blog title and content—keeping it realistic, minimal, and visually engaging for use in blog cover images.\""
      },
      "typeVersion": 1
    },
    {
      "id": "f3e4c9e8-a7db-4fc5-91fa-8b6d60bdbf24",
      "name": "Notizzettel6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1504,
        -256
      ],
      "parameters": {
        "color": 6,
        "width": 448,
        "height": 464,
        "content": "### 🟡 Image Generate:\n\"This node connects to the Ideogram AI API and submits the blog’s tailored image prompt with fixed quality, resolution, and count settings, generating a polished blog visual and returning its direct URL for the next steps.\"\n\n### 🟡 Download Image in Binary File:\n\"This node takes the image URL produced by Ideogram, downloads the file, and converts it into binary format, making the image immediately usable for storage, sharing, or publishing on WordPress.\""
      },
      "typeVersion": 1
    },
    {
      "id": "f2d28eb9-1156-4782-b62b-516b9260dc88",
      "name": "Notizzettel7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1008,
        -256
      ],
      "parameters": {
        "color": 6,
        "width": 672,
        "height": 464,
        "content": "### 🟡 Upload Image in WordPress:\n\"Uploads the generated blog image into the WordPress media library using REST API, assigns it a filename from the blog title, and returns a unique media ID for use in the post.\"\n\n### 🟡 Publish Blog on WordPress:\n\"Creates and publishes a new WordPress post with the blog title, content, and embedded uploaded image, returning the post ID for further updates.\"\n\n### 🟡 Set Image as Featured Image:\n\"Updates the published blog post to assign the uploaded image as the featured thumbnail, ensuring the blog appears with a proper cover image on the website.\""
      },
      "typeVersion": 1
    },
    {
      "id": "68b98d34-8aa7-4624-9434-c9046e9be648",
      "name": "Notizzettel8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -304,
        -256
      ],
      "parameters": {
        "color": 6,
        "width": 368,
        "height": 464,
        "content": "### 🟡 Update row in sheet:\n\"Finds the correct row in the Google Sheet using s. no. and updates it with the blog’s Live Link, keeping the publishing tracker accurate and up-to-date.\"\n\n### 🟡 Send a message (Discord):\n\"Sends an automated notification to the project’s Discord channel, tagging the responsible person and sharing the live blog link so the team can review it immediately.\""
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "cfad449c-e406-4804-8a8d-88063a1f9fd2",
  "connections": {
    "bcd14b3a-e70e-4faf-a1a1-db7284796a08": {
      "main": [
        [
          {
            "node": "a7d9e1aa-bc4f-4ca8-806c-aca8a8fd7762",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "0405e8b2-c932-448d-8cee-6b1438fd5be7",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8e9a83db-005f-42bc-acf3-ec2b5dcfc354": {
      "main": [
        [
          {
            "node": "e3118468-ded3-4e2c-a9ee-aceb2e2b034f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0405e8b2-c932-448d-8cee-6b1438fd5be7": {
      "main": [
        [],
        [
          {
            "node": "a951e883-0729-4142-9dbc-b9a834bf7408",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "542bf697-9b66-44c9-a1ee-46a013828b00": {
      "main": [
        [
          {
            "node": "9fb77411-6eb6-4fb7-859a-3df4eecd47d6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a7d9e1aa-bc4f-4ca8-806c-aca8a8fd7762": {
      "main": [
        [
          {
            "node": "9823b639-66c5-4cd8-b47d-94dc080e7eae",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e34a1527-856d-4d83-975e-87eb5b79a5ec": {
      "main": [
        [
          {
            "node": "da031e62-192f-4be0-b4e0-df6a60153fe0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e9ff48d2-dce5-48bb-a96f-fb7a141a7afe": {
      "main": [
        [
          {
            "node": "aa0b797c-fcea-4fdf-8e11-86f16fc453b6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b4f07418-a028-456c-8846-e650c23172c4": {
      "ai_languageModel": [
        [
          {
            "node": "c48aad87-2bf1-4b0a-a75d-b9722cc6a2da",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "aa0b797c-fcea-4fdf-8e11-86f16fc453b6": {
      "main": [
        [
          {
            "node": "c48aad87-2bf1-4b0a-a75d-b9722cc6a2da",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9fb77411-6eb6-4fb7-859a-3df4eecd47d6": {
      "main": [
        [
          {
            "node": "7db51d0d-7467-4b9b-983d-032e0b7b8a5c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "da031e62-192f-4be0-b4e0-df6a60153fe0": {
      "main": [
        [
          {
            "node": "62c25f2c-5311-4df1-8d55-202bbc033843",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "62c25f2c-5311-4df1-8d55-202bbc033843": {
      "main": [
        [
          {
            "node": "e9ff48d2-dce5-48bb-a96f-fb7a141a7afe",
            "type": "main",
            "index": 0
          },
          {
            "node": "0405e8b2-c932-448d-8cee-6b1438fd5be7",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c48aad87-2bf1-4b0a-a75d-b9722cc6a2da": {
      "main": [
        [
          {
            "node": "8e9a83db-005f-42bc-acf3-ec2b5dcfc354",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2c398975-2f74-43e6-8450-e69392869450": {
      "ai_languageModel": [
        [
          {
            "node": "9823b639-66c5-4cd8-b47d-94dc080e7eae",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "ece45d3f-313b-48ab-b086-1250b695ea86": {
      "ai_languageModel": [
        [
          {
            "node": "e34a1527-856d-4d83-975e-87eb5b79a5ec",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "eb1985f3-8c5c-47d4-82a9-7f4fa0d07115": {
      "ai_languageModel": [
        [
          {
            "node": "da031e62-192f-4be0-b4e0-df6a60153fe0",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "e4217e7b-d2bf-4612-9fd1-b1531d6a076d": {
      "ai_languageModel": [
        [
          {
            "node": "62c25f2c-5311-4df1-8d55-202bbc033843",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "4f3f2c07-8388-4ce6-95c1-dad017caa081": {
      "main": [
        [
          {
            "node": "ed475e00-2634-40f8-8f86-8c3dd862e013",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "44a76ee6-989a-4c06-a524-d59830a151b2": {
      "main": [
        [
          {
            "node": "4f3f2c07-8388-4ce6-95c1-dad017caa081",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ed475e00-2634-40f8-8f86-8c3dd862e013": {
      "main": [
        [
          {
            "node": "fc4a1ec4-7119-4e53-8684-e9892392c98a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "fc4a1ec4-7119-4e53-8684-e9892392c98a": {
      "main": [
        [
          {
            "node": "38ba9188-ccc3-4d64-86de-2563673d5722",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7db51d0d-7467-4b9b-983d-032e0b7b8a5c": {
      "main": [
        [
          {
            "node": "0405e8b2-c932-448d-8cee-6b1438fd5be7",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9823b639-66c5-4cd8-b47d-94dc080e7eae": {
      "main": [
        [
          {
            "node": "e34a1527-856d-4d83-975e-87eb5b79a5ec",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e3118468-ded3-4e2c-a9ee-aceb2e2b034f": {
      "main": [
        [
          {
            "node": "44a76ee6-989a-4c06-a524-d59830a151b2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a951e883-0729-4142-9dbc-b9a834bf7408": {
      "main": [
        [
          {
            "node": "bcd14b3a-e70e-4faf-a1a1-db7284796a08",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Häufig gestellte Fragen

Wie verwende ich diesen Workflow?

Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.

Für welche Szenarien ist dieser Workflow geeignet?

Experte - Content-Erstellung, Multimodales KI

Ist es kostenpflichtig?

Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.

Workflow-Informationen
Schwierigkeitsgrad
Experte
Anzahl der Nodes35
Kategorie2
Node-Typen12
Schwierigkeitsbeschreibung

Für fortgeschrittene Benutzer, komplexe Workflows mit 16+ Nodes

Externe Links
Auf n8n.io ansehen

Diesen Workflow teilen

Kategorien

Kategorien: 34