Search by

priebera / typo3-a11y-quality-gate

priebera1

TYPO3-native accessibility checker and quality gate: WCAG-related checks for CKEditor content, TYPO3 records, rendered pages and browser scans, with issue management and publishing safeguards.

Package info

github.com/priebera1/typo3-a11y-quality-gate

Homepage

Documentation

Type:typo3-cms-extension

pkg:composer/priebera/typo3-a11y-quality-gate

Statistics

Installs: 233

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v2.0.2 2026-10-18 10:39 UTC

README

Latest Stable Version Total Downloads TYPO3 13.4 LTS | 14.3+ PHP 8.2+ License

Accessibility Quality Gate (AQG) is a TYPO3-native accessibility checker and quality gate. It runs WCAG-related checks on editor content, on the rendered page and in a real browser, keeps every finding attached to the TYPO3 record that caused it, and can warn or block publishing while open findings exceed your thresholds.

AQG automates the repeatable part of accessibility testing inside the editorial workflow. It does not replace manual testing and does not certify conformance — see Scope.

Product · Documentation · Pricing · Free Trial · Support · Packagist · TER

Install

composer require priebera/typo3-a11y-quality-gate
./vendor/bin/typo3 extension:setup

Supports TYPO3 13.4 LTS and TYPO3 14.3+.

Features

Free — no licence key required

  • CKEditor 5 inline highlighting for accessibility issues
  • Backend overview and page detail modules
  • Issue tracking with ignore / unignore workflow and expiry dates
  • Stable issue fingerprints across rescans
  • Batch ignore workflow with required reason confirmation
  • Per-rule enable / disable in Settings
  • Manual scans via backend module and CLI
  • Automated local scans via TYPO3 Scheduler
  • Changed-only scan mode for incremental rescans
  • Quality gate warning mode on page publish / unhide; editors can continue after reviewing the warning
  • Free Remote Preview — a limited daily browser-based frontend scan with axe-core (current limits are shown in the module)
  • FREE rendered page check — inspects the server-rendered HTML of a page; runs for backend page and site scans and for single-page CLI/Scheduler runs
  • CSV export
  • TCA-based field discovery for tt_content RTE and file fields
  • Settings module for enabling and disabling scanned fields
  • Built-in rules that help identify common WCAG 2.1 AA-related accessibility issues in RTE content, structured fields and rendered HTML

Trial / PRO / Agency

  • Remote browser accessibility scans via Playwright + axe-core
  • Remote browser scan results with issue breakdown and screenshot preview
  • Remote CSV export
  • Per-site quality gate configuration
  • Quality gate blocking mode on publish / unhide
  • Scan history and comparison of compatible scans (same site, scope, scan type, language and start URL)

The trial runs for 5 days with up to 10 pages per frontend scan and 5 frontend scans per day.

PRO / Agency

  • PDF export for overview and page detail reports
  • AI-assisted alt text, link text and iframe title suggestions (bring your own OpenAI key; editors review every suggestion)
  • Accessibility Statement Draft Assistant based on a completed frontend site scan
  • Verify fix — from a frontend finding, scan that page again and see Resolved, Still present or Not verified; a failed or incomplete scan never counts as resolved
  • Scheduled monitoring — a11y:monitor scans a site on a schedule and e-mails only when new or worse issues appear, or when a scan is incomplete or failed
  • Acceptance evidence — a PDF/CSV comparing a baseline and a current scan (fixed, new, still open, not compared) for clients and stakeholders

Agency

  • Several client TYPO3 installations on one licence: each installation is enrolled as its own project on its first validation, up to the licence's project limit, with its own scans and history
  • Project slots are managed in the customer portal
  • Monitoring several sites in one a11y:monitor run

Plan details, trial access and pricing:

Requirements

  • TYPO3 13.4 LTS or TYPO3 14.3+
  • PHP 8.2 or higher
  • No additional services required for the Free version

Screenshots

Overview

Overview module

Page detail

Page detail

CKEditor inline highlighting

CKEditor highlighting

Links

Product https://typo3.priebera.sk/products/accessibility-quality-gate
Documentation https://typo3.priebera.sk/docs
Support https://typo3.priebera.sk/contact
Trial https://typo3.priebera.sk/trial
Pricing https://typo3.priebera.sk/pricing
Portal https://typo3.priebera.sk/portal
Repository https://github.com/priebera1/typo3-a11y-quality-gate
Packagist https://packagist.org/packages/priebera/typo3-a11y-quality-gate
TER https://extensions.typo3.org/extension/a11y_quality_gate/

Compatibility

Version TYPO3 PHP Support
2.0+ 13.4 LTS / 14.3+ 8.2+ Features and bugfixes
1.4 – 1.9 13.4 LTS / 14.3+ 8.2+ Superseded by 2.0 (same requirements; see the upgrade notes)
1.3.x 13.4 LTS 8.2+ Security and bugfixes

Built-in rules

AQG includes rules across three categories. For the full reference with WCAG mappings and fix guidance see the documentation: https://typo3.priebera.sk/docs/rules-reference

RTE rules — CKEditor and RTE HTML content

Rule ID Severity WCAG
rte.img_alt_missing Critical 1.1.1
rte.img_alt_is_filename Warning 1.1.1
rte.img_alt_too_long Warning 1.1.1
rte.img_alt_redundant_phrase Warning 1.1.1
rte.empty_heading Critical 1.3.1
rte.empty_link Critical 2.4.4
rte.button_label_missing Critical 4.1.2
rte.form_control_missing_label Critical 4.1.2 / 3.3.2
rte.table_missing_header Warning 1.3.1
rte.table_th_missing_scope Warning 1.3.1
rte.table_missing_caption Info 1.3.1
rte.duplicate_id Warning 1.3.1
rte.svg_missing_title Warning 1.1.1
rte.iframe_missing_title Critical 4.1.2
rte.image_in_link_missing_alt Critical 1.1.1 / 2.4.4
rte.marquee_or_blink Critical 2.2.2
rte.non_descriptive_link Warning 2.4.4
rte.heading_hierarchy_jump Warning 1.3.1
rte.link_new_window_no_warning Warning 3.2.2
rte.link_text_is_url_or_filename Warning 2.4.4
rte.link_to_document Needs review 2.4.4
rte.link_to_document_missing_notice Info 2.4.4
rte.link_text_duplicate_different_targets Warning 2.4.4

Structured rules — TCA field values

Rule ID Severity WCAG
structured.file_reference_alt Critical 1.1.1
structured.file_reference_alt_quality Warning 1.1.1
structured.header_ctype_empty Warning 1.3.1
structured.header_link_no_text Critical 2.4.4 / 4.1.2
structured.header_level_is_h1 Needs review 1.3.1
structured.uploads_file_missing_description Warning 2.4.4
structured.table_missing_caption Info 1.3.1
structured.form_placeholder_as_label Warning 1.3.1 / 3.3.2
structured.form_field_label_missing Critical 1.3.1 / 3.3.2
structured.form_autocomplete_missing Warning 1.3.5
structured.media_no_transcript_hint Needs review 1.2.1

Some structured rules may adjust severity depending on the detected case, for example missing alternative text versus title-only fallback.

Rendered HTML rules — FREE, server-rendered HTML only

Rendered checks run for Scan this page and Scan site in the backend, and for CLI or Scheduler runs that target a single page (--page-uid / page UID). Subtree CLI and Scheduler runs apply the local rules only. They are always skipped in changed-only mode, when the rendered check is disabled in the ruleset, and for page doktypes that do not deliver a frontend page.

They inspect the final server-rendered HTML returned by TYPO3 and do not execute JavaScript, AJAX or lazy-loaded content.

Rule ID Severity WCAG
rendered.img_missing_alt Critical 1.1.1
rendered.empty_link Critical 2.4.4
rendered.empty_button Critical 4.1.2
rendered.empty_heading Critical 1.3.1
rendered.iframe_missing_title Critical 4.1.2
rendered.form_control_missing_label Critical 4.1.2 / 3.3.2
rendered.duplicate_id Warning 1.3.1
rendered.table_missing_header Warning 1.3.1
rendered.table_empty_header Warning 1.3.1
rendered.svg_missing_accessible_name Warning 1.1.1
rendered.html_lang_missing Warning 3.1.1
rendered.page_title_missing Warning 2.4.2
rendered.main_landmark_missing Needs review 1.3.1
rendered.landmark_unique Needs review 1.3.1

Installation and setup

composer require priebera/typo3-a11y-quality-gate

Then run TYPO3 extension setup and flush caches:

./vendor/bin/typo3 extension:setup
./vendor/bin/typo3 cache:flush

Next:

  1. Open the Accessibility Quality Gate module in the TYPO3 backend
  2. Review the automatically discovered fields in Settings → Scan fields (use Refresh fields after adding TCA fields)
  3. Configure a Scheduler task or run scans manually via backend module or CLI

For full setup and usage instructions see the documentation: https://typo3.priebera.sk/docs

Configuration

Field settings

In the Settings module you can:

  • refresh supported fields from TCA
  • enable or disable individual fields and rules
  • control which fields are included in future scans

Changes are applied only after clicking Save settings.

Quality Gate

A default ruleset is created automatically on first use.

Field Description
threshold_critical Maximum allowed open critical issues
threshold_warning Maximum allowed open warnings (-1 disables the warning threshold)
publish_mode 0 = disabled, 1 = warn, 2 = block (PRO)

For site-specific rulesets set site_identifier to match the TYPO3 site configuration identifier.

CLI usage

# Scan a subtree
./vendor/bin/typo3 a11y:scan --root-pid=1

# Scan a single page
./vendor/bin/typo3 a11y:scan --page-uid=42

# Scan changed content only
./vendor/bin/typo3 a11y:scan --root-pid=1 --changed-only

# Scan a specific language
./vendor/bin/typo3 a11y:scan --root-pid=1 --language=1

Scheduled frontend monitoring (PRO / Agency)

./vendor/bin/typo3 a11y:monitor --site=main --notify=web@example.org --backend-url=https://cms.example.org

In the TYPO3 Scheduler, add the task Accessibility monitoring (AQG PRO/Agency) (daily or weekly): it offers the configured sites and the languages enabled for the selected site, plus the recipients and limits. Each run scans the site, compares the result with the previous compatible scan and mails the recipients only when new or worse issues appear, or when the scan was incomplete or failed. An unchanged result is not mailed again. A run that finds the previous monitoring scan still running waits for it instead of starting another one. Several --site options (or --site=all) need an Agency licence.

Backend User TSconfig

options.a11y_quality_gate {
    showToolbarItem = 1
    showScanAll = 1
    showScanNow = 1
}
Option Default Description
showToolbarItem 1 Show the AQG item in the TYPO3 backend toolbar
showScanAll 1 Allow site scans ("Scan site", content and frontend)
showScanNow 1 Allow single-page scans ("Scan this page", the Free Remote Preview and Verify fix)

These options gate the actions server-side as well. In addition, every result follows TYPO3 page permissions: page findings need read access to the page, site-wide results (Overview, site scans, statements) need read access to the site root, and scanning or cancelling needs edit access to the page or site root.

Scope

AQG helps teams identify common accessibility issues early in the TYPO3 editorial workflow. It is not a legal certification tool and cannot guarantee WCAG, EAA, BITV or any other accessibility compliance on its own.

The Free rendered page check analyzes server-rendered HTML only. It does not execute JavaScript, wait for AJAX or lazy-loaded content, interact with cookie banners or take screenshots. Browser-based frontend scans with axe-core run in the AQG remote scanner, either as the limited daily Free Remote Preview or with a Trial, PRO or Agency licence; screenshots need a Trial, PRO or Agency licence.

Accessibility Quality Gate does not replace a full accessibility audit, keyboard testing, assistive technology testing or a professional WCAG review. Some rules reflect best practices and may not always correspond to a hard WCAG 2.1 failure in every context. All findings should be reviewed in context.

License

GPL-2.0-or-later