Free SEO checker that shows its working.
Paste a URL. We fetch the page the way Google and AI crawlers do, run 32 checks, and give you a score out of 100 — with the measured value, the reason and the fix for every point we take off.
- Indexability
- 20/20
- Title & headings
- 11/15
- Content
- 10/15
- Structured data
- 6/10
- Social preview
- 9/10
- AI search readiness
- 11/20
- Technical basics
- 10/10
How the page looks in search

Every check, with the fix
Indexability
20 pts20 / 20- Pass
Page answers 200
Search engines only index pages that load successfully.
HTTP 200 - Pass
No redirects
Each hop costs crawl time and a little link equity. One redirect (http → https, or adding www) is normal.
- Pass
No noindex
Neither the robots meta tag nor the X-Robots-Tag header blocks indexing.
no robots meta, no X-Robots-Tag - Pass
Canonical points to this page
The page names itself as the version to index.
https://acme-notes.example/pricing - Pass
robots.txt allows Googlebot
Google may crawl this path.
allowed - Pass
Sitemap found
A sitemap is how search engines find new and deep pages quickly.
https://acme-notes.example/sitemap.xml · lists this page
Title & headings
15 pts11 / 15- Warn
Title is longer than Google shows
Google cuts titles at about 600px (roughly 60 characters). Whatever comes after is not seen.
Move the important words to the front and shorten to about 60 characters.
83 chars · ≈764px — Acme Notes Pricing — AI Meeting Notes for Teams, Plans from $8 a Month for Startups - Warn
Heading levels are skipped
Headings are the outline crawlers and screen readers use. Jumping from H2 to H4 breaks it.
Use the next level down (H2 → H3), styling it however you like.
H2 → H4 (“Personal”) - Pass
Meta description length is right
Fits in the snippet under the title.
133 chars — Compare Acme Notes plans. Free for personal use, Pro from $8 per seat with unlimited transcripts, speaker labels and Slack summaries. - Pass
Exactly one H1
One H1 names the page topic clearly.
Simple pricing for every team
Content
15 pts10 / 15- Warn
291 words in the HTML
Thin pages rarely rank: there is little for a search engine to match a query against.
Add useful copy: what it does, who it is for, how it works, FAQs. If the text exists but is rendered by JavaScript, render it on the server.
291 words before JavaScript runs - Warn
1 of 3 images lack alt
Alt text is how image search and screen readers know what an image shows. alt="" is fine for decoration.
Add alt text to meaningful images and alt="" to decorative ones.
2/3 with an alt attribute - Pass
4 internal links
Internal links let crawlers reach the rest of the site and tell them which pages matter. Links added only by JavaScript are not counted.
4 unique internal · 0 external - Pass
Language declared (en)
The lang attribute tells search engines and screen readers which language the page is in.
en
Structured data
10 pts6 / 10- Fail
1 JSON-LD block does not parse
A block with a JSON syntax error is ignored completely.
Fix the JSON (trailing commas and unescaped quotes are the usual cause) and test with Google’s Rich Results Test.
1/2 valid JSON - Pass
2 JSON-LD blocks
Structured data tells search engines and AI assistants what the page is — a product, an app, an article — in a form they do not have to guess.
- Pass
Uses schema.org types search engines read
Only some types produce rich results or are used by assistants; custom types are ignored.
SoftwareApplication, Offer
Social preview
10 pts9 / 10- Warn
No twitter:card
X shows a small card by default; summary_large_image gives the full-width image.
Add <meta name="twitter:card" content="summary_large_image">.
- Pass
og:title and og:description set
Slack, LinkedIn, X and iMessage build the link card from Open Graph tags; without them the card falls back to whatever they can scrape.
og:title — Acme Notes Pricing — Plans from $8 og:description — Free for personal use, Pro from $8 per seat. - Pass
Share image loads
Shared links will show this image.
https://acme-notes.example/og.png · 200 image/png
AI search readiness
20 pts11 / 20- Fail
PerplexityBot blocked
These crawlers fetch pages so ChatGPT search, Claude and Perplexity can cite and link them. Blocked, the page cannot be a source.
Allow the search crawlers in robots.txt. You can still block training crawlers like GPTBot separately.
PerplexityBot: Disallow: / - Warn
No /llms.txt
llms.txt is a short markdown index of your key pages for AI assistants. It is a proposal, not a standard, so missing it costs little.
Publish /llms.txt starting with "# Your product", a one-line summary, then links to pricing, docs and features.
https://acme-notes.example/llms.txt · 404 text/html - Pass
Content readable without JavaScript
Most AI crawlers do not run JavaScript. What is not in the server HTML does not exist for them, and Google renders it later, if at all.
291 words in the server HTML - Pass
Snippets allowed
Search engines may quote the page in snippets and AI answers.
- Info
Training crawlers blocked: GPTBot
GPTBot, ClaudeBot, Google-Extended and CCBot collect training data. Blocking them is your call and does not affect search, so it is not scored.
1 of 4 blocked
Technical basics
10 pts10 / 10- Pass
Served over HTTPS
HTTPS is a ranking signal and browsers mark plain HTTP pages as not secure.
https - Pass
Mobile viewport set
Google indexes the mobile version of pages. Without a viewport tag phones render a shrunken desktop page.
width=device-width, initial-scale=1 - Pass
Character set declared
Without a declared charset, accented and non-Latin text can come out garbled.
text/html; charset=utf-8 - Pass
Favicon declared
Google shows the favicon next to your result on mobile and desktop.
https://acme-notes.example/favicon.svg - Pass
HTML is 86 KB
Large HTML is slow on mobile, and Google stops reading a file after 15 MB.
86 KB - Pass
Responded in 412 ms
A slow server delays everything else on the page and slows crawling. Measured once from our server, so treat it as a rough number.
412 ms from our server, redirects included - N/A
Single language (no hreflang)
Each language version must list itself and the others, or Google ignores the set.
How the SEO score works
| Points | Area | What it measures |
|---|---|---|
| 20 | Indexability | Status 200, at most one redirect, no noindex, a self-referencing canonical, Googlebot allowed in robots.txt, a sitemap we can find. |
| 15 | Title & headings | Title 30–60 characters, meta description 70–160, exactly one H1, no skipped heading levels. |
| 15 | Content | Words in the HTML the server sends, alt text on images, internal links, a lang attribute. |
| 10 | Structured data | JSON-LD present, every block parses, and it uses a schema.org type search engines act on. |
| 10 | Social preview | og:title and og:description, an og:image that actually loads, a twitter:card. |
| 20 | AI search readiness | AI search crawlers (OAI-SearchBot, Claude-SearchBot, PerplexityBot) allowed, content readable without JavaScript, snippets allowed, /llms.txt. |
| 10 | Technical basics | HTTPS, mobile viewport, charset, favicon, HTML under 500 KB, response under 800 ms, hreflang that references itself. |
The rules
- Each check carries a weight inside its area. Pass earns all of it, warn half, fail none.
- Checks that do not apply — hreflang on a one-language site, alt text on a page without images — are skipped, and the area is scored on what is left.
- A page that cannot be indexed (not 200, noindex, or Googlebot blocked) is capped at 40: one blocker matters more than ten polish items.
- Blocking AI training crawlers is reported but never scored — that is your call. Blocking AI search crawlers is scored, because it removes you from cited answers.
- Nothing we cannot measure from one fetch gets weight: backlinks, rankings, Core Web Vitals.
What this SEO checker looks at
Can Google index it?
Status code, redirect chain, robots meta, X-Robots-Tag, canonical and sitemap.
Title and meta tags
Length in characters and in pixels, with a preview of the Google result.
Heading structure
One H1, and H2 → H3 order without skipped levels.
Content and links
Words before JavaScript, image alt text, internal links, the lang attribute.
Schema markup
Every JSON-LD block parsed, and its schema.org types listed.
Open Graph and X cards
The card people see when your link is shared, with the image actually fetched.
AI crawlers and llms.txt
Which AI search and training bots robots.txt lets in, and whether /llms.txt exists.
Speed and basics
Response time, HTML weight, HTTPS, mobile viewport, charset, favicon, hreflang.
What it can’t see
- Content that only appears after JavaScript runs — we read the HTML your server sends, which is also what most AI crawlers read.
- Core Web Vitals, backlinks and rankings. PageSpeed Insights and Google Search Console cover those.
- Pages behind a login or a bot challenge. The report says when we were turned away instead of guessing.
Get it in front of people looking for it.
Every listing on aidirecto is checked before it goes live and re-checked every week.
SEO checker FAQ
Is this SEO checker free?
Yes. No account and no email. Each address can run 20 checks an hour, which keeps the tool fast for everyone; a repeat check of the same URL within ten minutes reuses the last report.
Why is my score different from other SEO checkers?
Every tool weighs things differently. This one puts 20 of 100 points on AI search readiness and caps any page that cannot be indexed at 40. The full rules are on this page, so you can see exactly where each point went.
Does a higher score mean better rankings?
No. The score measures whether search engines and AI assistants can read, index and present the page. Rankings also depend on links, search intent and competition, which one fetch of one page cannot measure.
Should I block GPTBot and other AI crawlers?
Blocking training crawlers such as GPTBot, ClaudeBot or Google-Extended is a policy choice and does not change your score. Blocking the search crawlers — OAI-SearchBot, Claude-SearchBot, PerplexityBot — keeps your pages out of AI answers that cite and link sources, so that does cost points.
Can I check a page that renders with JavaScript?
Yes, but only what is in the HTML your server sends is scored. If the body is empty until JavaScript runs, the report says so. That is also what most AI crawlers see.
Do you store the pages I check?
No. The report is kept in a short-lived cache for ten minutes so a shared link opens instantly, then it is gone. Nothing is written to a database.