블로그 게시자 – 완전한 AI 기반 콘텐츠 연구, 제작, 최적화 및 게시 자동화
고급
이것은Content Creation, Multimodal AI분야의자동화 워크플로우로, 35개의 노드를 포함합니다.주로 If, Set, Code, Discord, HttpRequest 등의 노드를 사용하며. Gemini, Ideogram AI 및 WordPress를 사용한 블로그 생성 및 게시 자동화
사전 요구사항
- •Discord Bot Token 또는 Webhook
- •대상 API의 인증 정보가 필요할 수 있음
- •Google Sheets API 인증 정보
- •OpenAI API Key
- •Google Gemini API Key
사용된 노드 (35)
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 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 채팅 모델",
"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 채팅 모델1",
"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": "Do the Research on the Topic",
"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": "Write the Content",
"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": "Check Blog Publishing Status",
"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": "Pass 1 Blog Topic",
"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": "Check Content Quality",
"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": "Fix the Quality Issues",
"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": "항목 반복",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-4640,
32
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "542bf697-9b66-44c9-a1ee-46a013828b00",
"name": "일정 트리거",
"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": "If",
"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": "Fetch Pending Topics from Content Req & Posting",
"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": "Prepare Final Data",
"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": "Extract Blog Title",
"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": "Genererate Image Prompt",
"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 채팅 모델1",
"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": "Image Generate",
"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": "Download Image in Binary File",
"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": "Upload Image in Wordpress",
"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": "설정 Image as Featured Image",
"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": "Publish Blog on Wordpress",
"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 채팅 모델2",
"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 채팅 모델3",
"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": "Fetch Client Details",
"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": "Update Blog Status in Sheet",
"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": "Announce New Blog",
"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": "메모9",
"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": "메모",
"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": "메모1",
"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": "메모3",
"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": "메모4",
"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": "메모5",
"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": "메모6",
"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": "메모7",
"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": "메모8",
"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": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"8e9a83db-005f-42bc-acf3-ec2b5dcfc354": {
"main": [
[
{
"node": "e3118468-ded3-4e2c-a9ee-aceb2e2b034f",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[],
[
{
"node": "a951e883-0729-4142-9dbc-b9a834bf7408",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"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
}
]
]
},
"OpenAI Chat Model1": {
"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": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"c48aad87-2bf1-4b0a-a75d-b9722cc6a2da": {
"main": [
[
{
"node": "8e9a83db-005f-42bc-acf3-ec2b5dcfc354",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini Chat Model": {
"ai_languageModel": [
[
{
"node": "9823b639-66c5-4cd8-b47d-94dc080e7eae",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Google Gemini Chat Model1": {
"ai_languageModel": [
[
{
"node": "e34a1527-856d-4d83-975e-87eb5b79a5ec",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Google Gemini Chat Model2": {
"ai_languageModel": [
[
{
"node": "da031e62-192f-4be0-b4e0-df6a60153fe0",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Google Gemini Chat Model3": {
"ai_languageModel": [
[
{
"node": "62c25f2c-5311-4df1-8d55-202bbc033843",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"4f3f2c07-8388-4ce6-95c1-dad017caa081": {
"main": [
[
{
"node": "Set Image as Featured Image",
"type": "main",
"index": 0
}
]
]
},
"44a76ee6-989a-4c06-a524-d59830a151b2": {
"main": [
[
{
"node": "4f3f2c07-8388-4ce6-95c1-dad017caa081",
"type": "main",
"index": 0
}
]
]
},
"Set Image as Featured Image": {
"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": "Loop Over Items",
"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
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 콘텐츠 제작, 멀티모달 AI
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
WordPress 블로그 자동화 프로페셔널 에디션(심층 연구) v2.1 마켓
GPT-4o, Perplexity AI 및 다국어 지원을 사용한 SEO 최적화 블로그 생성 자동화
If
Set
Xml
+
If
Set
Xml
125 노드Daniel Ng
콘텐츠 제작
YouTube 비디오 기반 자율 블로그 게시
ChatGPT, Sheets, Apify, Pexels, WordPress를 사용하여 YouTube 비디오를 자동으로 블로그에 게시합니다.
If
Set
Code
+
If
Set
Code
80 노드Oriol Seguí
콘텐츠 제작
批量 SEO 콘텐츠 생성 및 AI 이미지 포함 Webflow 드래그 앤 드롭 생성 (템플릿)
GPT, Gemini 이미지, Webflow 드라フト를 사용하여 대량 SEO 콘텐츠 생성
If
Set
Code
+
If
Set
Code
54 노드Dahiana
콘텐츠 제작
Gemini AI와 Elementor를 사용하여 여러 고객에게 SEO 블로그 기사 생성 및 계획
Gemini AI와 Elementor를 사용하여 여러 고객의 SEO 블로그 기사를 생성하고 계획합니다.
If
N8n
Set
+
If
N8n
Set
39 노드Zain Khan
콘텐츠 제작
GPT-4o와 Google Search Console을 사용하여 키워드 침식을 검출
GPT-4o와 Google Search Console을 사용하여 키워드 침식을 검출
If
Code
Merge
+
If
Code
Merge
27 노드Incrementors
콘텐츠 제작
콘텐츠생성기 v3
AI驱动블로그자동화:사용GPT-4생성并게시SEO기사至WordPress및Twitter
If
Set
Code
+
If
Set
Code
144 노드Jay Emp0
콘텐츠 제작