Skip to main content
drupalreleases

Use direct release data with your AI assistant.

Learn more

Editoria11y Link Checker

No security coverage Under active development

Note for dev branch testers: also download the dev branch of Editoria11y; you need its pre-release library version and event hooks.. Editoria11y will tag a compatible release later this week.

Editoria11y Link Checker extends the Editoria11y Accessibility Checker to also monitor pages for broken links. Reports live under the Editoria11y dashboard, and broken links are highlighted inline.

The module is designed to dramatically reduce server load compared to other Drupal link checkers:

  1. Links are harvested by editors' browsers during the Editoria11y test run rather than string and DOM parsing during node save events.
  2. Discovered links are fully deduplicated, queuing only one check per URL.
  3. Internal links are validated using internal route logic.

How it works

  1. Harvest. When an editor views a page, Editoria11y collects every link, discards functional or ignored links, and attaches a list of new or changed URLs to the accessibility checker's report. If the site has a CSA membership license or trial, it also groups links by region (header, navigation, content, footer by default) to improve report views and allow for site-wide deduplication.
  2. Store. On the server, each distinct URL is normalized, deduplicated and stored, with an entity reference back to the relevant page and/or region.
  3. Check on cron at a configured interval, with the method based on the link type:
    • Most internal paths are validated by Drupal rather than requested: the path is resolved through aliases, redirects and the router, the target entity is checked for anonymous access, and files are checked on disk. This dramatically reduces server overhead over HTTP request HEAD checking.
    • Internal paths the router cannot validate (Views with arguments, private files) are requested over HTTP as an anonymous visitor.
    • External links go to a queue worker that requests them politely. Requests are heavily throttled: one request at a time per host, with a limited number of links per host per run. Optional configuration allows attaching an email address to the request, which can help reduce crawler blocking by some cloud CDN vendors.
  1. Flag. A link whose last check failed shows an inline alert; broken (404) are a red alert, other suspicious statuses are manual check request (e.g., redirects to a different domain). Editors can mark either type as OK or broken.
  2. Report. The Links tab under Reports โ†’ Content Accessibility contains lists of alerts organized by URL or page. Sites with a CSA license or trial also have separate reports for urgent alerts: broken links in menus or on specified "key" pages.

Initial setup

  1. Set permissions, and configure the ignore lists.
  2. If you are a CSA member, set template regions and key pages, and then use the Editoria11y CSA crawler to harvest existing links.
  3. Once several pages have been harvested, run cron and check the "Crawl Status" view in the Editoria11y Links dashboard to confirm checking has begun.

Ignores

Two layers decide what is never harvested:

  • Built in, not configurable. Links into Drupal's administrative and functional routes are dropped for internal links: /admin, /user and its login, logout, register and password pages, add, edit, delete, cancel, revisions, translations, layout, latest and preview pages, /batch, /cron, /filter/tips, /contextual, /session, /jsonapi, Views and system AJAX paths, and URLs carrying a destination, token, ajax_form or _wrapper_format parameter. Each is matched behind an optional language prefix. The same list is applied in the browser and again on the server, and the maintenance run removes links an updated list no longer accepts.
  • Profile pages. Links to /user/123 are ignored by default; sites with public profiles turn Ignore links to user profile pages off.
  • Configurable. Ignore URLs matching these patterns holds regular expressions matched against the absolute URL of every link, internal or external; Do not harvest links inside these containers holds CSS selectors (toolbar, contextual links, local tasks by default).

Internal links are identified by their path plus the query parameters listed under Query parameters kept on internal links (the core module's default list: search,keys,page,language,language_content_entity). Every other parameter is dropped before the link is stored, so /events?utm_source=x is stored and checked as if it is /events.

Coverage

Remember the harvesting script only sees pages when editors view them. To quickly "seed" a deep archive of rarely visited pages on an existing site, Editoria11y CSA members can run the CSA Crawler in the editoria11y_csa submodule.

Ask your assistant about Editoria11y Link Checker

Check compatibility with your Drupal and PHP version, maintenance and security coverage, from current release data. How it works

Depends on

Dependencies of the latest stable release

No dependencies recorded for this project.

Required by

Tracked projects that depend on this one

No tracked projects depend on this one yet.

Activity

Tracked releases
1
Tracked since
Oct 2026
Latest release
3 hours ago
Releases (12 mo)
1 ▲ from 0
Maintenance
Active

Releases

Version Type Core PHP Release date
3.0.x-dev Dev 10โ€“11 Oct 27, 2026