Skip to content

check hundreds of urls at once

shahid ali › tools › bulk index checker

Bulk index checker for Google, with no guesswork

Search Console tells you the index status of one URL at a time. This checks a whole list, a CSV or a sitemap in one go, two ways. Sign in to Search Console and you get Google's real answer for every URL. Skip the sign-in and you get an indexability check instead: whether anything on the page stops Google. No signup here, no credits, and no site: searches. It is the check I run on client catalogues every morning, rebuilt so you can run it yourself.

  • Your list stays with you. Results live in this browser tab only, and a file you upload is read here, not sent.
  • No account here. In Search Console mode you sign in to Google, not to me. I never receive the token.
  • Read only. Neither mode can change anything on your site or in your Search Console.

Check your URLs

Asks Google directly, through the Search Console URL Inspection API, whether each URL is indexed and why not. Works on sites your Google account is verified on. 2,000 URLs per property per day, which is Google's quota.

  1. Connect

    Sign in with Google. Read only.

  2. Property

    Pick the Search Console property.

  3. URLs

    Paste, upload a file or load the sitemap.

  4. Inspect

    Run the check and export the table.

  1. 01 Connect Search Console

    Read-only access, granted by you to your own account, in a Google popup. The token never leaves this tab.

    not connected
    Advanced: use your own OAuth client ID

    For anyone who would rather not grant access to my app at all. Create a Web application OAuth client in your own Google Cloud project, enable the Search Console API, addhttps://www.shahidali.co as an authorised JavaScript origin, and paste the client ID here. It is held in memory for this tab only.

  2. 02 Pick a property connect first

    Only properties this Google account is verified on will appear.

  3. 03 Choose the URLs connect first

    Where the list comes from
    Read in this tab, never uploaded anywhere. Duplicates are removed.

    no URLs loaded

  4. 04 Run it connect first

    Google allows 600 inspections a minute, and that is the real ceiling: 200 URLs cannot finish in under 20 seconds at any setting. Requests are paced automatically to stay under it, so a high setting costs you nothing, it just stops helping once the quota is the bottleneck.

    A failed request is one that never came back with an answer, usually rate limiting or a dropped connection. Those get one more attempt after a short pause. Results Google actually returned are left alone, including unknown to Google: that is an answer, and asking twice only spends quota to hear it again.

What each mode checks

Two different questions, and it matters which one you are asking. Is the page in Google? Only Google can answer that. Could it be? You can answer that from the page itself.

Real index status, with Search Console

  • Indexed or not, in Google's own words, such as crawled but not indexed or discovered but not indexed.
  • The canonical Google picked, and whether it matches yours.
  • The last crawl date, so you can see pages Google has not visited in months.
  • A plain meaning for every status, with the guide for the ones that need fixing.

Indexability, with no sign-in

  • Status code and redirects, including chains, loops and soft 404s.
  • robots.txt, read live for each site and matched the way Googlebot matches it.
  • noindex in the meta robots tag, a googlebot tag or the X-Robots-Tag header.
  • Canonical, whether it points elsewhere, and whether that target is healthy.
  • A fix guide linked on every row that has a problem.

Related checks: one page in full detail in the indexability checker, the sitemap file itself in the sitemap checker, your crawler rules in the robots.txt tester, and the file AI search tools read in the llms.txt generator.

Why this is not a site: operator checker

Nearly every tool calling itself a bulk index checker works the same way underneath: it runs a site: or inurl: search for each URL and reads whether anything came back. That is a guess wearing the costume of an answer, and it is the reason this tool does not do it.

  • site: is filtered and sampled. Google's own documentation for the operator says it does not necessarily return all the URLs that are indexed, and that bigger sites should not expect to see all of theirs. A URL can be absent from a site: search while sitting in the index and taking traffic. That is the failure mode that costs money, because it sends you off to fix a page that was never broken.
  • A yes or no is not a status. Even when site: does find the page, it cannot tell you that Google picked a different canonical, when the page was last crawled, or that a noindex tag is the thing holding it out. Those are the answers that decide what you actually do next.
  • This asks Google directly instead. Every row comes from the Search Console URL Inspection API, the same source as the inspection box inside Search Console itself. It is Google's own record of the URL in Google's own wording, which is why a status here can be as specific as duplicate without user-selected canonical rather than a red cross.

The honest trade, because there is one. Inspection reads Google's record for a property, so it only works on properties your Google account is verified on. For somebody else's page, the no-sign-in mode will still tell you whether anything blocks it, which answers the common backlink question halfway: a page with a noindex or a robots.txt block is never getting indexed. Whether an unblocked page actually is indexed, nothing honest can tell you without access to that site's Search Console.

Where your data actually goes

Most bulk checkers ask you to connect Google and then run the requests on their server, which means your property list and results pass through, and usually sit in, somebody else's database. This one does not work that way, because it does not have to.

  1. Google gives the token to your browser

    The sign-in popup is Google's own. The access token it returns is held in a JavaScript variable in this tab. It is never written to storage, never put in a cookie, and never sent to this site.

  2. Your browser calls the API directly

    Every inspection request goes from your machine to googleapis.com and back. This site is a static page: once it has loaded, it is not involved in the conversation at all.

  3. Results stay in the page

    The table is built in memory. Reload and it is gone. The CSV export is assembled in the browser too, so the file never touches a server on the way to your downloads folder.

One honest exception, and it applies to sitemap mode only. A browser is not allowed to read another site's sitemap, and in practice no site permits it, so sitemap XML is fetched by a small reader on this domain that returns the file and keeps no copy of it. It writes no log line, and no Google token and no inspection result ever reaches it: the only thing it sees is a sitemap address that is already public. Paste and file upload contact no server at all, and are there for anyone who wants the stronger guarantee. Full detail on the privacy page.

The no-sign-in mode works differently, because it has to. A browser cannot fetch another site's pages either, so each URL goes to a reader on this domain, the same one behind theindexability checker, which fetches the page and its robots.txt, returns what it found and keeps nothing. No sign-in is involved, so there is no Google data anywhere in that path. The verdicts are worked out in your browser.

What each status actually means

The tool reports Google's own coverage wording and maps it to plain language. Where a status has a real fix behind it, the guide is linked.

StatusWhat it means
indexedGoogle has this page in its index. It can rank.
crawled, not indexedGoogle fetched the page and chose not to keep it. Usually a value judgement, not a technical fault. Read the guide.
discovered, not indexedGoogle knows the URL exists but has not crawled it yet. Often a crawl budget or site load signal. Read the guide.
unknown to GoogleGoogle has no current record of this URL. Either it was never discovered, or it was crawled long ago and has been let go. Read the guide.
page with redirectThis URL redirects elsewhere, so the destination is what gets indexed.
noindex tagA noindex directive is telling Google to keep this page out. Intentional on some pages, fatal on others.
duplicateGoogle picked a different canonical. Your version is treated as a copy.
alternate with canonicalThis page points at another canonical, and Google agreed. Normal for variants and paginated pages.
not found (404)The URL returns 404. If it should exist, that is the bug to fix before anything else.
soft 404The page returns 200 but looks empty or like an error to Google.
blocked by robots.txtrobots.txt is stopping the crawl. Google cannot judge a page it is not allowed to fetch. Read the guide.

The limits, stated plainly

  • 2,000 inspections per property per day. That is Google's cap, not mine. Bigger catalogues get split across days, which is exactly how the real work goes.
  • Verified properties only. If your Google account is not verified on the property, it will not appear in the dropdown, and no amount of pasting URLs will change that.
  • It cannot request indexing. The API is read only. Submitting a URL still means the button in Search Console, roughly a dozen a day, by hand. That limit is the whole reasonthe request indexing question is worth reading.
  • 600 inspections a minute is the speed limit. That works out at ten a second, so a list of 200 cannot finish in under twenty seconds however hard you push it. The tool paces itself to stay under the limit rather than collecting rate-limit errors, which is why raising the concurrency setting stops making any difference past a point.
  • The no-sign-in mode checks 100 pages a run. It fetches every page live, so it offers the next 100 when a batch finishes rather than firing thousands of requests at one server. Sites behind a strict firewall may refuse it, and those rows say could not be checked rather than guess.
  • Need the percentage instead of the rows? Thesitemap coverage checker runs the same API over a whole sitemap and rolls it up into one number, with a per-sitemap breakdown for sitemap indexes.

Why this exists

I check index status for a living. One store's catalogue took1,006 submissions across 118 days, and none of that is possible without first knowing, every morning, which URLs are actually in the index. The private version of this tool has been running against client properties for months. This is the same logic, minus the parts that touch my accounts, given away because the alternative is watching people pay monthly for a status check they can do themselves. The longer version, including the bug in my own code that reshaped it, is in why I gave away the index checker.

If the answer turns out to be that a lot of your catalogue is not indexed, that is the point where the work starts rather than ends. The case studies show what the fixing looks like on real sites, and the indexing service is there if you would rather hand it over.

Straight answers

Is this bulk index checker really free?

Yes, and there is nothing to buy later. No account, no credits, no URL cap of my own, no email collected. The only ceiling is Google's own quota, which applies to your property rather than to this page. I give it away because the alternative is watching people pay a monthly subscription for a status check they can run themselves in a browser tab.

What is the difference between indexable and indexed?

Indexable means nothing on your side stops Google: the page answers 200, robots.txt lets Googlebot in, there is no noindex, and the canonical points at itself. Indexed means Google actually crawled it and decided to keep it. A page can be perfectly indexable and still not indexed, because Google judged it thin, duplicate or not worth the crawl yet. The no-sign-in mode checks the first. Only the Search Console mode can tell you the second, because only Google knows it. The statuses you then see are all explained in every Search Console indexing status.

Can I check pages on a site I do not own?

Partly. The no-sign-in mode works on any public site, so it will tell you whether a competitor's page or a page carrying your backlink is blocked by noindex, robots.txt or a canonical. It cannot tell you whether Google has indexed that page. Search Console only answers for properties your account is verified on, and the only other route is automated site: searches, which are unreliable and break Google's terms. This tool does not do those.

Can I upload a CSV or load a sitemap instead of pasting?

Yes, in both modes. Upload a .txt or .csv file, such as a Search Console export or a crawler export, and the tool pulls out every web address, drops the duplicates and ignores the other columns. The file is read by your browser and never uploaded. Or give it a sitemap address, including a sitemap index, and it reads the URLs from there. If you want the sitemap itself checked for errors, the sitemap checker does that.

Do I need to install a Chrome extension?

No, and that is deliberate. Extension tools like GSCTool work by automating clicks inside your open Search Console tab, which means installing software and letting it drive your signed-in session. This page asks the same official URL Inspection API directly from the browser: nothing installed, nothing driving your account, nothing to update or uninstall later. If you are weighing the paid indexing tools against each other, I compared them honestly in the indexing tools comparison.

How many URLs can I check at once?

As many as you like in one paste, and the run will work through them at up to 2,000 inspections per property per day, which is Google's limit rather than mine. Large lists simply continue the next day. A sitemap of any size can be loaded the same way, and the tool tells you how many URLs it found before it spends any quota on them. The no-sign-in mode checks 100 pages a run and then offers the next 100, because it fetches every page live and I would rather not hammer anyone's server.

Does a site: search show everything Google has indexed?

No, and this is the single most expensive misunderstanding in indexing work. Google's own documentation for the operator says it does not necessarily return all the URLs that are indexed, and that bigger sites should not expect to see all of theirs. A URL can be missing from a site: search while being indexed and taking traffic. That is why this tool asks the URL Inspection API instead, and why it can tell you which canonical Google picked rather than just a yes or a no. There is a full breakdown in is the site: operator accurate.

Can you see my Search Console data?

No. The permission is granted by you to a Google app registration, and the token Google returns goes to your browser. There is no server of mine in the request path, no login here, and nothing to retrieve later. You can revoke access at any time in your Google account permissions, and the Disconnect button does it immediately.

Why does it say a page is unknown to Google when I can see it in search?

Almost always the wrong property or the wrong URL form. Inspection is exact: a URL prefix property only answers for URLs under that exact prefix, and http, https, www and non-www are four different things. The tool filters out URLs that do not belong to the selected property before spending quota on them. Past that, treat the answer as real: unknown to Google is a result, not a glitch, and the tool does not re-ask in the hope of a nicer one.

Does a higher concurrency setting make it faster?

Up to a point, then it stops mattering. Google allows 600 inspections a minute, so once you are pushing ten requests a second the quota is the bottleneck rather than the setting, and the tool paces itself there instead of piling up rate-limit errors. Six is a sensible default. Going to twenty helps on long lists where individual responses are slow, and does nothing on short ones.

Can I use it without granting access to your app?

Yes. Open Advanced under step one and paste your own OAuth client ID from your own Google Cloud project. The tool then talks only to your registration, and my name is nowhere in the flow.

Found more red than you expected? Send me the export on WhatsApp and I will tell you what the pattern is, free, before anyone talks about money.