In short
Six ways to check HTTP status codes for a whole list of URLs, from a free online checker to a one-line curl script, plus how to read the results and what to fix first.
Summarize with AI
Opens the assistant in a new tab with a link to this post.
How to Check HTTP Status Codes in Bulk (and Find Every 404)
You have a list of URLs. Maybe it's every page in your sitemap, the old URLs from before a redesign, a spreadsheet of product pages, or a client's "important pages" list. You need to know which ones still work, which ones redirect, and which ones are quietly returning 404.
Opening them one by one in a browser doesn't scale, and it doesn't even tell you the truth: a browser hides redirects and shows you a friendly page even when the server is returning an error.
This guide shows six ways to check HTTP status codes in bulk, from a free online checker for a quick list to a command-line one-liner for thousands of URLs, plus how to read the results and what to fix first.
What a bulk status check tells you#
Every time a browser or a search engine asks for a URL, the server answers with a three-digit HTTP status code before it sends anything else. That code is the honest answer to "does this page work?", whatever the page looks like.
A bulk check sends that request for every URL on your list and records:
- The status code each URL returns (200, 301, 404, 500 and so on).
- Where redirects lead, if the tool follows them, and how many hops it takes.
- Response time, which flags pages that are technically up but painfully slow.
- Failures to respond at all: DNS errors, timeouts and SSL problems, which many tools report as status 0.
It's the fastest way to answer questions like:
- Did every old URL get a redirect after the migration?
- Which pages in my sitemap are broken or redirecting?
- Are the links in this outreach list still live?
- Which product pages started returning errors after the last update?
Status codes you'll see (and what each one means)#
| Code | Meaning | What to do |
|---|---|---|
| 200 | OK, the page loaded | Nothing, unless it should have redirected |
| 301 / 308 | Moved permanently | Fine for old URLs; update internal links to the final URL |
| 302 / 307 | Moved temporarily | Check it's meant to be temporary; use 301 for permanent moves |
| 304 | Not modified | Normal caching response, not a problem |
| 401 / 403 | Login required or forbidden | Fine for private pages; a problem on public ones |
| 404 | Not found | Restore the page, redirect it, or remove links to it |
| 410 | Gone, deliberately | Fine for pages you removed on purpose |
| 429 | Too many requests | The server is rate limiting your checker; slow down and re-check |
| 500 | Server error | Urgent: something is broken on the server |
| 502 / 503 / 504 | Gateway, unavailable or timeout | Often temporary; re-check, and investigate if it repeats |
| 0 / no response | DNS, timeout or SSL failure | The site or domain may be down or misconfigured |
Two traps to watch for:
- Soft 404s. A page that shows "Sorry, not found" to visitors but returns 200 to search engines. A status check marks it as fine. If a 200 page looks empty or says "not found", treat it as broken.
- Redirects to the homepage. A removed page that 301s to the homepage returns a "healthy" redirect, but Google often treats it like a 404 anyway, and visitors land somewhere irrelevant. Redirect to the closest matching page instead.
6 ways to check status codes in bulk#
1. A free online bulk checker (best for up to a few dozen URLs)#
The quickest option for a short list: paste URLs, press check, read the table. No install, no account.
MyKavo's free Bulk URL Status Checker checks up to 20 URLs at a time and shows each one's status code and response time. It's ideal for spot checks: your navigation links, your top landing pages, the URLs from one email campaign.
If a URL redirects and you want to see every hop, run it through the Redirect Chain Checker, which lists each step with its status code and flags loops and long chains.
Other free online checkers accept 100 URLs or more per run, which helps for medium lists. For anything larger, use one of the methods below.
2. A desktop crawler in list mode (best for hundreds of URLs)#
SEO crawlers aren't only for crawling a site from the homepage. Most have a list mode: you upload or paste a list of URLs and the tool checks exactly those, nothing else.
In Screaming Frog SEO Spider, switch Mode > List, paste or upload your URLs, and start. The free version handles up to 500 URLs, which covers most sitemaps and migration lists. You get the status code, redirect target, response time, title and more for each URL, and you can export everything to a spreadsheet.
This is the best option when you need the status and the SEO details (titles, canonicals, noindex) in one pass.
3. Google Sheets with a small script (best for lists that already live in a spreadsheet)#
If your URLs are already in a sheet, you can check them in place. In Google Sheets, open Extensions > Apps Script and add this function:
function HTTPSTATUS(url) {
if (!url) return "";
try {
var response = UrlFetchApp.fetch(url, {
muteHttpExceptions: true,
followRedirects: false,
});
return response.getResponseCode();
} catch (e) {
return "Error: " + e.message;
}
}
Save it, then type =HTTPSTATUS(A2) next to your first URL and fill down. With followRedirects: false you see the first response, so redirects show up as 301 or 302 instead of being hidden. Set it to true if you only care where each URL ends up.
Google limits how many fetches a script can make per day, so this suits lists in the hundreds, not tens of thousands.
4. The command line with curl (best for thousands of URLs)#
For big lists, a terminal is the fastest free option. Put one URL per line in urls.txt, then run:
while read -r url; do
code=$(curl -o /dev/null -s -w "%{http_code}" --max-time 15 "$url")
echo "$code,$url"
done < urls.txt > results.csv
You get a CSV of status,url you can sort and filter. A few useful variations:
- Add
-Lto follow redirects and report the final status, and-w "%{http_code},%{url_effective}"to record where each URL ended up. - Add
-Ito send lightweight HEAD requests. Faster, but some servers answer HEAD differently from a normal visit, so double-check any errors with a regular request. - Run several checks in parallel with
xargs -P 8, but be polite: hammering a server with requests is a good way to get rate limited (429) or blocked.
5. Google Search Console (best for finding URLs Google already knows are broken)#
Search Console doesn't check a list you give it, but it tells you which of your URLs Google tried to crawl and couldn't. Open Indexing > Pages and look under "Why pages aren't indexed" for:
- Not found (404)
- Server error (5xx)
- Page with redirect
- Soft 404
Each one opens a list of affected URLs you can export. It's the best source for broken URLs you didn't know existed, because Google found them through links you may not control. The data runs a few days behind, so use it to find problems, then confirm the current status with one of the methods above.
6. A site audit (best for checking a whole site, not just a list)#
Sometimes you don't have a list, you just want to know everything that's broken. A site audit crawls the site the way a search engine does and checks every page and link it finds.
MyKavo's Site Audit crawls your site, flags 4XX pages, broken internal links, redirect chains and server errors among its checks, sorts them by severity, and shows which page each broken link was found on. The free plan audits up to 150 pages.
Try it on your site · free
Trace your own redirect chain
Every hop, its status code and where it ends up.
How to read the results and decide what to fix first#
A bulk check on a real site usually returns a mix of everything. Work through it in this order:
- 5xx errors and no-response URLs. These are pages that are broken right now for everyone. Re-check once to rule out a blip, then fix the cause.
- 404s on pages that matter. Anything in your navigation, sitemap, ads or emails, and anything other sites link to. Restore the page, or 301 redirect it to the most relevant live page.
- 404s nobody links to. Old URLs with no links and no traffic can stay 404 (or become 410). Just make sure nothing on your own site still links to them.
- Redirect chains. A URL that redirects three times before landing slows visitors down and wastes crawl effort. Point the first URL straight at the final one, and update internal links to the final URL.
- 302s that should be 301s. If a move is permanent, make the redirect permanent.
- Slow 200s. A page that takes several seconds to respond isn't broken, but it's costing you visitors. Note it for a performance pass.
A good habit: re-run the same list after you fix things. It takes a minute and confirms nothing was missed.
Common situations and what to check#
After a migration or redesign. Export the full list of old URLs before you launch (from your sitemap, Search Console or analytics). After launch, bulk-check every old URL. Each one should return a single 301 to the matching new page. Anything returning 404 is lost traffic and lost links. Our redesign checklist covers the full process.
Checking your sitemap. Every URL in a sitemap should return 200. Redirects and 404s in a sitemap send search engines mixed signals. Bulk-check it after every major content change.
Before an email or ad campaign. Paste every link from the campaign into a bulk checker before you send. A 404 on a paid click is money spent on nothing.
Auditing outbound links. Links from your site to other sites break when those sites change. Check them a few times a year, especially in your most visited articles.
From one-off checks to monitoring#
A bulk check tells you the state of your URLs right now. The problem is that URLs keep breaking: a plugin update changes a permalink, someone deletes a page, a server misconfiguration starts returning 500s on Friday night.
If a handful of pages matter most (your homepage, pricing, signup, checkout, top landing pages), checking them by hand once a month leaves long gaps. Monitoring closes them. MyKavo watches the pages you choose, compares each scan with an approved baseline, and alerts you when a status code changes, a page starts redirecting, or links on it break, with the before-and-after so you can see exactly what happened.
Use bulk checks for the big cleanups, and monitoring for the pages you can't afford to have broken.
Frequently asked questions
How do I check the status code of multiple URLs at once?
Paste them into a free bulk URL status checker for short lists, use a crawler's list mode (such as Screaming Frog, free up to 500 URLs) for hundreds, or run a curl loop from the command line for thousands. Each method returns the HTTP status code for every URL on your list.
What is the best free bulk 404 checker?
For a quick list, a free online checker such as MyKavo's Bulk URL Status Checker (up to 20 URLs) is fastest. For larger lists, Screaming Frog's free list mode or a simple curl script are free and handle far more URLs. Google Search Console also lists URLs Google found returning 404.
Why does a URL show 200 in my checker but "not found" in the browser?
That is a soft 404: the page tells visitors it doesn't exist but returns a success code to browsers and search engines. Fix it by returning a real 404 or 410 status, or by redirecting the URL to a relevant live page.
Should I redirect every 404 to my homepage?
No. Redirect each removed page to the closest matching live page. Mass redirects to the homepage frustrate visitors, and search engines often treat them as soft 404s, so the link value isn't passed on.
How often should I bulk check my URLs?
After every migration, redesign or large content change, before sending campaigns, and at least monthly for your sitemap. For the handful of pages that drive revenue, use continuous monitoring so a broken status is caught the same day.
Why do I get 429 or 403 errors when checking many URLs?
The server is rate limiting or blocking rapid automated requests. Slow your checks down, run fewer in parallel, and re-check the affected URLs. They are usually fine for real visitors.
The bottom line#
Checking status codes in bulk is the fastest way to find out which of your URLs actually work. Use a free online checker for short lists, a crawler's list mode or a spreadsheet script for hundreds, and curl for thousands. Fix server errors first, then 404s on pages that matter, then redirect chains.
Try it now with the free Bulk URL Status Checker, then let MyKavo watch your most important pages so the next broken one is caught the day it breaks.
Get alerted when your site breaks. Free, no card.
Start free