First CH Apps / Japanese Readability Checker
Enter a URL and we fetch the page's HTML and CSS on our server, then check only the Japanese typography of its body text: lines where a single character spills onto the last line, punctuation or closing brackets at the start of a line, body text whose line length is too long or too short, and missing Japanese fonts. Everything is estimated for a desktop (1280px) and a mobile (375px) viewport and listed with the affected spots.
Metadata such as title and description belongs to the Meta Tag & SEO Basics Check; structured data, image alt text and AI-crawler access each have their own app. This page looks only at how readable the Japanese text is set.
A server cannot render the page, so we derive the text width, font size and letter-spacing from the HTML and CSS and reproduce line breaking for a desktop (1280px) and a mobile (375px) viewport. Full-width characters count as 1 and half-width letters and digits as 0.5.
Characters per line = text width ÷ (font size + letter-spacing), in full-width characters. The guideline is 35–40, the range usually considered comfortable for Japanese body text. Mobile is shown for reference (it is set by the screen width); the verdict uses desktop.
An orphan is a paragraph (each block separated by <br>) whose last line keeps one character or fewer, not counting punctuation and closing brackets.
Three line-start problems are checked: punctuation or a closing bracket right after <br>, punctuation at line start caused by line-break: anywhere, and small kana / the long-vowel mark at line start, which the browser default (line-break: auto / normal) allows.
For fonts we check whether the font-family on body text includes a Japanese typeface, covers both Windows and Mac, has a local font behind any web font, and ends with a generic family such as sans-serif.
Body text means blocks containing Japanese inside main / article (or the whole page if there is none). Navigation, header, footer, sidebar, headings, tables and forms are excluded.
Limits: text rendered later by JavaScript, some CSS (sibling combinators, :has(), container queries, multi-column) and the real glyph widths of web fonts are not reproduced, and stylesheets beyond the limit (8) are not read. Use the results as pointers for checking on real devices.
Sent: only the URL you type (and the characters-per-line value if you enter one). Our server (Cloudflare Workers) fetches that URL once as a public page, plus the stylesheets it loads (up to 8).
Stored: nothing. The check lives entirely inside one request and writes neither the URL, the fetched content nor the result to any database (no KV, no D1). It leaves memory when the request ends.
Returned: our findings and excerpts of a few dozen characters that point to each spot. We never re-serve the fetched HTML or CSS, so this app cannot be used to browse other sites through us.
Note: public GET only. URLs pointing at internal networks, localhost or private IPs are rejected.
POST /ja-readability-check/api/check with JSON ({"url": "https://example.com/", "cpl": 40}; cpl is optional) or a form body and you get the same findings back as JSON.