Search by

georgringer / linkvalidator2

georgringer

LinkValidator (rewrite) - Checks links in records and reports broken ones.

dev-main 2026-10-21 19:39 UTC

This package is auto-updated.

Last update: 2026-10-21 19:39:19 UTC


README

A rewrite of the TYPO3 system extension linkvalidator, developed as a local extension first. Once complete it replaces typo3/sysext/linkvalidator under the extension key linkvalidator. Status: work in progress. It can be tested on TYPO3 14.3 LTS next to the core linkvalidator.

composer require georgringer/linkvalidator2:dev-main
vendor/bin/typo3 extension:setup

Requires TYPO3 14.3 or main, PHP 8.4 or 8.5. Documentation: Documentation/ (editors, integrators, developers). Design decisions: Notes/ (German). Flow diagrams: claude.ai (German).

What it does

  • Finds links in records from the TCA schema: link fields, rich text, plain URLs, shortcut pages.
  • Resolves each link with the core LinkService and checks it with a checker per link type.
  • Stores one result per target, the places with a problem and a status per record (which is also the work queue).
  • Shows the result in the module Link Management > Check Links (new), the rich text editor, the page module, a dashboard widget and a mail report.

Usage

# check one record, print every link and its result
bin/typo3 linkvalidator2:check --record=tt_content:471
# check a page and its subpages right away
bin/typo3 linkvalidator2:check --page=1287 --depth=99
# message queue: queue a page tree, a worker checks it
bin/typo3 linkvalidator2:fillqueue 1287
bin/typo3 messenger:consume linkvalidator2_priority doctrine --time-limit=240
# mail broken links of an area, here only those broken for a week
bin/typo3 linkvalidator2:report 1287 --depth=99 --to=editor@example.org --min-age="7 days"

In the backend: select a page, choose the levels and press Check links. Settings are in the extension configuration (ext_conf_template.txt).

Tests

Standalone in containers, independent of the surrounding core checkout:

Build/Scripts/runTests.sh -s composerInstall
Build/Scripts/runTests.sh -s unit
Build/Scripts/runTests.sh -s functional            # sqlite, or -d mariadb|mysql|postgres

Test data for a local instance: Notes/seed-testdata.php (every kind of broken link below page 1287) and Notes/seed-bigtree.php (about 5,000 content elements for load tests).

Feature comparison

โœ… yes ยท ๐ŸŸก partly ยท โŒ no ยท โž– not on purpose ยท โ“ not verified ยท ๐Ÿ“‹ planned

The linkvalidator column names the Forge issue where the core has a known problem. Details and explanations: Notes/2026-10-21-feature-comparison-full.md.

Feature linkvalidator brofix linkvalidator2
Finding links
Fields derived from TCA โŒ list in TSconfig #96447 โŒ โœ…
Opt-out of tables / fields ๐ŸŸก โœ… โœ…
FlexForms โŒ ๐ŸŸก ๐Ÿ“‹
Shortcut pages โŒ #92542 โŒ โœ…
Plain-text URLs ๐ŸŸก   #97937 โœ… โœ…
Custom link types ๐ŸŸก #94086 โœ… โœ…
Hidden source records ๐ŸŸก option ๐ŸŸก option โœ…
Source hidden by its page โŒ #96447 โ“ ๐Ÿ“‹
Translation of a hidden original โŒ #94195 โ“ ๐Ÿ“‹
Workspaces โŒ ๐ŸŸก live only ๐Ÿ“‹ required
Checking
Pages, records, files, folders โœ… โœ… โœ…
Page hidden via parent (extendToSubpages) ๐ŸŸก #101367 fix in review (96918), #106675 โ“ โœ…
Restricted or scheduled target as notice โŒ โ“ โœ…
Shortcut / link page without reachable target โŒ #92542 โ“ โœ…
Empty or unresolvable links โŒ โ“ โœ…
Anchors (#c123) ๐ŸŸก #100933 โœ… โž–
External URLs ๐ŸŸก off by default โœ… โœ…
Result cache across runs โŒ #92700 โœ… โœ…
401/403/429/5xx/TLS/timeout as "unknown" โŒ #96525 #85006 โŒ โœ…
Full error message ๐ŸŸก #101935 โ“ โœ…
Escalate "unknown" to broken โŒ โ“ ๐Ÿ“‹
Polite crawling (delay, Retry-After) ๐ŸŸก user agent #89287 โœ… ๐ŸŸก user agent
Exclusions
Exclude URLs, domains, pages โŒ #85127 โœ… โœ…
"Ignore" from the report โŒ #92822 โ“ โœ…
Running checks
Scheduler / command โœ… task โœ… command โœ… command
Message queue, parallel workers โŒ โŒ โœ…
Checking large trees in the browser โŒ timeouts #89266 โ“ โœ…
Recheck on save ๐ŸŸก ๐ŸŸก โœ…
Results of hidden records removed โŒ #105911 โ“ โœ…
Cleanup on delete / move โŒ #89426 โœ… delete โœ…
Parallel runs locked โŒ #89266 โ“ ๐ŸŸก
Backend
Filter, sort, paginate ๐ŸŸก #89454 โœ… โœ…
Editors see only what they may fix ๐ŸŸก #105413 #104004 โœ… โœ…
Recheck a single link โŒ โœ… โœ…
Markers in the rich text editor ๐ŸŸก ๐ŸŸก โœ…
Page module callout โŒ โœ… โœ…
Dashboard widget โŒ โŒ โœ…
Mail report โœ… #106487 #106677 โœ… โœ…
Configuration and extending
Configuration Page TSconfig TSconfig + ext. conf. ext. conf., ๐Ÿ“‹ site settings
PSR-14 events โœ… 2 ๐ŸŸก ๐Ÿ“‹

Sources: core typo3/sysext/linkvalidator on main and brofix backup/brofix. Cells marked ๐ŸŸก or โ“ differ in detail or are not verified, check the code before relying on them. Open Forge issues: Resources/Private/Issues/.