Medium3 Simple Ways to Check the HTTP Status of Any URL (Without Losing Your Mind) | by Antonio Blago | Medium
Sitemap
Antonio Blago

Antonio Blago

I am a data analyst and web developer in R and Python. Founder of https://medium.com/r-evolution. Visit me at www.antonioblago.com.

3 Simple Ways to Check the HTTP Status of Any URL (Without Losing Your Mind)

5 min readJul 6, 2025

--

Whether you’re an SEO, developer, or just tired of broken links ruining your flow, here’s how to check the HTTP status of a URL—fast.

Press enter or click to view image in full size
TikTok 404 page
Photo by visuals on Unsplash

We’ve all been there.

You click a link, and… nothing.

A 404.

Or worse, a sneaky redirect to somewhere unexpected.

Whether you're doing technical SEO, maintaining a content-heavy site, or auditing client domains, knowing how to quickly and reliably check the HTTP status of a URL is essential.

Let me show you three practical methods—ranging from dead simple to programmatic. No fluff, just solid ways to get your status codes right.

1. Method: Use Your Browser’s Dev Tools

The easiest way to check a URL's status code is right inside your browser.

Here’s how:

Open the site in Chrome or Firefox.

Right-click → “Inspect”.

Navigate to the Network tab.

Refresh the page.

Click the top request (usually the page URL).

Look for “Status Code” in the Headers tab.

Press enter or click to view image in full size
Http status check, screenshot by author Antonio Blago

Best for: Quick manual checks
Not great for: Bulk analysis or redirects that resolve before you can catch them

2. Method: Use Command Line with curl

For those comfortable with a terminal, curl is a powerful tool.

Try this:

curl -I https://example.com 

This returns just the headers. You’ll see something like:

HTTP/1.1 301 Moved Permanently Location: https://www.example.com/ 

Add -L to follow redirects:

curl -IL https://example.com 

Best for: Redirect chains, automation, scripting
Not great for: Non-technical users or bulk checks

3. Method 3: Use a Cloud-Based URL Status Checker

Sometimes, you need to go big—like checking 1,000+ URLs. That’s where browser-based methods and curl break down.

Get Antonio Blago’s stories in your inbox

Join Medium for free to get updates from this writer.

It is relevant for online shops or websites where it is critical when your page is not online for a day.

Imagine, you have a product, which makes 1 k $ a day. You loose 1 k a day, when this site is not reachable.

That’s why I created as an E-commerce SEO this actor.

Instead, let a scraper or cloud tool do the work for you.

⚡ My tool: Apify HTTP Status Checker

I built an Apify actor that lets you upload a list of URLs and get back a structured report with:

  • HTTP status codes
  • Final resolved URLs
  • Redirect chains
  • Broken or timeout URLs
  • Export as Excel or JSON

It runs in the cloud, so no setup needed. Just plug & go.

You can also use it in n8n or make automations. Here is the blog article in German.

https://antonioblago.de/automation/status-checker-workflow-mit-n8n-und-apify-eine-schritt-fuer-schritt-anleitung/

For n8n

{
"name": "HTTP Status Checker",
"nodes": [
{
"parameters": {
"url": "https://api.apify.com/v2/acts/antonio_espresso~website-status-code-crawler/run-sync-get-dataset-items",
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "token",
"value": ""
}
]
},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"start_urls\": [\n {\n \"url\": \"{{ $json.url }}\" \n }\n ],\n \"max_depth\": 1\n}\n",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
420,
0
],
"id": "9eb4e5b4-12df-40e3-99ed-c254101e31c3",
"name": "HTTP Request",
"notesInFlow": true
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "83dc4403-6b9e-4e59-94b4-cd8f76a0cc25",
"name": "url",
"value": "",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
220,
0
],
"id": "65fcae99-1fd4-4bce-8b9b-516024b516dd",
"name": "Edit Fields"
},
{
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 1
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
0,
0
],
"id": "bbc97cd7-36ff-460c-bc5d-0efc90ad4aae",
"name": "Schedule Trigger"
},
{
"parameters": {
"chatId": "1225059959",
"text": "={{ $json.message }}",
"additionalFields": {}
},
"type": "n8n-nodes-base.telegram",
"typeVersion": 1.2,
"position": [
840,
0
],
"id": "a9c3f06b-112d-4bc0-922d-a4be23feeeca",
"name": "Telegram",
"credentials": {
"telegramApi": {
"id": "",
"name": "Telegram account"
}
}
},
{
"parameters": {
"jsCode": "// Extract data from input\nconst inputData = $input.first().json;\n\n// Start the message\nlet message = `🚀 *Website Status Code Report* 📊\\n\\n`;\n\n// Add details section\nmessage += `🔍 *Checked URLs:* \\n`;\ninputData.details.forEach(item => {\n // Assign ✅ for 200, ❌ for 404, and ⚠️ for other status codes\n let statusIcon = item.status === 200 ? \"✅\" : item.status === 404 ? \"❌\" : \"⚠️\";\n message += `${statusIcon} [${item.url}](${item.url}) → *${item.status}*\\n`;\n});\n\n// Add summary section\nmessage += `\\n📊 *Status Code Summary:* \\n`;\ninputData.overview.forEach(item => {\n let statusIcon = item[\"Status Code\"] === 200 ? \"✅\" : item[\"Status Code\"] === 404 ? \"❌\" : \"⚠️\";\n message += `${statusIcon} *${item[\"Status Code\"]}:* ${item.Count} occurrences\\n`;\n});\n\n// Final message output\nreturn [{ json: { message } }];\n"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
620,
0
],
"id": "fb9d2b60-c652-4bb2-93ad-41b75af60577",
"name": "Code"
}
],
"pinData": {},
"connections": {
"Edit Fields": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Telegram": {
"main": [
[]
]
},
"Code": {
"main": [
[
{
"node": "Telegram",
"type": "main",
"index": 0
}
]
]
}
},
"active": true,
"settings": {
"executionOrder": "v1"
},
"versionId": "8abc4e32-bf8e-4f80-89bf-b5c2c8d12060",
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "8765f91253fa7ac79c96beaedfb54b4af7cb62e52733ce474c26d612f6e3136b"
},
"id": "wR9giX3QROdRaPfI",
"tags": []
}

Perfect for:

  • SEO audits
  • Redirect mapping
  • Broken link detection

Keeping your site squeaky clean

👉 Try it out here:

https://apify.com/antonio_espresso/website-status-code-crawler

Final Thoughts

The web is messy. Links break. Redirects go rogue. But with the right tools, checking HTTP status codes becomes painless.

Whether you’re debugging a landing page or mapping legacy redirects, one of these methods will fit your flow.

And if you need a reliable way to check thousands of URLs without losing your weekend, give my Apify actor a spin.

✍️ If you found this useful, feel free to share or drop feedback. And if you’re curious about SEO automation, follow me here on Medium or connect on LinkedIn.

Let me know if you’d like me to publish it directly to Medium or help optimize your actor’s landing page for better conversions.

--

--

Written by Antonio Blago

I am a data analyst and web developer in R and Python. Founder of https://medium.com/r-evolution. Visit me at www.antonioblago.com.