W3C HTML Validator
Pricing
from $2.00 / 1,000 results
W3C HTML Validator
Validate the HTML of web pages or whole sites with the Nu Html Checker, the engine behind the W3C validator, running inside the actor: errors, warnings, line numbers and markup for every page.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Alexandre Paradis
Maintained by CommunityActor stats
2
Bookmarked
11
Total users
0
Monthly active users
a day ago
Last modified
Categories
Share
W3C HTML Validator checks the HTML of web pages against the HTML standard and reports every error and warning with its line, column and markup. It runs the Nu Html Checker, the engine behind the W3C validator, inside the actor. There is no rate limit from the public W3C service, so you can check a whole site in one run.
What does it check?
The Nu Html Checker reports what the W3C validator reports:
- Errors: invalid or misnested elements, missing required attributes (such as
alton images), duplicate attributes and IDs, obsolete elements, bad attribute values. - Warnings: problems that are allowed but likely mistakes, such as a section without a heading or a missing
langattribute. - Info: notes about the document.
How to validate HTML for a whole website
- Add the pages to check to Start URLs.
- To check more than those pages, set Link depth. With 1, the actor also checks every page they link to on the same site, and with 2 the pages those link to.
- Set Maximum pages per start URL to cap the run.
- Click Start. The Pages view shows one row per page with its error and warning counts. The Messages view shows one row per message.
Input
| Field | Description | Default |
|---|---|---|
startUrls | Pages to check | required |
maxCrawlDepth | 0 checks only the start URLs, 1 also checks the pages they link to on the same site, and so on | 0 |
maxPages | Maximum pages checked for each start URL, including the pages reached from it | 100 |
minSeverity | Lowest severity listed in messages: error, warning or info. Counts always include every message | warning |
proxyConfiguration | Proxy settings. Off by default | no proxy |
{"startUrls": [{ "url": "https://example.com" }],"maxCrawlDepth": 2,"maxPages": 50,"minSeverity": "error"}
Output
One item per checked page:
{"url": "https://example.com/","statusCode": 200,"valid": false,"counts": { "error": 8, "warning": 2, "info": 0 },"messages": [{"severity": "error","type": "error","subType": null,"message": "An “img” element must have an “alt” attribute, except under certain conditions. For details, consult guidance on providing text alternatives for images.","extract": "d <b>bold\n<img src=\"photo.jpg\">\n<div>","firstLine": 9,"firstColumn": 1,"lastLine": 9,"lastColumn": 21}],"depth": 0,"checkedAt": "2026-10-15T16:30:12.114Z"}
valid is true when the page has no error. Warnings do not make a page invalid. type and subType are the checker's own values (an error with the fatal subtype, or info with the warning subtype).
How much does it cost?
The actor charges per checked page. The current price is on the Pricing tab. The validator starts with each run, which adds a few seconds, so checking many pages in one run is cheaper than many runs of one page.
Good to know
- The actor checks the HTML the server sends, like the W3C validator does with a URL. Content added later by JavaScript is not checked.
- Only the HTML is checked. When given a URL, the public W3C validator also checks some HTTP response headers (for example
Content-Security-Policy), so it can report a message or two more than this actor. - Pages are sent to the validator as UTF-8. A page served in another encoding may get an extra message about its declared encoding.
- Pages that answer with an error status (404, 500...) are skipped and logged.
- Only links on the same host as the page are followed, and links to files (PDF, images, archives...) are ignored.
Migrating from version 0.x
Version 1.0 checks pages with a validator inside the actor instead of calling validator.w3.org:
- One item per page, with counts and the list of messages, instead of one item per message. To get one row per message, use the Messages view or the API's
unwind=messagesparameter. severityis nowerror,warningorinfo.typeandsubTypekeep the checker's own values.- New inputs:
maxCrawlDepth,maxPagesandminSeverity.debugis gone. - No more failures from the public validator's rate limit.
Support
Found a bug or need an option? Open an issue on the actor's Issues tab.
