HTTP Status & Redirect Checker
Check any URL’s status code, follow every redirect, and get the exact code to fix it in Laravel, PHP, Node, Nginx, Apache and more.
Free HTTP status code and redirect checker
Enter any URL and see what the server answers, every redirect on the way, what Google and AI bots get — and the exact code to fix what is wrong.
The checker follows a URL one hop at a time, like a browser, and records the status code, headers and timing of every step. It also tests the http, https, www and non-www versions of the site, compares six visitors from a normal browser to ClaudeBot, reads every SEO tag of the final page and its robots.txt, and writes the redirect code for Laravel, PHP, Node.js, Nginx, Apache, WordPress and eight more platforms. Jump to how to use it, all status codes, redirect code or the FAQ.
How to check
a URL’s status code.
Five steps from a URL to a fixed redirect. Each step is explained in detail further down.
-
1 Input
Enter the URL
Type a domain like
example.comor paste a full address likehttps://example.com/old-page. Without http:// the tool starts at https://. -
2 Options
Pick the options
Choose who visits (browser or bot), and switch the 4-versions check, the bot comparison or bulk mode on or off.
-
3 Run
Press Check URL
The tool follows every redirect hop by hop and shows each step as it traces. Most checks finish in 1–5 seconds.
-
4 Read
Read the report
The final status, the SEO verdict, the redirect chain, the four versions, the bots and the full SEO analysis of the page.
-
5 Fix
Copy the code
Pick your platform in Get the code, copy the redirect, deploy it and press Re-check to confirm the fix.
What each part
of the tool does.
Open any item to see what it is for and when to use it.
What every part
of the result means.
The report is built from eight blocks. This is what each one tells you.
Final status & SEO verdict
The big coloured box is the status of the last URL: green 2xx, purple 3xx, orange 4xx, red 5xx. Next to it the final URL, the number of redirects, the total time and a verdict — Good, Needs attention or Problem — with every reason listed.
Redirect chain
Every request in order: the URL, its status, the time it took, the server, the HTTP version, the IP and the Location it points to. Problem hops are marked, for example a temporary 302 or a second redirect that should be removed.
4 Versions Check
The http / https / www / non-www versions in a grid. The banner on top says whether all four end on one canonical URL, or what to fix.
Bot Comparison
Status, final URL and time for Desktop, Mobile, Googlebot, Bingbot, GPTBot and ClaudeBot. The badge answers “Can AI crawlers see this page?” with Yes, Partly or No.
Get the code
Choose what to do (redirect one URL, force HTTPS, remove www, add www, 410 Gone), the redirect type (301, 302, 307, 308) and your platform. The From and To fields are filled from your check. Copy, deploy, re-check.
Status Code Explanation
What the final status means in plain words, and its SEO impact — Good, Neutral or Bad — so you know whether to act.
SEO Analysis
A score, a Google result preview, a share preview, and 35+ checks in four groups: Basics, Content, Social sharing and Technical. Everything missing says Not found and shows the code to add, with a Copy button.
Bulk results
One row per URL with filter chips and counts, search, sort, an in-place report for every row, a progress bar with time left, and a CSV of everything.
Who is visiting:
the six user agents.
The User-Agent is a line of text every visitor sends to say who it is. The tool sends the real, published string of each visitor.
Desktop browser
Chrome on Windows. The default — what most people see on a computer.
Mobile browser
Chrome on Android. Use it when a site sends phones to an m. subdomain or an app page.
Googlebot
Google’s smartphone crawler, the one that indexes your site (mobile-first indexing). If Googlebot gets an error, your page drops out of Google.
Bingbot
Microsoft Bing’s crawler. Bing results also power DuckDuckGo, Yahoo and parts of ChatGPT search.
GPTBot
OpenAI’s crawler. If it is blocked, ChatGPT knows less about your site.
ClaudeBot
Anthropic’s crawler for Claude. Shows whether your firewall or robots.txt lets it in.
Some sites verify Googlebot and other bots by their IP address. Such a site may answer our request differently from the real bot — the bot comparison then shows how the server treats the User-Agent alone.
The five kinds
of status codes.
The first digit tells you what kind of answer it is. The tool colours them the same way everywhere.
Information
The request was received and continues. Browsers handle these by themselves; you rarely see them.
Success
The page was delivered. 200 OK is what every page you want in Google should answer.
Redirect
The content is somewhere else; the Location header says where. 301 and 308 are permanent, 302 and 307 temporary.
Client error
The request cannot be served: the page does not exist (404), was removed (410), is forbidden (403) or rate-limited (429).
Server error
The website broke while answering: code crash (500), upstream down (502), overloaded (503) or too slow (504).
Every HTTP status
code explained.
What each code means, what it does for SEO and when you should use it.
- What it means
- The server got the headers; the client may send the body.
- SEO impact
- None
- Use it when
- Handled by the server automatically.
- What it means
- The connection switches, e.g. to WebSocket.
- SEO impact
- None
- Use it when
- Opening a WebSocket.
- What it means
- Lets the browser preload CSS and fonts before the real answer.
- SEO impact
- Faster pages
- Use it when
- Your server or CDN supports it.
- What it means
- The page was found and returned.
- SEO impact
- Good: indexable
- Use it when
- Every normal page.
- What it means
- A new resource was created.
- SEO impact
- None
- Use it when
- An API created something.
- What it means
- The request was accepted and is processed later.
- SEO impact
- None
- Use it when
- Background jobs in an API.
- What it means
- Success, but nothing to send back.
- SEO impact
- Nothing to index
- Use it when
- APIs, tracking pixels.
- What it means
- Part of a file, as requested (Range).
- SEO impact
- None
- Use it when
- Video and large downloads.
- What it means
- The page moved for good to the Location URL.
- SEO impact
- Good: passes ranking
- Use it when
- URL changes, HTTPS, www moves, domain moves.
- What it means
- Temporary redirect.
- SEO impact
- Neutral: old URL may stay indexed
- Use it when
- A short-term move, A/B tests, login redirects.
- What it means
- Go to another page with GET.
- SEO impact
- Neutral
- Use it when
- After a form is submitted.
- What it means
- The cached copy is still current.
- SEO impact
- Good: saves crawl budget
- Use it when
- Caching with ETag / Last-Modified.
- What it means
- Like 302, but keeps the method (POST stays POST).
- SEO impact
- Neutral
- Use it when
- Temporary moves of APIs and forms. Also shown by browsers for HSTS.
- What it means
- Like 301, but keeps the method.
- SEO impact
- Good: passes ranking
- Use it when
- Permanent moves of APIs; Vercel and Next.js use it.
- What it means
- The request is malformed.
- SEO impact
- Bad: not indexed
- Use it when
- Invalid input in an API.
- What it means
- Login needed.
- SEO impact
- Not indexed (fine for private pages)
- Use it when
- Members-only areas.
- What it means
- The server refuses access.
- SEO impact
- Bad if bots get it by mistake
- Use it when
- Blocked folders. Check your firewall if bots get 403.
- What it means
- No page at this URL.
- SEO impact
- Bad: dropped from Google
- Use it when
- Truly missing pages. Redirect moved content with 301.
- What it means
- The URL exists, not for this method.
- SEO impact
- None
- Use it when
- A POST-only endpoint opened with GET.
- What it means
- No format matches the Accept header.
- SEO impact
- Bad
- Use it when
- Rare; usually a misconfigured security rule.
- What it means
- The client was too slow.
- SEO impact
- Temporary
- Use it when
- Server-side timeouts.
- What it means
- The request conflicts with the current state.
- SEO impact
- None
- Use it when
- APIs, e.g. a duplicate record.
- What it means
- Removed on purpose, not coming back.
- SEO impact
- Removed from Google faster than 404
- Use it when
- Deleted products and pages with no replacement.
- What it means
- The upload is too big.
- SEO impact
- None
- Use it when
- Upload limits (client_max_body_size).
- What it means
- The URL is too long.
- SEO impact
- Bad
- Use it when
- Endless query strings or redirect loops adding parameters.
- What it means
- The body format is not accepted.
- SEO impact
- None
- Use it when
- APIs.
- What it means
- Valid format, invalid data.
- SEO impact
- None
- Use it when
- Form and API validation errors.
- What it means
- Rate limit reached.
- SEO impact
- Bad if it lasts
- Use it when
- Rate limiting; send Retry-After.
- What it means
- Blocked for legal reasons.
- SEO impact
- Not indexed there
- Use it when
- Legal or regional blocks.
- What it means
- The site’s code crashed.
- SEO impact
- Bad
- Use it when
- Never on purpose: check the error log.
- What it means
- The server does not support the method.
- SEO impact
- Bad
- Use it when
- Unsupported HTTP methods.
- What it means
- A proxy got no valid answer from the app.
- SEO impact
- Bad if it lasts
- Use it when
- Never on purpose: the app server is down.
- What it means
- Overloaded or in maintenance.
- SEO impact
- Neutral for short periods
- Use it when
- Planned maintenance, with Retry-After.
- What it means
- The app answered too slowly.
- SEO impact
- Bad
- Use it when
- Never on purpose: find the slow request.
- What it means
- The HTTP version is not supported.
- SEO impact
- Bad
- Use it when
- Very old or broken clients.
- What it means
- Cloudflare could not reach your origin server correctly (empty answer, down, timeout, SSL).
- SEO impact
- Bad
- Use it when
- Check the origin server, its firewall and its certificate.
| Code | Name | What it means | SEO impact | Use it when |
|---|---|---|---|---|
| 100 | Continue | The server got the headers; the client may send the body. | None | Handled by the server automatically. |
| 101 | Switching Protocols | The connection switches, e.g. to WebSocket. | None | Opening a WebSocket. |
| 103 | Early Hints | Lets the browser preload CSS and fonts before the real answer. | Faster pages | Your server or CDN supports it. |
| 200 | OK | The page was found and returned. | Good: indexable | Every normal page. |
| 201 | Created | A new resource was created. | None | An API created something. |
| 202 | Accepted | The request was accepted and is processed later. | None | Background jobs in an API. |
| 204 | No Content | Success, but nothing to send back. | Nothing to index | APIs, tracking pixels. |
| 206 | Partial Content | Part of a file, as requested (Range). | None | Video and large downloads. |
| 301 | Moved Permanently | The page moved for good to the Location URL. | Good: passes ranking | URL changes, HTTPS, www moves, domain moves. |
| 302 | Found | Temporary redirect. | Neutral: old URL may stay indexed | A short-term move, A/B tests, login redirects. |
| 303 | See Other | Go to another page with GET. | Neutral | After a form is submitted. |
| 304 | Not Modified | The cached copy is still current. | Good: saves crawl budget | Caching with ETag / Last-Modified. |
| 307 | Temporary Redirect | Like 302, but keeps the method (POST stays POST). | Neutral | Temporary moves of APIs and forms. Also shown by browsers for HSTS. |
| 308 | Permanent Redirect | Like 301, but keeps the method. | Good: passes ranking | Permanent moves of APIs; Vercel and Next.js use it. |
| 400 | Bad Request | The request is malformed. | Bad: not indexed | Invalid input in an API. |
| 401 | Unauthorized | Login needed. | Not indexed (fine for private pages) | Members-only areas. |
| 403 | Forbidden | The server refuses access. | Bad if bots get it by mistake | Blocked folders. Check your firewall if bots get 403. |
| 404 | Not Found | No page at this URL. | Bad: dropped from Google | Truly missing pages. Redirect moved content with 301. |
| 405 | Method Not Allowed | The URL exists, not for this method. | None | A POST-only endpoint opened with GET. |
| 406 | Not Acceptable | No format matches the Accept header. | Bad | Rare; usually a misconfigured security rule. |
| 408 | Request Timeout | The client was too slow. | Temporary | Server-side timeouts. |
| 409 | Conflict | The request conflicts with the current state. | None | APIs, e.g. a duplicate record. |
| 410 | Gone | Removed on purpose, not coming back. | Removed from Google faster than 404 | Deleted products and pages with no replacement. |
| 413 | Content Too Large | The upload is too big. | None | Upload limits (client_max_body_size). |
| 414 | URI Too Long | The URL is too long. | Bad | Endless query strings or redirect loops adding parameters. |
| 415 | Unsupported Media Type | The body format is not accepted. | None | APIs. |
| 422 | Unprocessable Content | Valid format, invalid data. | None | Form and API validation errors. |
| 429 | Too Many Requests | Rate limit reached. | Bad if it lasts | Rate limiting; send Retry-After. |
| 451 | Unavailable For Legal Reasons | Blocked for legal reasons. | Not indexed there | Legal or regional blocks. |
| 500 | Internal Server Error | The site’s code crashed. | Bad | Never on purpose: check the error log. |
| 501 | Not Implemented | The server does not support the method. | Bad | Unsupported HTTP methods. |
| 502 | Bad Gateway | A proxy got no valid answer from the app. | Bad if it lasts | Never on purpose: the app server is down. |
| 503 | Service Unavailable | Overloaded or in maintenance. | Neutral for short periods | Planned maintenance, with Retry-After. |
| 504 | Gateway Timeout | The app answered too slowly. | Bad | Never on purpose: find the slow request. |
| 505 | HTTP Version Not Supported | The HTTP version is not supported. | Bad | Very old or broken clients. |
| 520–526 | Cloudflare errors | Cloudflare could not reach your origin server correctly (empty answer, down, timeout, SSL). | Bad | Check the origin server, its firewall and its certificate. |
The Status Code Explanation card in the report shows the meaning and SEO impact of the code your URL returns.
301, 302, 307 or 308:
which redirect to use.
Choose by two questions: is the move permanent, and must a POST stay a POST?
301 Moved Permanently
The standard permanent redirect. Search engines move the old URL’s ranking and links to the new one and replace it in their index. Use it for changed URLs, HTTP → HTTPS, www → non-www and domain moves.
- →Permanent
- →Passes ranking
- →Browsers cache it
302 Found
A temporary redirect. Google may keep the old URL indexed because you said it is coming back. Use it for short campaigns, geo or language detection, and login redirects — not for permanent moves.
- →Temporary
- →Old URL stays indexed
- →Not cached
307 Temporary Redirect
The same as 302, but the browser must repeat the same method and body. Use it for APIs and forms. When you see a 307 that you never set, it is usually the browser applying HSTS.
- →Temporary
- →Keeps POST
308 Permanent Redirect
The same as 301, but keeps the method and body. Google treats it like a 301. Next.js and Vercel use 308 by default.
- →Permanent
- →Keeps POST
- →Passes ranking
Meta refresh and JavaScript
A redirect inside the page (<meta http-equiv="refresh"> or location.href) is slower and less clear for search engines. Use a server redirect whenever you can — the SEO Analysis flags meta refreshes.
- →Avoid for SEO
How many redirects are OK?
One. Every extra hop costs time and can lose link value; Googlebot follows up to 10 and then gives up. If the chain shows http → https → www, change the first rule so it sends visitors straight to the final address.
- →Aim for 1 hop
- →Google stops after 10
301 redirect code
for every platform.
Redirect /old-page to https://example.com/new-page. Replace the two addresses with yours — or use Get the code in the tool, which fills them in for you.
use Illuminate\Support\Facades\Route;
Route::redirect('/old-page', 'https://example.com/new-page', 301);
// or: Route::permanentRedirect('/old-page', '/new-page');
Run php artisan route:clear after deploying if you cache routes.
<?php
header('Location: https://example.com/new-page', true, 301);
exit;
Must come before any HTML or echo.
app.get('/old-page', (req, res) => {
res.redirect(301, 'https://example.com/new-page');
});
Add it before your other routes and express.static().
module.exports = {
async redirects() {
return [
{ source: '/old-page', destination: '/new-page', statusCode: 301 },
];
},
};
permanent: true instead of statusCode sends a 308.
location = /old-page {
return 301 https://example.com/new-page;
}
Then: sudo nginx -t && sudo systemctl reload nginx
Redirect 301 /old-page https://example.com/new-page
Uses mod_alias, available on almost every shared host.
add_action('template_redirect', function () {
if (untrailingslashit(wp_parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)) === '/old-page') {
wp_redirect('https://example.com/new-page', 301);
exit;
}
});
Put it in a child theme or a code-snippets plugin. A redirect plugin works too.
from django.urls import path
from django.views.generic.base import RedirectView
urlpatterns = [
path('old-page', RedirectView.as_view(url='https://example.com/new-page', permanent=True)),
]
permanent=True sends 301, False sends 302.
from flask import redirect
@app.route('/old-page')
def old_page():
return redirect('https://example.com/new-page', code=301)
get '/old-page', to: redirect('https://example.com/new-page', status: 301)
<system.webServer>
<rewrite>
<rules>
<rule name="Old page" stopProcessing="true">
<match url="^old-page$" />
<action type="Redirect" url="https://example.com/new-page" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
Needs the IIS URL Rewrite module.
export default {
async fetch(request) {
const url = new URL(request.url);
if (url.pathname === '/old-page') {
return Response.redirect('https://example.com/new-page', 301);
}
return fetch(request);
},
};
Without code: Rules → Redirect Rules → Single Redirects.
{
"redirects": [
{ "source": "/old-page", "destination": "/new-page", "statusCode": 301 }
]
}
/old-page /new-page 301
Put the file in your publish folder.
Force HTTPS and
one www version.
The two redirects every site needs. Afterwards the 4 Versions Check should say “All versions point to one canonical URL”.
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
return 301 https://example.com$request_uri;
}
The certificate must cover both example.com and www.example.com.
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]
One rule, one hop: http://www, http:// and https://www all go straight to https://example.com.
->withMiddleware(function (Middleware $middleware) {
$middleware->trustProxies(at: '*'); // behind Cloudflare or a load balancer
$middleware->web(prepend: \App\Http\Middleware\ForceHttps::class);
})
// app/Http/Middleware/ForceHttps.php
public function handle(Request $request, Closure $next)
{
if (! $request->secure() && app()->isProduction()) {
return redirect()->secure($request->getRequestUri(), 301);
}
return $next($request);
}
app.set('trust proxy', true);
app.use((req, res, next) => {
const host = req.headers.host || '';
if (req.secure && !host.startsWith('www.')) return next();
res.redirect(301, `https://${host.replace(/^www\./, '')}${req.originalUrl}`);
});
Every SEO check
in the report.
What the SEO Analysis looks at, the standard it checks against, and what to add when it says Not found.
- Standard
- 30–60 characters, one per page
- Example
- <title>Main Keyword – Brand</title>
- Standard
- 70–160 characters, one per page
- Example
- <meta name="description" content="…">
- Standard
- One, usually pointing to itself
- Example
- <link rel="canonical" href="https://example.com/page">
- Standard
- Not set = index, follow
- Example
- <meta name="robots" content="noindex">
- Standard
- Optional
- Example
- <meta name="googlebot" content="nosnippet">
- Standard
- Optional; good for PDFs and images
- Example
- X-Robots-Tag: noindex
- Standard
- Required for mobile-first indexing
- Example
- <meta name="viewport" content="width=device-width, initial-scale=1">
- Standard
- Set it
- Example
- <html lang="en">
- Standard
- UTF-8
- Example
- <meta charset="utf-8">
- Standard
- Ignored by Google; not needed
- Standard
- Avoid; use a 301
- Standard
- Exactly one
- Example
- <h1>Main topic</h1>
- Standard
- Use them to structure content
- Example
- <h2>Section</h2>
- Standard
- 300+ for pages that should rank
- Standard
- Every content image
- Example
- <img src="a.jpg" alt="What it shows">
- Standard
- At least some internal links
- Example
- <a href="/related-page">
- What it is
- Title and text when shared on Facebook, LinkedIn, WhatsApp.
- Standard
- Set both
- Example
- <meta property="og:title" content="…">
- Standard
- 1200 × 630 px
- Example
- <meta property="og:image" content="https://…/share.jpg">
- Standard
- Set them
- Example
- <meta property="og:type" content="website">
- Standard
- summary_large_image
- Example
- <meta name="twitter:card" content="summary_large_image">
- Standard
- Optional: X falls back to og: tags
- Example
- <meta name="twitter:title" content="…">
- Standard
- Required
- Standard
- Recommended
- Example
- Strict-Transport-Security: max-age=31536000
- Standard
- Multilingual sites; include x-default
- Example
- <link rel="alternate" hreflang="de" href="…">
- Standard
- Valid JSON, a matching type
- Example
- <script type="application/ld+json">…
- What it is
- The small icon in tabs and Google results.
- Standard
- Set it
- Example
- <link rel="icon" href="/favicon.ico">
- Standard
- Optional
- Example
- <link rel="apple-touch-icon" href="/apple-touch-icon.png">
- Standard
- Should exist and answer 200
- Example
- User-agent: * / Allow: /
- What it is
- The list of your URLs for search engines.
- Standard
- Listed in robots.txt
- Example
- Sitemap: https://example.com/sitemap.xml
- What it is
- Whether robots.txt lets Googlebot, Bingbot, GPTBot, ClaudeBot, PerplexityBot and Google-Extended crawl this URL.
- Standard
- Googlebot must be allowed
- Example
- Disallow: /private/
- Standard
- On
- Example
- gzip on;
- Standard
- Under 500 KB
- What it is
- Time to the first byte of the final page.
- Standard
- Under 800 ms
| Check | What it is | Standard | Example |
|---|---|---|---|
| Title tag | The clickable headline in Google. | 30–60 characters, one per page | <title>Main Keyword – Brand</title> |
| Meta description | The text under the title in Google. | 70–160 characters, one per page | <meta name="description" content="…"> |
| Canonical URL | The main address of this content. | One, usually pointing to itself | <link rel="canonical" href="https://example.com/page"> |
| Meta robots | Index / follow rules for this page. | Not set = index, follow | <meta name="robots" content="noindex"> |
| Meta googlebot | The same rules for Google only. | Optional | <meta name="googlebot" content="nosnippet"> |
| X-Robots-Tag | The robots rules as an HTTP header. | Optional; good for PDFs and images | X-Robots-Tag: noindex |
| Viewport | Makes the page fit phones. | Required for mobile-first indexing | <meta name="viewport" content="width=device-width, initial-scale=1"> |
| Language | The page language on <html>. | Set it | <html lang="en"> |
| Charset | How the text is encoded. | UTF-8 | <meta charset="utf-8"> |
| Meta keywords | A list of keywords. | Ignored by Google; not needed | — |
| Meta refresh | A redirect inside the page. | Avoid; use a 301 | — |
| H1 heading | The main heading. | Exactly one | <h1>Main topic</h1> |
| H2 / H3 | Sub-headings. | Use them to structure content | <h2>Section</h2> |
| Word count | Visible words on the page. | 300+ for pages that should rank | — |
| Image alt text | Text that describes an image. | Every content image | <img src="a.jpg" alt="What it shows"> |
| Links | Internal, external and nofollow links. | At least some internal links | <a href="/related-page"> |
| og:title / og:description | Title and text when shared on Facebook, LinkedIn, WhatsApp. | Set both | <meta property="og:title" content="…"> |
| og:image | The picture of a shared link. | 1200 × 630 px | <meta property="og:image" content="https://…/share.jpg"> |
| og:url / og:type / og:site_name | Address, type and site name for shares. | Set them | <meta property="og:type" content="website"> |
| twitter:card | How a link looks on X. | summary_large_image | <meta name="twitter:card" content="summary_large_image"> |
| twitter:title / description / image | X-specific texts. | Optional: X falls back to og: tags | <meta name="twitter:title" content="…"> |
| HTTPS | Secure connection. | Required | — |
| HSTS header | Tells browsers to always use HTTPS. | Recommended | Strict-Transport-Security: max-age=31536000 |
| Hreflang | Language versions of the page. | Multilingual sites; include x-default | <link rel="alternate" hreflang="de" href="…"> |
| Structured data | JSON-LD schema for rich results. | Valid JSON, a matching type | <script type="application/ld+json">… |
| Favicon | The small icon in tabs and Google results. | Set it | <link rel="icon" href="/favicon.ico"> |
| Apple touch icon | Icon when saved to a phone home screen. | Optional | <link rel="apple-touch-icon" href="/apple-touch-icon.png"> |
| robots.txt | Crawl rules for the whole site. | Should exist and answer 200 | User-agent: * / Allow: / |
| XML sitemap | The list of your URLs for search engines. | Listed in robots.txt | Sitemap: https://example.com/sitemap.xml |
| Crawl access | Whether robots.txt lets Googlebot, Bingbot, GPTBot, ClaudeBot, PerplexityBot and Google-Extended crawl this URL. | Googlebot must be allowed | Disallow: /private/ |
| Compression | gzip or Brotli for text. | On | gzip on; |
| HTML size | Size of the page’s HTML. | Under 500 KB | — |
| Server response time | Time to the first byte of the final page. | Under 800 ms | — |
Above the checks you also get a score (the share of passed checks), a Google preview of how your title and description look in search, and a share preview with your og:image.
A complete
SEO head and robots.txt.
Copy these as a starting point and replace the example texts and addresses.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Main Keyword – Brand Name</title>
<meta name="description" content="A clear 120–160 character summary of the page with its main keyword.">
<link rel="canonical" href="https://example.com/page">
<link rel="icon" href="/favicon.ico" sizes="any">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<!-- language versions (multilingual sites only) -->
<link rel="alternate" hreflang="en" href="https://example.com/page">
<link rel="alternate" hreflang="x-default" href="https://example.com/page">
<!-- Open Graph: Facebook, LinkedIn, WhatsApp -->
<meta property="og:type" content="website">
<meta property="og:site_name" content="Brand Name">
<meta property="og:title" content="Main Keyword – Brand Name">
<meta property="og:description" content="The same summary for social shares.">
<meta property="og:url" content="https://example.com/page">
<meta property="og:image" content="https://example.com/images/share-1200x630.jpg">
<!-- X (Twitter) -->
<meta name="twitter:card" content="summary_large_image">
</head>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebPage",
"name": "Main Keyword – Brand Name",
"url": "https://example.com/page",
"publisher": {
"@type": "Organization",
"name": "Brand Name",
"logo": "https://example.com/logo.png"
}
}
</script>
Test it with Google’s Rich Results Test before publishing.
User-agent: *
Disallow: /admin/
Allow: /
# block AI training crawlers (optional)
User-agent: GPTBot
Disallow: /
Sitemap: https://example.com/sitemap.xml
Disallow stops crawling, not indexing. To keep a page out of Google, use noindex and let it be crawled.
gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_types text/css application/javascript application/json image/svg+xml text/plain application/xml;
10 redirect problems
and how to fix them.
What the tool finds most often, and the fix for each.
Questions
people ask.
A three-digit number the server sends with every answer. It says whether the page was found (200), moved (301, 302), missing (404) or broken (500). Browsers and search engines decide what to do based on it.
Last updated: · Built by Manamil Dev.