fulldecent/html-validate-nice-checkers

bug: canonical-link false positive on root URLs with multi-character TLDs (.app, .io, .dev, etc.)

Open

#28 opened on Jun 24, 2026

View on GitHub
 (2 comments) (0 reactions) (0 assignees)TypeScript (1 fork)github user discovery
help wanted

Repository metrics

Stars
 (2 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

Bug report

The nice-checkers/canonical-link rule incorrectly flags root canonical URLs when the TLD is multi-character (.app, .io, .dev, .ai, etc.).

Root cause

The extension check runs against the full URL string:

if (/\.\w+$/.test(href)) {

https://webscore.app matches because .app satisfies \.\w+$, even though the pathname has no extension.

Suggested fix

Test only url.pathname instead:

const url = new URL(href)
if (/\.\w+$/.test(url.pathname)) {

https://webscore.app has pathname /, so it passes. https://example.com/page.html has pathname /page.html, so extensions are still caught correctly.

Relates to #26

Contributor guide