AutomationFlowsGeneral › Google Sitemap Filter & URL Inspection

Google Sitemap Filter & URL Inspection

Original n8n title: Smart Google Indexing: Sitemap Filter and URL Inspection

Smart google indexing: sitemap filter and url inspection. Uses httpRequest, xml, splitOut, scheduleTrigger. Scheduled trigger; 13 nodes.

Cron / scheduled trigger★★★★☆ complexity13 nodesHTTP RequestXML
General Trigger: Cron / scheduled Nodes: 13 Complexity: ★★★★☆ Added:

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

The workflow JSON

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

Download .json
{
  "name": "Smart google indexing: sitemap filter and url inspection",
  "nodes": [
    {
      "parameters": {
        "url": "={{ $('Configuration').item.json.sitemap_url }}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        448,
        0
      ],
      "id": "98a54b6b-b291-41a7-9606-f6caab843610",
      "name": "Read Sitemap"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "n8n-nodes-base.xml",
      "typeVersion": 1,
      "position": [
        672,
        0
      ],
      "id": "2de4a639-32e0-4574-8a1f-a1e0a9180582",
      "name": "Parse XML"
    },
    {
      "parameters": {
        "fieldToSplitOut": "urlset.url",
        "options": {}
      },
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        896,
        0
      ],
      "id": "229273f1-204b-42f1-89c5-83a3de0817aa",
      "name": "Split Out URLs"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "c842ea3f-a4b1-43a5-b517-87573ef7f7eb",
              "name": "sitemap_url",
              "value": "https://example.com/sitemap.xml",
              "type": "string"
            },
            {
              "id": "fa030335-3323-47bc-ae4f-a5bdc06c0e53",
              "name": "modified_after",
              "value": "={{ $now.minus(1, 'week').toISO() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        224,
        0
      ],
      "id": "cccf0bfb-1aa8-4cb7-b79a-ec4e155ff526",
      "name": "Configuration"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://searchconsole.googleapis.com/v1/urlInspection/index:inspect",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "googleApi",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "inspectionUrl",
              "value": "={{ $json.loc }}"
            },
            {
              "name": "siteUrl",
              "value": "=sc-domain:{{ $('Configuration').item.json.sitemap_url.extractDomain() }}"
            }
          ]
        },
        "options": {
          "batching": {
            "batch": {
              "batchSize": 1
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        1344,
        0
      ],
      "id": "54eeab98-1d4c-47d7-9364-48d9ca592943",
      "name": "Inspect URLs",
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://indexing.googleapis.com/v3/urlNotifications:publish",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "googleApi",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "url",
              "value": "={{ $('Split Out URLs').item.json.loc }}"
            },
            {
              "name": "type",
              "value": "URL_UPDATED"
            }
          ]
        },
        "options": {
          "batching": {
            "batch": {
              "batchSize": 1
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        1792,
        0
      ],
      "id": "4c8b950b-4516-4258-8e4b-209c82bc4c14",
      "name": "Publish URLs",
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 3
          },
          "conditions": [
            {
              "id": "17259208-b6ae-4299-89c1-a6d96a378bca",
              "leftValue": "={{ $json.inspectionResult.indexStatusResult.verdict }}",
              "rightValue": "NEUTRAL",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.3,
      "position": [
        1568,
        0
      ],
      "id": "9448e217-6039-46e8-a95a-ada17d381372",
      "name": "Filter NEUTRAL Verdict"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 3
          },
          "conditions": [
            {
              "id": "dffb9dd9-e69c-4302-872d-a257d649dda4",
              "leftValue": "={{ $json.lastmod }}",
              "rightValue": "={{ $('Configuration').item.json.modified_after }}",
              "operator": {
                "type": "dateTime",
                "operation": "after"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.3,
      "position": [
        1120,
        0
      ],
      "id": "a85f086f-ceb5-49fe-a197-c1c46382cea4",
      "name": "Filter Last Modified Pages"
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        0,
        0
      ],
      "id": "f6db303c-52dc-4bbd-9660-a024ba174944",
      "name": "Trigger Daily"
    },
    {
      "parameters": {
        "content": "### 0. Setup & Prerequisites\nThis workflow selectively indexes pages by filtering for recent updates and checking live status.\n\n**Preparation:**\n1. Enable Search Console & Indexing APIs in Google Cloud.\n2. Add Service Account JSON to n8n credentials.\n3. Verify Service Account email as 'Owner' in GSC.\n4. Set your sitemap URL in the 'Configuration' node.",
        "height": 416,
        "width": 432
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -256
      ],
      "typeVersion": 1,
      "id": "da99b4d2-0fac-473c-a426-015ac2b21b5e",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "### 1. Sitemap Processing\nFetches the XML sitemap, parses it to JSON, and splits it into individual URL objects for item-by-item processing.",
        "height": 416,
        "width": 672,
        "color": 2
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        384,
        -256
      ],
      "typeVersion": 1,
      "id": "47bfebf4-cc07-4c3b-a3de-c2312f2ce274",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "### 2. Efficiency Logic\n**Step A:** Filters for pages modified in the last 7 days.\n**Step B:** Inspects current status via GSC API. Only 'NEUTRAL' (not yet indexed or pending) pages proceed to save API quota.",
        "height": 416,
        "width": 672,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1056,
        -256
      ],
      "typeVersion": 1,
      "id": "9bc87619-c5b1-4e49-a572-cf5f5ddea4da",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "content": "### 3. Google Indexing API\nSends the final list of filtered URLs to Google for priority crawling. \n*Note: This signals Google to crawl, but doesn't guarantee instant indexing.*",
        "height": 416,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1728,
        -256
      ],
      "typeVersion": 1,
      "id": "e3f7ef4e-9271-49c2-a5a7-d29c63fe119c",
      "name": "Sticky Note3"
    }
  ],
  "connections": {
    "Read Sitemap": {
      "main": [
        [
          {
            "node": "Parse XML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse XML": {
      "main": [
        [
          {
            "node": "Split Out URLs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Configuration": {
      "main": [
        [
          {
            "node": "Read Sitemap",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out URLs": {
      "main": [
        [
          {
            "node": "Filter Last Modified Pages",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Inspect URLs": {
      "main": [
        [
          {
            "node": "Filter NEUTRAL Verdict",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter NEUTRAL Verdict": {
      "main": [
        [
          {
            "node": "Publish URLs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Last Modified Pages": {
      "main": [
        [
          {
            "node": "Inspect URLs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Trigger Daily": {
      "main": [
        [
          {
            "node": "Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate",
    "availableInMCP": false
  },
  "versionId": "89001494-5318-46f5-a1b0-e41eddbf5aa8",
  "id": "WS6NJkfgRr7MZHZA",
  "tags": []
}

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

How this works

This workflow automates the process of filtering your sitemap to identify URLs likely to be indexed by Google, using URL inspection to prioritise fresh or updated content for faster visibility in search results. It's ideal for website owners, SEO specialists, or digital marketers managing content-heavy sites who want to streamline indexing without manual checks. The key step involves parsing the sitemap XML via the XML node, extracting URLs with the Split Out node, then inspecting them through Google's API using httpRequest to filter out neutral verdicts and focus on recently modified pages for targeted submission.

Use this workflow for regularly scheduled sitemap updates on sites with dynamic content, such as blogs or e-commerce platforms, to ensure new pages get indexed promptly without overwhelming Google's servers. Avoid it for static sites with infrequent changes or if you lack access to the Google Search Console API, as it relies on authentication. Common variations include adding email notifications for inspection results or integrating with Google Sheets to log filtered URLs for ongoing monitoring.

About this workflow

Smart google indexing: sitemap filter and url inspection. Uses httpRequest, xml, splitOut, scheduleTrigger. Scheduled trigger; 13 nodes.

Source: https://github.com/vklepikovskiy/n8nplaybook-public/blob/main/workflows/smart-google-indexing.json — original creator credit. Request a take-down →

More General workflows → · Browse all categories →

Related workflows

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

General

Automated SEO Indexing via IndexNow & XML Sitemap. Uses scheduleTrigger, httpRequest, xml, splitOut. Scheduled trigger; 9 nodes.

HTTP Request, XML
General

backup. Uses googleDrive, httpRequest. Scheduled trigger; 15 nodes.

Google Drive, HTTP Request
General

Yourang - Complete Workflow Example. Uses n8n-nodes-yourang, httpRequest. Scheduled trigger; 10 nodes.

N8N Nodes Yourang, HTTP Request
General

Arenza — Monthly Competitor Comparison Email. Uses httpRequest, emailSend. Scheduled trigger; 6 nodes.

HTTP Request, Email Send
General

Politician Research Pipeline. Uses httpRequest, emailSend. Scheduled trigger; 9 nodes.

HTTP Request, Email Send