SEO title length checker
Check a title by width, not just characters: A Practical Guide to Writing Better SEO Titles, at 46 characters, takes about 297 of the 580 pixels, leaving 283. Wide capitals and narrow letters are weighted differently, so the estimate follows the real shape. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Title
- A Practical Guide to Writing Better SEO Titles
- Search engine
- Character count
- 46
- Estimated pixels
- 297
- Budget pixels
- 580
- Status
- within_budget
The SEO title length checker estimates how much horizontal space a page title is likely to occupy in a Google search result. Unlike a simple character counter, it gives narrow letters, wide letters, numbers, spaces, and non-Latin characters different weights, then compares the total with a typical 580-pixel display budget. The result shows whether the title fits, how many pixels remain, or how far it runs over. It is a practical planning estimate, not a promise that Google will display every title unchanged.
Why title width matters more than character count
Search result titles occupy a visual space, not a fixed number of characters. A title packed with narrow letters such as i and l can fit where another title of the same character count, filled with capitals or wide letters such as W and M, may be cut off. That is why rules such as “keep every title under 60 characters” are useful only as rough shortcuts.
This checker estimates the width of each character and adds those estimates before comparing the title with a typical Google desktop budget. The output includes the normalized title, its Unicode character count, estimated width, budget, fit decision, and the number of pixels remaining or exceeded. Use that information to compare candidate wording without pretending there is one universally safe character limit.
A concise title can still be wide, while a slightly longer one can remain comfortably within the available space. Pixel-aware checking makes that difference visible before a page is published or a template is rolled out across a site.
How the estimate is calculated
The calculation is deterministic and uses a small set of character-width categories. Spaces and punctuation receive narrow estimates; ordinary lowercase letters and digits receive medium estimates; capitals and naturally wide glyphs receive larger estimates; and characters outside the basic Latin ranges receive a conservative wide estimate. The categories approximate the relative proportions of a common search-result typeface without loading a font, opening a browser, or contacting Google.
The estimated total is compared with a 580-pixel planning budget for Google. A nonnegative difference produces a within-budget result and reports remaining pixels. A negative difference produces an over-budget result and reports the excess instead.
The estimate deliberately does not claim subpixel precision. Actual rendering can vary with the query, device, bolded terms, font updates, and Google's own rewriting, so treat the number as a consistent editorial signal rather than a measurement captured from a live result page.
How to use the result in an SEO workflow
Start with the title that best explains the page, then run it through the checker before optimizing punctuation or removing useful words. If the result is within budget with comfortable room, keep the clear version rather than filling every spare pixel. If it is only slightly over, test smaller edits: remove repetition, move the brand name, replace a long phrase with a precise shorter term, or cut punctuation that adds no meaning.
For template-driven sites, check representative short, average, and unusually long records so one successful example does not hide a systematic problem. Store the returned width and status beside each proposed title during review, but keep human judgment in the loop. Google may rewrite titles when they are repetitive, misleading, boilerplate-heavy, or poorly matched to a query, even when their estimated width fits.
Conversely, a title that exceeds the planning budget may still communicate its essential idea if the important words come first. The strongest workflow combines this predictable width check with accurate page content, distinctive titles, search intent, and periodic observation of real search results.
What you can do with it
Review a page before publication
Check whether a proposed title is likely to fit before an editor approves and publishes the page.
Audit title templates
Test representative product, category, and article names against a consistent pixel budget before deploying a template.
Compare title alternatives
Use estimated width and remaining space to choose between equally accurate wording options with different visual lengths.
FAQ
Why not just count 60 characters?
Characters have different visual widths, so two 60-character titles can occupy substantially different amounts of horizontal space.
Does a passing result guarantee that Google will show the full title?
No. Google can vary or rewrite titles based on the query, device, page signals, and its current presentation rules.
What Google budget does the checker use?
It uses 580 pixels as a practical desktop planning budget, not as an official or permanent limit.
Can I check an empty title?
No. An empty or whitespace-only title returns an invalid input error because there is nothing meaningful to assess.
Does the calculation call Google?
No. It is a local deterministic estimate with no network requests, live result scraping, or external font dependency.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/seo/title-length-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"A Practical Guide to Writing Better SEO Titles"}'const res = await fetch("https://api.kit.forhosting.com/seo/title-length-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"title": "A Practical Guide to Writing Better SEO Titles"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/seo/title-length-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"title": "A Practical Guide to Writing Better SEO Titles"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/seo/title-length-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"title":"A Practical Guide to Writing Better SEO Titles"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"title":"A Practical Guide to Writing Better SEO Titles"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/seo/title-length-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"title": "A Practical Guide to Writing Better SEO Titles"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "seo.title_length_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical questions
What does the checker cost?
It runs free in your browser. API requests cost $0.002 each.