Search Indexing Suite
Nine workflows that submit URLs at a survivable rate and then prove they were indexed — triangulated across a search-grounded model, a self-hosted meta-search and direct checks.
- Client
- EpsolDev
- Category
- SEO Engineering
- Completed
- 2026-08-15
- Built with
- n8n, Google Vertex AI, REST API
- Topics
- API Development, Automation, SEO
n8n 9 workflows SEO infrastructure In production
Publishing a page is easy. Proving Google actually indexed it is not — and no single method is both reliable and free. This suite answers the question three different ways and feeds the verdicts back into Custom Blog Management.

Why three checkers instead of one
| Method | Cost | Weakness |
|---|---|---|
| Search-grounded model | per call | probabilistic — needs a strict verdict format |
| Self-hosted meta-search | free | scraping-shaped, breaks when engines change |
| Direct status check | free | tells you a URL works, not that it is indexed |
There is no authoritative public "is this indexed" API. Search Console reports on a delay and only for verified properties. So the suite treats the answer as something to be triangulated, and it keeps the cheap methods first.
The model-based checker
The interesting decision is what happens before the model call.
Parse URL -> Check Page Reachable -> Extract Page Info -> Build Gemini Request
│
Ask Gemini with Google Search
│
Format Indexing Result
The page is fetched and parsed first — title, canonical, status — and that becomes context for the prompt. Asking a model "is this URL indexed?" cold invites a confident guess. Asking it with the page's real title and a search-grounding tool turns it into a lookup with evidence.
Format Indexing Result then collapses the answer to a fixed verdict. A free-text model reply is not a status; the workflow refuses to store one.

The free path runs the same shape against a self-hosted meta-search instance. It is the default for bulk sweeps; the model path is reserved for URLs the cheap check left ambiguous.

Submitting, without getting rate-limited

One webhook accepts either a list of URLs or a sitemap, and Is Sitemap? routes accordingly:
- sitemap →
Fetch Sitemap→Parse Sitemap→ index - direct → index
Both branches converge on the same Index URLs → Sheet Payload → Save to Sheet → respond. Two input shapes, one code path for everything after — so a bug fixed in the indexing step is fixed for both.
Drip feed

This is the workflow that exists purely because of how search engines behave. Dumping 500 URLs at an indexing endpoint at once is the fastest way to have them ignored — or to burn a daily quota in one minute.
So submission is split from scheduling:
Receive Drip Config -> Queue Batch URLs -> Respond to Client (returns immediately)
Check Queue Timer -> Process Next Batch -> Has Batch? -> Send Batch -> Mark Done
The caller gets an instant acknowledgement; the timer drains the queue at a survivable rate. The client is never left holding a connection while 500 URLs are submitted.

Submission is not proof either, so a scheduled re-check re-tests what was submitted and closes the loop between asked and indexed.
Finding the URLs in the first place

Five nodes that probe a domain's likely sitemap locations, follow sitemap indexes, and return a flat URL list. Every other workflow in the suite takes URLs as input; this is the one that produces them from nothing but a domain.

And before spending an indexing quota on a URL, URL Checker confirms it actually resolves — a 404 submitted for indexing is quota spent on nothing.
An operator front end

A webhook that serves the checker's UI directly from the automation platform. No hosting, no deploy pipeline, no separate app to keep alive — for an internal tool used by a handful of people, a workflow that returns HTML is the whole product.
Stack
n8n Google Vertex AI Google Search grounding SearXNG Google Sheets JavaScript REST API
Verdicts flow back into the content platform's own coverage store, where they drive the six-state indexing model and the capped re-submission queue.