AutomationFlowsContent & Video › Generate Long-form Seo/geo Blog Posts with Siah, Wordpress CMS and Google…

Generate Long-form Seo/geo Blog Posts with Siah, Wordpress CMS and Google…

Original n8n title: Generate Long-form Seo/geo Blog Posts with Siah, Wordpress CMS and Google Indexing API

BySina @sina2266 on n8n.io

This workflow runs two parallel flows that together create a fully hands-off SEO content pipeline, from topic selection to Google indexing.

Webhook trigger★★★★☆ complexity18 nodesHTTP Request
Content & Video Trigger: Webhook Nodes: 18 Complexity: ★★★★☆ Added:

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

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": "IfGyCP3gPgpTWQnI",
  "name": "SEO & GEO Blog Engine: Research \u2192 4000+ Words \u2192 Images \u2192 Publish \u2192 Google Index",
  "tags": [
    {
      "id": "6nModdDgdkKLz1kZ",
      "name": "SEO",
      "createdAt": "2026-04-19T17:39:43.170Z",
      "updatedAt": "2026-04-19T17:39:43.170Z"
    },
    {
      "id": "DzdIsCvTKwlcHi0z",
      "name": "Blog",
      "createdAt": "2026-04-19T17:40:33.380Z",
      "updatedAt": "2026-04-19T17:40:33.380Z"
    },
    {
      "id": "4EG8uIkXC3nV9ErK",
      "name": "WordPress",
      "createdAt": "2026-04-19T17:40:20.382Z",
      "updatedAt": "2026-04-19T17:40:20.382Z"
    },
    {
      "id": "dCJcgTAGwCAIgldt",
      "name": "Marketing",
      "createdAt": "2026-04-19T17:40:24.953Z",
      "updatedAt": "2026-04-19T17:40:24.953Z"
    },
    {
      "id": "ypd5sBCiz6eTpDYg",
      "name": "GEO",
      "createdAt": "2026-04-19T17:40:27.820Z",
      "updatedAt": "2026-04-19T17:40:27.820Z"
    }
  ],
  "nodes": [
    {
      "id": "9e1ea1ed-99a0-49ca-9f1e-ba69fb6298eb",
      "name": "Setup Guide",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -928,
        -1488
      ],
      "parameters": {
        "color": 4,
        "width": 740,
        "height": 952,
        "content": "# \u2699\ufe0f BEFORE YOU START \u2014 Full Setup Guide\n\n## Step 1 \u2014 Create a Siah Account\nGo to **seosiah.com** \u2192 Sign up \u2192 Log in\n\n## Step 2 \u2014 Register Your Website\n`Dashboard \u2192 Websites \u2192 Add Website`\nFill in: site URL, name, industry, language, country.\n\u26a0\ufe0f **Required** :  the workflow uses your website ID. Without it, nothing works.\n\n## Step 3 \u2014 Get Your API Token\n`Dashboard \u2192 Settings \u2192 API Tab \u2192 Generate API Token`\n\u26a0\ufe0f The token is shown **only once** , copy it immediately and store it safely.\n\n## Step 4 \u2014 Configure the Webhook\n`Dashboard \u2192 Settings \u2192 API Tab \u2192 Webhook Configuration`\n1. Copy the **Webhook URL** from the Webhook node below (click it \u2192 copy Production URL)\n2. Paste it into Siah's Webhook URL field\n3. Save \u2192 copy the **Webhook Secret** shown\n4. Click **Test Webhook** to verify\n\n## Step 5 \u2014 Add Credentials in n8n\nIn n8n go to **Credentials** and create:\n- `HTTP Bearer Auth` \u2014 name it **SEOSIAH**, paste your API Token\n- `Google OAuth2` \u2014 connect your Google account (needs Indexing API access)\n\n## Step 6 \u2014 Set Your Website URL\nFind the **\"\ud83d\udc49 Set Your Website URL Here\"** node below\nReplace the placeholder with your exact website URL (same one you registered in Siah)\n\n## Step 7 \u2014 Activate\nSet your preferred schedule time in the **Schedule Trigger** node, then toggle the workflow ON."
      },
      "typeVersion": 1
    },
    {
      "id": "9dea5ee8-0a7c-4301-a3b0-48e5550bc30b",
      "name": "Flow 1 Info",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -128,
        -1488
      ],
      "parameters": {
        "color": 6,
        "width": 1740,
        "height": 956,
        "content": "## \ud83d\udd01 FLOW 1 \u2014 Daily Auto-Generation\nRuns every morning at 08:00.\nFetches your website's AI-suggested topics from Siah,\npicks one randomly, and triggers full blog generation.\n\nGeneration includes (handled by Siah's 18-agent engine):\n- Keyword research & SEO structure\n- 4000+ word human-tone article\n- AI-generated images\n- Internal & external links\n- Slug + meta title + meta description\n\nThe generated blog is sent to Flow 2 via Webhook."
      },
      "typeVersion": 1
    },
    {
      "id": "36585d8b-c3dc-4a35-96b0-8115471c4f73",
      "name": "Flow 2 Info",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -128,
        -480
      ],
      "parameters": {
        "color": 6,
        "width": 1740,
        "height": 756,
        "content": "## \ud83d\udce1 FLOW 2 \u2014 Publish + Google Index\nTriggered by Siah's webhook when a blog is ready.\n\n1. **Publishes** the blog to your CMS via Siah API\n2. **Waits** 2 minutes for the CMS to process\n3. **Submits** the new URL to Google Indexing API\n   \u2192 Google crawls it immediately, no waiting"
      },
      "typeVersion": 1
    },
    {
      "id": "f04836ca-6d10-4390-929b-84e763376d25",
      "name": "Webhook Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -208
      ],
      "parameters": {
        "color": 7,
        "width": 424,
        "height": 432,
        "content": "## \ud83d\udce1 Webhook Node\n**After activating the workflow:**\n1. Click this node\n2. Copy the **Production Webhook URL**\n3. Paste it in Siah:\n   `Settings \u2192 API \u2192 Webhook Configuration`\n4. Save and note the Webhook Secret"
      },
      "typeVersion": 1
    },
    {
      "id": "88e1d030-d3d5-45cd-92ca-b1816b3518c9",
      "name": "Siah Credential Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        400,
        -1120
      ],
      "parameters": {
        "color": 7,
        "width": 1004,
        "height": 520,
        "content": "## \ud83d\udd11 Siah API Credential\nThis node uses **HTTP Bearer Auth**.\n\nIn n8n Credentials, create:\n- Type: `HTTP Bearer Auth`\n- Name: `SEOSIAH`\n- Token: your API token from\n  `Siah \u2192 Settings \u2192 API \u2192 Generate Token`\n\nApply the same credential to ALL nodes\nthat call seosiah.com (4 nodes total)."
      },
      "typeVersion": 1
    },
    {
      "id": "f8e2561d-9908-49c2-b434-6934e8bc3f78",
      "name": "Google Indexing Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1184,
        -256
      ],
      "parameters": {
        "width": 364,
        "height": 488,
        "content": "## \ud83c\udf10 Google Indexing API\nThis node uses **Google OAuth2**.\n\nSetup:\n1. In Google Cloud Console, enable the **Indexing API**\n2. Create OAuth 2.0 credentials\n3. In n8n \u2192 Credentials \u2192 create `Google OAuth2`\n4. Assign it to this node\n\n\u26a0\ufe0f Your Google Search Console property must\nbe verified for the submitted URL."
      },
      "typeVersion": 1
    },
    {
      "id": "ea19ce6a-dd77-4289-8a5b-16295a3510e5",
      "name": "URL Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        144,
        -1120
      ],
      "parameters": {
        "color": 3,
        "height": 522,
        "content": "## \ud83d\udc49 Set Your Website URL Here\nReplace the value in this node with\nthe **exact URL** of the website you\nregistered in Siah.\n\nExample: `https://yourdomain.com`\n\n\u26a0\ufe0f Must match the URL you entered\nwhen adding the website in Siah."
      },
      "typeVersion": 1
    },
    {
      "id": "860fc8af-976a-4d15-95e7-3d47bc100538",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        0,
        32
      ],
      "parameters": {
        "path": "ea155fba-f54b-4647-a255-f0295229e1d9",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2.1
    },
    {
      "id": "00d48f4f-7001-425b-833d-271dc979ab3c",
      "name": "Publish the generate blog into the CMS",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        848,
        32
      ],
      "parameters": {
        "url": "=https://seosiah.com/api/v1/public/cms/publish",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "postId",
              "value": "={{ $json.body.data.post_id }}"
            },
            {
              "name": "publicationMode",
              "value": "publish"
            }
          ]
        },
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "59b76423-fecb-41e1-b146-d3cddf134419",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        1056,
        32
      ],
      "parameters": {
        "unit": "minutes",
        "amount": 2
      },
      "typeVersion": 1.1
    },
    {
      "id": "d0d50afa-fe6a-44bd-b43f-d40314c3f7a5",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -16,
        -784
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 8
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "f89fc642-d44c-4d92-9c52-08456d4574d6",
      "name": "Select Website id",
      "type": "n8n-nodes-base.code",
      "position": [
        640,
        -784
      ],
      "parameters": {
        "jsCode": "let website_id = \"\";\n\nconst input = $input.first().json;\nconst editFields = $('\ud83d\udc49 Set Your Website URL Here').first().json;\n\nfor (const item of input.items) {\n  if (item.url === editFields.website) {\n    website_id = item.id;\n    break;\n  }\n}\n\nreturn [\n  {\n    json: {\n      website_id\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "65c73fe4-4828-40d4-ad7f-2239635f4706",
      "name": "\ud83d\udc49 Set Your Website URL Here",
      "type": "n8n-nodes-base.set",
      "position": [
        224,
        -784
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "6974c1dd-ad46-4766-8535-620558401c8b",
              "name": "website",
              "type": "string",
              "value": "https://YOUR-WEBSITE-URL.com"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "4a32b18b-5e28-4260-b2cd-004c1f7a42e2",
      "name": "Get Websites info",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        432,
        -784
      ],
      "parameters": {
        "url": "https://seosiah.com/api/v1/public/websites",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "f7018d1f-ce24-4979-bfdb-5c52115358a5",
      "name": "Google Indexing URL Updated",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1264,
        32
      ],
      "parameters": {
        "url": "=https://indexing.googleapis.com/v3/urlNotifications:publish",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "predefinedCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "url",
              "value": "={{ $('Publish the generate blog into the CMS').item.json.remoteUrl }}"
            },
            {
              "name": "type",
              "value": "URL_UPDATED"
            }
          ]
        },
        "nodeCredentialType": "googleOAuth2Api"
      },
      "typeVersion": 4.1
    },
    {
      "id": "d88eae4d-b6cf-4ecd-b5bc-62cc14cabf87",
      "name": "Generate Full SEO blog",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1264,
        -784
      ],
      "parameters": {
        "url": "=https://seosiah.com/api/v1/public/generate/from-suggestion",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "suggestionId",
              "value": "={{ $json.id }}"
            },
            {
              "name": "contentLength",
              "value": "medium"
            }
          ]
        },
        "genericAuthType": "httpBearerAuth"
      },
      "typeVersion": 4.3
    },
    {
      "id": "58cb2be9-7d44-46c5-9c45-02c2bf76fa2b",
      "name": "Pick a suggested topic",
      "type": "n8n-nodes-base.code",
      "position": [
        1056,
        -784
      ],
      "parameters": {
        "jsCode": "const inputJson = $input.first().json;\n\nconst root = Array.isArray(inputJson) ? inputJson[0] : inputJson;\n\nconst itemsArr = root?.items;\n\nif (!Array.isArray(itemsArr) || itemsArr.length === 0) {\n  throw new Error('No items found at input.json[0].items (or input.json.items).');\n}\n\nconst idx = Math.floor(Math.random() * itemsArr.length);\nconst picked = itemsArr[idx];\n\nreturn [{ json: picked }];"
      },
      "typeVersion": 2
    },
    {
      "id": "6357d48b-d43c-42f1-bd2a-b642aeb0c492",
      "name": "Get all suggested topics for the website",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        848,
        -784
      ],
      "parameters": {
        "url": "=https://seosiah.com/api/v1/public/suggestions?websiteId={{ $json.website_id }}&status=active&limit=50",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth"
      },
      "typeVersion": 4.3
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "4b429b8d-dccf-4617-80a8-2916126268dc",
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Google Indexing URL Updated",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook": {
      "main": [
        [
          {
            "node": "Publish the generate blog into the CMS",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "\ud83d\udc49 Set Your Website URL Here",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Websites info": {
      "main": [
        [
          {
            "node": "Select Website id",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Select Website id": {
      "main": [
        [
          {
            "node": "Get all suggested topics for the website",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Pick a suggested topic": {
      "main": [
        [
          {
            "node": "Generate Full SEO blog",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udc49 Set Your Website URL Here": {
      "main": [
        [
          {
            "node": "Get Websites info",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish the generate blog into the CMS": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get all suggested topics for the website": {
      "main": [
        [
          {
            "node": "Pick a suggested topic",
            "type": "main",
            "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 workflow runs two parallel flows that together create a fully hands-off SEO content pipeline, from topic selection to Google indexing.

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

More Content & Video workflows → · Browse all categories →

Related workflows

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

Content & Video

Optimize your WordPress titles and meta descriptions with AI (OpenAI), update them directly in Yoast SEO, log results in Google Sheets, and receive a styled report by email. All from your own n8n inst

HTTP Request, OpenAI, Stop And Error +2
Content & Video

This workflow is designed for developers, content managers, and website administrators managing multilingual WordPress sites. It is highly beneficial for websites built with complex Advanced Custom Fi

HTTP Request, OpenAI, Item Lists
Content & Video

This automation is perfect for bloggers, solopreneurs, business owners, and marketing teams who want to scale SEO content creation.

Anthropic Chat, Output Parser Structured, Chain Llm +3
Content & Video

Transform a Google Sheet into an automated content factory! This workflow reads article topics, scrapes source content, uses AI to create original articles, and publishes drafts to WordPress automatic

Google Sheets, HTTP Request, OpenAI +1
Content & Video

Digital-Product-Expert-Bundle-Courses. Uses openai, googleDrive, httpRequest, twitter. Webhook trigger; 10 nodes.

OpenAI, Google Drive, HTTP Request +5