indexnow_submit
Submit URLs to search engines for instant indexing using IndexNow protocol. Supports batch submission of up to 10,000 URLs to Bing, Yandex, Naver, and Seznam.
Instructions
Submit URLs to IndexNow for instant indexing on Bing, Yandex, Naver, Seznam. Supports batch submission of up to 10,000 URLs.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | List of URLs to submit (max 10,000) | |
| api_key | Yes | Your IndexNow API key (any UUID-like string you generate) | |
| host | Yes | Your website hostname (e.g., example.com) | |
| key_location | No | URL where your API key file is hosted (optional) | |
| engines | No | Search engines to submit to (default: all) |
Implementation Reference
- src/index.ts:200-249 (handler)Registration and implementation of the "indexnow_submit" tool.
server.tool( "indexnow_submit", "Submit URLs to IndexNow for instant indexing on Bing, Yandex, Naver, Seznam. Supports batch submission of up to 10,000 URLs.", { urls: z.array(z.string().url()).describe("List of URLs to submit (max 10,000)"), api_key: z.string().describe("Your IndexNow API key (any UUID-like string you generate)"), host: z.string().describe("Your website hostname (e.g., example.com)"), key_location: z.string().optional().describe("URL where your API key file is hosted (optional)"), engines: z .array(z.enum(["bing", "yandex", "naver", "seznam", "indexnow"])) .optional() .describe("Search engines to submit to (default: all)"), }, async ({ urls, api_key, host, key_location, engines }) => { if (urls.length > 10000) { return { content: [ { type: "text" as const, text: "Error: Maximum 10,000 URLs per submission. Split into batches.", }, ], }; } const results = await submitToIndexNow(urls, api_key, host, key_location, engines); const successful = results.filter((r) => r.success).length; let output = `## IndexNow Submission Results\n\n`; output += `**URLs submitted:** ${urls.length}\n`; output += `**Engines contacted:** ${results.length}\n`; output += `**Successful:** ${successful}/${results.length}\n\n`; output += `| Engine | Status | Result |\n|--------|--------|--------|\n`; for (const r of results) { output += `| ${r.engine} | ${r.status} | ${r.success ? "Success" : "Failed"} - ${r.message} |\n`; } if (urls.length <= 10) { output += `\n### URLs Submitted\n`; for (const url of urls) { output += `- ${url}\n`; } } else { output += `\n*${urls.length} URLs submitted (list truncated)*\n`; } return { content: [{ type: "text" as const, text: output }] }; } );