Seiten brauchen eine Überschriftenstruktur, Landmarks und einen Skip-Link

Menschen, die einen Screenreader nutzen, bewegen sich anhand von Überschriften und Bereichen durch eine Seite, so wie sehende Kundinnen und Kunden sie überfliegen. Fehlen diese und ein Link „Zum Inhalt springen“, müssen sie sich auf jeder Seite den gesamten Header und das Mega-Menü anhören, bevor sie zu den Produkten gelangen.

Regel-ID
vs-headings-landmarks
Quelle
Validiscan-Prüfung
Auswirkung
Mittel
Korrekturstufe
AUTO
auf Shopify, Shopware, WooCommerce und Magento
Status
wird ausgeführt

Was geprüft wird

Markiert Seiten ohne h1, übersprungene Überschriftenebenen, eine fehlende main-Landmark, doppelte Landmarks ohne Beschriftung und einen fehlenden Skip-Link (1.3.1, 2.4.1). Ersetzt die axe-Regeln bypass, page-has-heading-one, landmark-one-main und heading-order.

Die Prüfung läuft in jedem gescannten Viewport und ignoriert Überschriften und Landmarks, die dort mit display: none oder aria-hidden="true" verborgen sind.

  • Überschriften: h1 bis h6 und role="heading" (Ebene aus aria-level, sonst 2) in der Reihenfolge des Dokuments, außer innerhalb von Dialogen. Mehrere h1-Elemente werden ebenfalls gemeldet. Ein Sprung liegt vor, wenn eine Überschrift mehr als eine Ebene tiefer liegt als die vorherige; der Befund steht am ersten Sprung.
  • Landmarks: header und footer zählen nur außerhalb von article, aside, main, nav und section; section und form zählen nur mit aria-labelledby, aria-label oder title. Haben zwei oder mehr Landmarks derselben Rolle denselben Namen oder gar keinen, ergibt das einen Befund pro Rolle.
  • Skip-Link: Eines der ersten zehn fokussierbaren Elemente in der Reihenfolge des Dokuments muss ein seiteninterner Link sein, dessen Name ein Wort wie „skip“ oder „zum Inhalt“ enthält und dessen Ziel existiert. Links außerhalb des sichtbaren Bereichs zählen mit. Ein fehlerhaftes Ziel wird am Link gemeldet. Gibt es eine main-Landmark, hat ein fehlender Skip-Link die Auswirkung „Mittel“ statt „Schwerwiegend“.

Ob die Überschriften ihre Abschnitte beschreiben, muss ein Mensch beurteilen.

So wird es behoben

Fügen Sie als erstes fokussierbares Element einen Link „Zum Inhalt springen“ ein, umschließen Sie den Seiteninhalt mit einem einzigen <main>-Element, geben Sie jeder Seite eine h1 (den Produkt- oder Kategorienamen), verschachteln Sie die übrigen Überschriften, ohne Ebenen zu überspringen, und beschriften Sie wiederholte Navigationsbereiche mit aria-label.

WCAG-Erfolgskriterien

Abschnitte der EN 301 549

Der Abschnitt der EN 301 549 zu jedem Kriterium, je Version der Norm
WCAG-Kriterium Version 3.2.1 Version 4.1.1
1.3.1 9.1.3.1 9.1.3.1
2.4.1 9.2.4.1 9.2.4.1

Wo ein Rezept es behebt

Shopify: Rezept heading-levels

Vorher und nachher anzeigen (1)
Vorher und nachher Beispieldaten

sections/featured-collection.liquid Änderungen an sections/featured-collection.liquid: 1 hinzugefügt, 1 entfernt

Änderungen an sections/featured-collection.liquid: 1 hinzugefügt, 1 entfernt
Zeile vorher Zeile nachher Änderung Code
1 1 {%- liquid
2 2 assign featured = section.settings.collection
3 Entfernt assign card_heading = 'h4'
3 Hinzugefügt assign card_heading = 'h3'
4 4 -%}
5 5 <div class="featured-collection page-width section-spacing">
6 6 <div class="title-wrapper">

sections/header.liquid Änderungen an sections/header.liquid: 3 hinzugefügt, 0 entfernt

Änderungen an sections/header.liquid: 3 hinzugefügt, 0 entfernt
Zeile vorher Zeile nachher Änderung Code
3 3 assign menu = linklists[section.settings.menu]
4 4 assign icon_size = 18
5 5 assign logo_is_heading = false
6 Hinzugefügt if request.page_type == 'index'
7 Hinzugefügt assign logo_is_heading = true
8 Hinzugefügt endif
6 9 -%}
7 10 <div class="header-wrapper">
8 11 <header class="header page-width"{% if header_lang != '' %} lang="{{ header_lang }}"{% endif %}>

sections/main-collection.liquid Änderungen an sections/main-collection.liquid: 1 hinzugefügt, 1 entfernt

Änderungen an sections/main-collection.liquid: 1 hinzugefügt, 1 entfernt
Zeile vorher Zeile nachher Änderung Code
6 6 wishlist heart nested inside the product image link.
7 7 {%- endcomment -%}
8 8 {%- liquid
9 Entfernt assign card_heading = 'h4'
9 Hinzugefügt assign card_heading = 'h3'
10 10 assign price_max = collection.price_max_rounded
11 11 assign in_stock_count = collection.products | where: 'available', true | size
12 12 assign out_of_stock_count = collection.products_count | minus: in_stock_count

sections/main-product.liquid Änderungen an sections/main-product.liquid: 1 hinzugefügt, 1 entfernt

Änderungen an sections/main-product.liquid: 1 hinzugefügt, 1 entfernt
Zeile vorher Zeile nachher Änderung Code
13 13 assign featured = product.featured_image
14 14 assign form_id = 'product-form-' | append: section.id
15 15 assign qty_id = 'Quantity-' | append: section.id
16 Entfernt assign sub_heading = 'h4'
16 Hinzugefügt assign sub_heading = 'h2'
17 17 assign size_option = nil
18 18 for option in product.options_with_values
19 19 if option.name == 'Size'

sections/main-search.liquid Änderungen an sections/main-search.liquid: 1 hinzugefügt, 1 entfernt

Änderungen an sections/main-search.liquid: 1 hinzugefügt, 1 entfernt
Zeile vorher Zeile nachher Änderung Code
1 1 {%- liquid
2 Entfernt assign card_heading = 'h4'
2 Hinzugefügt assign card_heading = 'h3'
3 3 -%}
4 4 <div class="template-search page-width">
5 5 <h1 class="template-search__title">{{ 'templates.search.title' | t }}</h1>
Vorher und nachher anzeigen (1)
Vorher und nachher Beispieldaten

assets/base.css.liquid Änderungen an assets/base.css.liquid: 30 hinzugefügt, 0 entfernt

Änderungen an assets/base.css.liquid: 30 hinzugefügt, 0 entfernt
Zeile vorher Zeile nachher Änderung Code
1866 1866 }
1867 1867
1868 1868 /* ----------------------------------------------------------------- motion */
1869 Hinzugefügt
1870 Hinzugefügt /* validiscan:skip-link-main */
1871 Hinzugefügt .skip-to-content-link:not(:focus) {
1872 Hinzugefügt position: absolute !important;
1873 Hinzugefügt overflow: hidden;
1874 Hinzugefügt width: 1px;
1875 Hinzugefügt height: 1px;
1876 Hinzugefügt margin: -1px;
1877 Hinzugefügt padding: 0;
1878 Hinzugefügt border: 0;
1879 Hinzugefügt clip: rect(0 0 0 0);
1880 Hinzugefügt white-space: nowrap;
1881 Hinzugefügt }
1882 Hinzugefügt
1883 Hinzugefügt .skip-to-content-link:focus {
1884 Hinzugefügt z-index: 9999;
1885 Hinzugefügt position: fixed !important;
1886 Hinzugefügt top: 0.5rem;
1887 Hinzugefügt left: 0.5rem;
1888 Hinzugefügt overflow: visible;
1889 Hinzugefügt width: auto;
1890 Hinzugefügt height: auto;
1891 Hinzugefügt margin: 0;
1892 Hinzugefügt padding: 0.75rem 1.25rem;
1893 Hinzugefügt clip: auto;
1894 Hinzugefügt background-color: #ffffff;
1895 Hinzugefügt color: #121212;
1896 Hinzugefügt text-decoration: underline;
1897 Hinzugefügt }
1898 Hinzugefügt /* /validiscan:skip-link-main */

layout/checkout.liquid Änderungen an layout/checkout.liquid: 4 hinzugefügt, 3 entfernt

Änderungen an layout/checkout.liquid: 4 hinzugefügt, 3 entfernt
Zeile vorher Zeile nachher Änderung Code
18 18 </head>
19 19
20 20 <body class="template-checkout">
21 Hinzugefügt <a class="skip-to-content-link" href="#MainContent">{{ 'accessibility.skip_to_text' | t }}</a>
21 22 <header class="checkout-header">
22 23 <div class="page-width checkout-header__inner">
23 24 <a href="{{ routes.root_url }}" class="checkout-header__logo"><img src="{{ 'logo.svg' | asset_url }}" width="140" height="32"></a>
24 Entfernt <nav class="checkout-breadcrumb">
25 Hinzugefügt <nav class="checkout-breadcrumb" aria-label="{{ 'accessibility.breadcrumbs' | t | escape }}">
25 26 <ol class="checkout-breadcrumb__list" role="list">
26 27 <li><a href="{{ routes.cart_url }}" class="checkout-breadcrumb__link">Cart</a></li>
27 28 <li><span class="checkout-breadcrumb__current">Information</span></li>
31 32 </nav>
32 33 </div>
33 34 </header>
34 Entfernt <div class="main checkout" id="MainContent">
35 Hinzugefügt <main class="main checkout" id="MainContent" tabindex="-1">
35 36 {{ content_for_layout }}
36 Entfernt </div>
37 Hinzugefügt </main>
37 38
38 39 <footer class="checkout-footer">
39 40 <div class="page-width">

layout/theme.focused.liquid Änderungen an layout/theme.focused.liquid: 1 hinzugefügt, 0 entfernt

Änderungen an layout/theme.focused.liquid: 1 hinzugefügt, 0 entfernt
Zeile vorher Zeile nachher Änderung Code
22 22 </head>
23 23
24 24 <body class="gradient template-{{ template.name | handleize }} layout-focused">
25 Hinzugefügt <a class="skip-to-content-link" href="#MainContent">{{ 'accessibility.skip_to_text' | t }}</a>
25 26 {% section 'header' %}
26 27
27 28 <main id="MainContent" class="content-for-layout focus-none" role="main" tabindex="-1">

layout/theme.liquid Änderungen an layout/theme.liquid: 1 hinzugefügt, 0 entfernt

Änderungen an layout/theme.liquid: 1 hinzugefügt, 0 entfernt
Zeile vorher Zeile nachher Änderung Code
28 28 </head>
29 29
30 30 <body class="gradient template-{{ template.name | handleize }}">
31 Hinzugefügt <a class="skip-to-content-link" href="#MainContent">{{ 'accessibility.skip_to_text' | t }}</a>
31 32
32 33 {% sections 'header-group' %}
33 34

locales/en.default.json Änderungen an locales/en.default.json: 3 hinzugefügt, 1 entfernt

Änderungen an locales/en.default.json: 3 hinzugefügt, 1 entfernt
Zeile vorher Zeile nachher Änderung Code
34 34 "total_reviews": "{{ count }} reviews",
35 35 "link_messages": {
36 36 "new_window": "Opens in a new window."
37 Entfernt }
37 Hinzugefügt },
38 Hinzugefügt "breadcrumbs": "Breadcrumbs",
39 Hinzugefügt "mobile_menu": "Mobile menu"
38 40 },
39 41 "sections": {
40 42 "header": {

sections/footer.liquid Änderungen an sections/footer.liquid: 1 hinzugefügt, 1 entfernt

Änderungen an sections/footer.liquid: 1 hinzugefügt, 1 entfernt
Zeile vorher Zeile nachher Änderung Code
17 17 {%- endform -%}
18 18 </div>
19 19
20 Entfernt <nav class="footer__menus">
20 Hinzugefügt <nav class="footer__menus" aria-label="{{ 'sections.footer.menu' | t | escape }}">
21 21 {%- for handle in menu_handles %}
22 22 {%- assign footer_menu = linklists[handle] %}
23 23 <div class="footer-block footer-block--menu">

sections/header.liquid Änderungen an sections/header.liquid: 2 hinzugefügt, 2 entfernt

Änderungen an sections/header.liquid: 2 hinzugefügt, 2 entfernt
Zeile vorher Zeile nachher Änderung Code
11 11 {%- render 'icon', icon: 'menu', size: icon_size -%}
12 12 </summary>
13 13 <div class="menu-drawer">
14 Entfernt <nav class="menu-drawer__navigation">
14 Hinzugefügt <nav class="menu-drawer__navigation" aria-label="{{ 'accessibility.mobile_menu' | t | escape }}">
15 15 <ul class="menu-drawer__menu list-unstyled" role="list">
16 16 {%- for link in menu.links %}
17 17 <li><a href="{{ link.url }}" class="menu-drawer__menu-item">{{ link.title | escape }}</a></li>
25 25 <a href="{{ routes.root_url }}" class="header__heading-link"><img src="{{ 'logo.svg' | asset_url }}" width="{{ settings.logo_width }}" height="32" class="header__heading-logo"></a>
26 26 {% if logo_is_heading %}</h1>{% else %}</div>{% endif %}
27 27
28 Entfernt <nav class="header__inline-menu">
28 Hinzugefügt <nav class="header__inline-menu" aria-label="{{ 'sections.header.main_menu' | t | escape }}">
29 29 <ul class="list-menu list-menu--inline" role="list">
30 30 {%- for link in menu.links %}
31 31 <li>

Shopware: Rezept heading-levels

Vorher und nachher anzeigen (1)
moves a static grid title from h3 to h2; the skipped level is gone Beispieldaten

Resources/views/storefront/block/cms-block-product-grid.html.twig Änderungen an Resources/views/storefront/block/cms-block-product-grid.html.twig: 1 hinzugefügt, 1 entfernt

Änderungen an Resources/views/storefront/block/cms-block-product-grid.html.twig: 1 hinzugefügt, 1 entfernt
Zeile vorher Zeile nachher Änderung Code
5 5 {% block block_product_grid %}
6 6 <div class="cms-block cms-block-product-grid">
7 7 <div class="cms-block-container">
8 Entfernt <h3 class="cms-block-title">{{ block.title }}</h3>
8 Hinzugefügt <h2 class="cms-block-title">{{ block.title }}</h2>
9 9 <div class="row cms-listing-row">
10 10 {% for product in block.products %}
11 11 {% sw_include '@Storefront/storefront/component/product/card/box-standard.html.twig' with { product: product } %}
Vorher und nachher anzeigen (1)
adds a skip link, a <main> landmark and navigation names; the landmark problems are gone Beispieldaten

Resources/app/storefront/src/scss/base.scss Änderungen an Resources/app/storefront/src/scss/base.scss: 24 hinzugefügt, 0 entfernt

Änderungen an Resources/app/storefront/src/scss/base.scss: 24 hinzugefügt, 0 entfernt
Zeile vorher Zeile nachher Änderung Code
1708 1708 margin: 8px 0 0;
1709 1709 font-size: 0.875rem;
1710 1710 }
1711 Hinzugefügt
1712 Hinzugefügt /* validiscan:skip-link-main */
1713 Hinzugefügt /* Skip link: parked off-screen, shown at the top left when it receives keyboard focus (WCAG 2.4.1). */
1714 Hinzugefügt .skip-to-content-link {
1715 Hinzugefügt position: absolute;
1716 Hinzugefügt top: 8px;
1717 Hinzugefügt left: -10000px;
1718 Hinzugefügt z-index: 10000;
1719 Hinzugefügt padding: 12px 16px;
1720 Hinzugefügt border: 2px solid #1f2328;
1721 Hinzugefügt background: #ffffff;
1722 Hinzugefügt color: #1f2328;
1723 Hinzugefügt font-weight: 700;
1724 Hinzugefügt }
1725 Hinzugefügt
1726 Hinzugefügt .skip-to-content-link:focus {
1727 Hinzugefügt left: 8px;
1728 Hinzugefügt }
1729 Hinzugefügt
1730 Hinzugefügt /* The skip target takes focus programmatically; it needs no focus ring of its own. */
1731 Hinzugefügt #content-main:focus {
1732 Hinzugefügt outline: none;
1733 Hinzugefügt }
1734 Hinzugefügt /* /validiscan:skip-link-main */

Resources/snippet/de_DE/kaffeekontor-nord.de-DE.json Änderungen an Resources/snippet/de_DE/kaffeekontor-nord.de-DE.json: 7 hinzugefügt, 0 entfernt

Änderungen an Resources/snippet/de_DE/kaffeekontor-nord.de-DE.json: 7 hinzugefügt, 0 entfernt
Zeile vorher Zeile nachher Änderung Code
193 193 "notFoundText": "Die gesuchte Seite existiert nicht oder wurde verschoben.",
194 194 "backToHome": "Zurück zur Startseite",
195 195 "searchInstead": "Unsere Kaffees durchsuchen"
196 Hinzugefügt },
197 Hinzugefügt "a11y": {
198 Hinzugefügt "navigation": {
199 Hinzugefügt "breadcrumb": "Brotkrümelnavigation",
200 Hinzugefügt "service": "Servicenavigation",
201 Hinzugefügt "main": "Hauptnavigation"
202 Hinzugefügt }
196 203 }
197 204 }

Resources/snippet/en_GB/kaffeekontor-nord.en-GB.json Änderungen an Resources/snippet/en_GB/kaffeekontor-nord.en-GB.json: 7 hinzugefügt, 0 entfernt

Änderungen an Resources/snippet/en_GB/kaffeekontor-nord.en-GB.json: 7 hinzugefügt, 0 entfernt
Zeile vorher Zeile nachher Änderung Code
193 193 "notFoundText": "The page you are looking for does not exist or has moved.",
194 194 "backToHome": "Back to the homepage",
195 195 "searchInstead": "Search our coffees"
196 Hinzugefügt },
197 Hinzugefügt "a11y": {
198 Hinzugefügt "navigation": {
199 Hinzugefügt "breadcrumb": "Breadcrumb",
200 Hinzugefügt "service": "Service navigation",
201 Hinzugefügt "main": "Main navigation"
202 Hinzugefügt }
196 203 }
197 204 }

Resources/views/storefront/base.html.twig Änderungen an Resources/views/storefront/base.html.twig: 4 hinzugefügt, 3 entfernt

Änderungen an Resources/views/storefront/base.html.twig: 4 hinzugefügt, 3 entfernt
Zeile vorher Zeile nachher Änderung Code
22 22 <body class="{% block base_body_classes %}is-ctl-{{ page.controllerName }} is-act-{{ page.controllerAction }} sw-storefront sw-theme-kaffeekontor-nord{% endblock %}">
23 23
24 24 {% block base_body_skip_to_content %}
25 Entfernt {% endblock %}
25 Hinzugefügt <a class="skip-to-content-link" href="#content-main">{{ 'general.skipToContent'|trans|sw_sanitize }}</a>
26 Hinzugefügt {% endblock %}
26 27
27 28 {% block base_body_inner %}
28 29 {% block base_noscript %}
48 49 {% endblock %}
49 50
50 51 {% block base_main %}
51 Entfernt <div class="content-main">
52 Hinzugefügt <main class="content-main" id="content-main" tabindex="-1">
52 53 {% block base_main_inner %}
53 54 <div class="container">
54 55 {% block base_main_container %}
64 65 {% endblock %}
65 66 </div>
66 67 {% endblock %}
67 Entfernt </div>
68 Hinzugefügt </main>
68 69 {% endblock %}
69 70
70 71 {% block base_footer %}

Resources/views/storefront/layout/breadcrumb.html.twig Änderungen an Resources/views/storefront/layout/breadcrumb.html.twig: 1 hinzugefügt, 1 entfernt

Änderungen an Resources/views/storefront/layout/breadcrumb.html.twig: 1 hinzugefügt, 1 entfernt
Zeile vorher Zeile nachher Änderung Code
1 1 {% block layout_breadcrumb %}
2 Entfernt <nav class="breadcrumb-nav">
2 Hinzugefügt <nav class="breadcrumb-nav" aria-label="{{ 'a11y.navigation.breadcrumb'|trans|striptags }}">
3 3 <ol class="breadcrumb" itemscope itemtype="https://schema.org/BreadcrumbList">
4 4 {% for item in items %}
5 5 <li class="breadcrumb-item{% if loop.last %} active{% endif %}"

Resources/views/storefront/layout/footer/footer.html.twig Änderungen an Resources/views/storefront/layout/footer/footer.html.twig: 2 hinzugefügt, 2 entfernt

Änderungen an Resources/views/storefront/layout/footer/footer.html.twig: 2 hinzugefügt, 2 entfernt
Zeile vorher Zeile nachher Änderung Code
23 23 {% block layout_footer_navigation_service %}
24 24 <div class="col-md-6 col-lg-3 footer-column">
25 25 <div class="footer-column-headline" id="footer-headline-service">{{ 'footer.serviceMenuHeadline'|trans }}</div>
26 Entfernt <nav class="footer-column-content">
26 Hinzugefügt <nav class="footer-column-content" aria-labelledby="footer-headline-service">
27 27 <ul class="list-unstyled footer-service-menu-list">
28 28 <li class="footer-service-menu-item"><a class="footer-link" href="{{ url('/contact') }}">{{ 'footer.linkContact'|trans }}</a></li>
29 29 <li class="footer-service-menu-item"><a class="footer-link" href="{{ url('/brewing-guide') }}">{{ 'footer.linkBrewingGuide'|trans }}</a></li>
38 38 {% block layout_footer_navigation_information %}
39 39 <div class="col-md-6 col-lg-3 footer-column">
40 40 <div class="footer-column-headline" id="footer-headline-information">{{ 'footer.informationHeadline'|trans }}</div>
41 Entfernt <nav class="footer-column-content">
41 Hinzugefügt <nav class="footer-column-content" aria-labelledby="footer-headline-information">
42 42 <ul class="list-unstyled footer-service-menu-list">
43 43 {% for category in categories %}
44 44 <li class="footer-service-menu-item"><a class="footer-link" href="{{ category.url }}">{{ category.name }}</a></li>

Resources/views/storefront/layout/header/top-bar.html.twig Änderungen an Resources/views/storefront/layout/header/top-bar.html.twig: 1 hinzugefügt, 1 entfernt

Änderungen an Resources/views/storefront/layout/header/top-bar.html.twig: 1 hinzugefügt, 1 entfernt
Zeile vorher Zeile nachher Änderung Code
1 1 {% block layout_header_top_bar %}
2 2 <div class="top-bar">
3 Entfernt <nav class="top-bar-nav">
3 Hinzugefügt <nav class="top-bar-nav" aria-label="{{ 'a11y.navigation.service'|trans|striptags }}">
4 4 {% block layout_header_top_bar_usp %}
5 5 <p class="top-bar-usp">
6 6 {% sw_icon 'checkmark' style { size: 'xs' } %}

Resources/views/storefront/layout/navigation/navigation.html.twig Änderungen an Resources/views/storefront/layout/navigation/navigation.html.twig: 2 hinzugefügt, 1 entfernt

Änderungen an Resources/views/storefront/layout/navigation/navigation.html.twig: 2 hinzugefügt, 1 entfernt
Zeile vorher Zeile nachher Änderung Code
3 3 <div class="container">
4 4 {% block layout_main_navigation_menu %}
5 5 <nav class="nav main-navigation-menu" itemscope="itemscope"
6 Entfernt itemtype="https://schema.org/SiteNavigationElement">
6 Hinzugefügt itemtype="https://schema.org/SiteNavigationElement"
7 Hinzugefügt aria-label="{{ 'a11y.navigation.main'|trans|striptags }}">
7 8 {% block layout_main_navigation_menu_items %}
8 9 {% for item in navigation %}
9 10 {% set active = item.id == page.activeNavigationId %}

WooCommerce: Rezept heading-levels

Vorher und nachher anzeigen (2)
gives the home page its <h1> and fixes the teaser and widget title levels Beispieldaten

front-page.php Änderungen an front-page.php: 2 hinzugefügt, 2 entfernt

Änderungen an front-page.php: 2 hinzugefügt, 2 entfernt
Zeile vorher Zeile nachher Änderung Code
24 24
25 25 <div class="kb-intro">
26 26 <?php // VALIDISCAN-SEED vs-headings-landmarks: the page title is a styled <p>, the page has no <h1>. ?>
27 Entfernt <p class="kb-intro__title"><?php esc_html_e( 'Woollen outdoor clothing, made to last', 'kestrel-birch' ); ?></p>
27 Hinzugefügt <h1 class="kb-intro__title"><?php esc_html_e( 'Woollen outdoor clothing, made to last', 'kestrel-birch' ); ?></h1>
28 28 <p><?php echo esc_html( get_the_excerpt() ); ?></p>
29 29 <p class="kb-popular">
30 30 <?php esc_html_e( 'Looking for something warm?', 'kestrel-birch' ); ?>
44 44 <article class="kb-teaser">
45 45 <?php echo get_the_post_thumbnail( $kb_post, 'woocommerce_single', array( 'loading' => 'lazy' ) ); ?>
46 46 <?php // VALIDISCAN-SEED vs-headings-landmarks: teaser titles jump from h2 to h4. ?>
47 Entfernt <h4 class="kb-teaser__title"><?php echo esc_html( get_the_title( $kb_post ) ); ?></h4>
47 Hinzugefügt <h3 class="kb-teaser__title"><?php echo esc_html( get_the_title( $kb_post ) ); ?></h3>
48 48 <p><?php echo esc_html( get_the_excerpt( $kb_post ) ); ?></p>
49 49 <?php // VALIDISCAN-SEED vs-link-purpose: three identical "Read more" links to different targets. ?>
50 50 <a class="kb-teaser__more" href="<?php echo esc_url( get_post_meta( $kb_post->ID, '_kb_teaser_url', true ) ); ?>"><?php esc_html_e( 'Read more', 'kestrel-birch' ); ?></a>

functions.php Änderungen an functions.php: 2 hinzugefügt, 2 entfernt

Änderungen an functions.php: 2 hinzugefügt, 2 entfernt
Zeile vorher Zeile nachher Änderung Code
53 53 'after_widget' => '</div>',
54 54 // VALIDISCAN-SEED vs-headings-landmarks: footer widget titles are h4, directly after
55 55 // the h2 sections of the page (skipped heading level).
56 Entfernt 'before_title' => '<h4 class="widget-title">',
57 Entfernt 'after_title' => '</h4>',
56 Hinzugefügt 'before_title' => '<h2 class="widget-title">',
57 Hinzugefügt 'after_title' => '</h2>',
58 58 )
59 59 );
60 60 }
moves the checkout section headings from h3 to h2, as in the fixed checkout Beispieldaten

woocommerce/checkout/form-billing.php Änderungen an woocommerce/checkout/form-billing.php: 1 hinzugefügt, 1 entfernt

Änderungen an woocommerce/checkout/form-billing.php: 1 hinzugefügt, 1 entfernt
Zeile vorher Zeile nachher Änderung Code
15 15 defined( 'ABSPATH' ) || exit;
16 16 ?>
17 17 <div class="woocommerce-billing-fields">
18 Entfernt <h3><?php esc_html_e( 'Billing details', 'woocommerce' ); ?></h3>
18 Hinzugefügt <h2><?php esc_html_e( 'Billing details', 'woocommerce' ); ?></h2>
19 19
20 20 <div class="woocommerce-billing-fields__field-wrapper">
21 21 <?php

woocommerce/checkout/form-checkout.php Änderungen an woocommerce/checkout/form-checkout.php: 1 hinzugefügt, 1 entfernt

Änderungen an woocommerce/checkout/form-checkout.php: 1 hinzugefügt, 1 entfernt
Zeile vorher Zeile nachher Änderung Code
26 26 </div>
27 27 </div>
28 28
29 Entfernt <h3 id="order_review_heading"><?php esc_html_e( 'Your order', 'woocommerce' ); ?></h3>
29 Hinzugefügt <h2 id="order_review_heading"><?php esc_html_e( 'Your order', 'woocommerce' ); ?></h2>
30 30
31 31 <div id="order_review" class="woocommerce-checkout-review-order">
32 32 <?php do_action( 'woocommerce_checkout_order_review' ); ?>

woocommerce/checkout/form-shipping.php Änderungen an woocommerce/checkout/form-shipping.php: 2 hinzugefügt, 2 entfernt

Änderungen an woocommerce/checkout/form-shipping.php: 2 hinzugefügt, 2 entfernt
Zeile vorher Zeile nachher Änderung Code
16 16 defined( 'ABSPATH' ) || exit;
17 17 ?>
18 18 <div class="woocommerce-shipping-fields">
19 Entfernt <h3><?php esc_html_e( 'Shipping details', 'kestrel-birch' ); ?></h3>
19 Hinzugefügt <h2><?php esc_html_e( 'Shipping details', 'kestrel-birch' ); ?></h2>
20 20 <div class="shipping_address">
21 21 <div class="woocommerce-shipping-fields__field-wrapper">
22 22 <?php
29 29 </div>
30 30
31 31 <div class="woocommerce-additional-fields">
32 Entfernt <h3><?php esc_html_e( 'Additional information', 'woocommerce' ); ?></h3>
32 Hinzugefügt <h2><?php esc_html_e( 'Additional information', 'woocommerce' ); ?></h2>
33 33 <div class="woocommerce-additional-fields__field-wrapper">
34 34 <?php
35 35 foreach ( $checkout->get_checkout_fields( 'order' ) as $kb_key => $kb_field ) {
Vorher und nachher anzeigen (1)
restores the skip links, adds <main> and labels the navigation of the fixture theme Beispieldaten

404.php Änderungen an 404.php: 2 hinzugefügt, 2 entfernt

Änderungen an 404.php: 2 hinzugefügt, 2 entfernt
Zeile vorher Zeile nachher Änderung Code
9 9 ?>
10 10
11 11 <div id="primary" class="content-area">
12 Entfernt <div id="main" class="site-main">
12 Hinzugefügt <main id="main" class="site-main">
13 13 <div class="error-404 not-found">
14 14 <div class="page-content">
15 15 <header class="page-header">
22 22 </section>
23 23 </div>
24 24 </div>
25 Entfernt </div><!-- #main -->
25 Hinzugefügt </main><!-- #main -->
26 26 </div><!-- #primary -->
27 27
28 28 <?php

archive-product.php Änderungen an archive-product.php: 2 hinzugefügt, 2 entfernt

Änderungen an archive-product.php: 2 hinzugefügt, 2 entfernt
Zeile vorher Zeile nachher Änderung Code
22 22
23 23 <div id="primary" class="content-area">
24 24 <?php // VALIDISCAN-SEED vs-headings-landmarks + region: <div> instead of <main>. ?>
25 Entfernt <div id="main" class="site-main">
25 Hinzugefügt <main id="main" class="site-main">
26 26
27 27 <header class="woocommerce-products-header">
28 28 <h1 class="woocommerce-products-header__title page-title"><?php woocommerce_page_title(); ?></h1>
46 46 <?php do_action( 'woocommerce_no_products_found' ); ?>
47 47 <?php endif; ?>
48 48
49 Entfernt </div><!-- #main -->
49 Hinzugefügt </main><!-- #main -->
50 50 </div><!-- #primary -->
51 51
52 52 <?php // The sidebar div gets role="complementary" but no label (VALIDISCAN-SEED landmark-unique on pages with two). ?>

front-page.php Änderungen an front-page.php: 2 hinzugefügt, 2 entfernt

Änderungen an front-page.php: 2 hinzugefügt, 2 entfernt
Zeile vorher Zeile nachher Änderung Code
18 18
19 19 <div id="primary" class="content-area">
20 20 <?php // VALIDISCAN-SEED vs-headings-landmarks + region: the content wrapper is a <div>, not <main>. ?>
21 Entfernt <div id="main" class="site-main">
21 Hinzugefügt <main id="main" class="site-main">
22 22
23 23 <?php get_template_part( 'template-parts/hero-slider' ); ?>
24 24
62 62 ?>
63 63 </section>
64 64
65 Entfernt </div><!-- #main -->
65 Hinzugefügt </main><!-- #main -->
66 66 </div><!-- #primary -->
67 67
68 68 <?php

functions.php Änderungen an functions.php: 1 hinzugefügt, 4 entfernt

Änderungen an functions.php: 1 hinzugefügt, 4 entfernt
Zeile vorher Zeile nachher Änderung Code
32 32 * Storefront pieces the child theme does not use.
33 33 */
34 34 function kb_remove_storefront_parts() {
35 Entfernt // VALIDISCAN-SEED vs-headings-landmarks: Storefront's "Skip to navigation / Skip to content"
36 Entfernt // links are removed because "they flash on the first Tab"; nothing replaces them.
37 Entfernt remove_action( 'storefront_before_header', 'storefront_skip_links', 0 );
38 35 remove_action( 'storefront_footer', 'storefront_handheld_footer_bar', 999 );
39 36 remove_action( 'storefront_header', 'storefront_product_search', 40 );
40 37 }
212 209 $defaults['delimiter'] = '<span class="breadcrumb-separator"> / </span>';
213 210 // VALIDISCAN-SEED landmark-unique + vs-headings-landmarks: the breadcrumb <nav> has no aria-label,
214 211 // like the primary and the footer navigation.
215 Entfernt $defaults['wrap_before'] = '<div class="storefront-breadcrumb"><div class="col-full"><nav class="woocommerce-breadcrumb">';
212 Hinzugefügt $defaults['wrap_before'] = '<div class="storefront-breadcrumb"><div class="col-full"><nav class="woocommerce-breadcrumb" aria-label="' . esc_attr__( 'Breadcrumb', 'kestrel-birch' ) . '">';
216 213 $defaults['wrap_after'] = '</nav></div></div>';
217 214 return $defaults;
218 215 }

header-checkout.php Änderungen an header-checkout.php: 1 hinzugefügt, 0 entfernt

Änderungen an header-checkout.php: 1 hinzugefügt, 0 entfernt
Zeile vorher Zeile nachher Änderung Code
18 18
19 19 <body <?php body_class(); ?>>
20 20 <?php wp_body_open(); ?>
21 Hinzugefügt <a class="skip-link screen-reader-text" href="#content"><?php esc_html_e( 'Skip to content', 'kestrel-birch' ); ?></a>
21 22
22 23 <div id="page" class="hfeed site">
23 24 <header id="masthead" class="site-header kb-checkout-header" role="banner">

header.php Änderungen an header.php: 1 hinzugefügt, 1 entfernt

Änderungen an header.php: 1 hinzugefügt, 1 entfernt
Zeile vorher Zeile nachher Änderung Code
74 74 <div class="storefront-primary-navigation">
75 75 <div class="col-full">
76 76 <?php // VALIDISCAN-SEED landmark-unique + vs-headings-landmarks: the primary <nav> has no aria-label. ?>
77 Entfernt <nav id="site-navigation" class="main-navigation">
77 Hinzugefügt <nav id="site-navigation" class="main-navigation" aria-label="<?php esc_attr_e( 'Primary navigation', 'kestrel-birch' ); ?>">
78 78 <?php
79 79 wp_nav_menu(
80 80 array(

page-contact.php Änderungen an page-contact.php: 2 hinzugefügt, 2 entfernt

Änderungen an page-contact.php: 2 hinzugefügt, 2 entfernt
Zeile vorher Zeile nachher Änderung Code
24 24
25 25 <div id="primary" class="content-area">
26 26 <?php // VALIDISCAN-SEED vs-headings-landmarks + region: <div> instead of <main>. ?>
27 Entfernt <div id="main" class="site-main">
27 Hinzugefügt <main id="main" class="site-main">
28 28 <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
29 29 <header class="entry-header"><?php the_title( '<h1 class="entry-title">', '</h1>' ); ?></header>
30 30 <div class="entry-content">
85 85 </div>
86 86 </div>
87 87 </article>
88 Entfernt </div><!-- #main -->
88 Hinzugefügt </main><!-- #main -->
89 89 </div><!-- #primary -->
90 90
91 91 <?php

page.php Änderungen an page.php: 2 hinzugefügt, 2 entfernt

Änderungen an page.php: 2 hinzugefügt, 2 entfernt
Zeile vorher Zeile nachher Änderung Code
13 13
14 14 <div id="primary" class="content-area">
15 15 <?php // VALIDISCAN-SEED vs-headings-landmarks + region: <div> instead of <main>. ?>
16 Entfernt <div id="main" class="site-main">
16 Hinzugefügt <main id="main" class="site-main">
17 17
18 18 <?php
19 19 while ( have_posts() ) :
35 35 endwhile;
36 36 ?>
37 37
38 Entfernt </div><!-- #main -->
38 Hinzugefügt </main><!-- #main -->
39 39 </div><!-- #primary -->
40 40
41 41 <?php

search.php Änderungen an search.php: 2 hinzugefügt, 2 entfernt

Änderungen an search.php: 2 hinzugefügt, 2 entfernt
Zeile vorher Zeile nachher Änderung Code
11 11
12 12 <div id="primary" class="content-area">
13 13 <?php // VALIDISCAN-SEED vs-headings-landmarks + region: <div> instead of <main>. ?>
14 Entfernt <div id="main" class="site-main">
14 Hinzugefügt <main id="main" class="site-main">
15 15 <header class="woocommerce-products-header">
16 16 <h1 class="woocommerce-products-header__title page-title">
17 17 <?php
36 36 <?php else : ?>
37 37 <?php wc_no_products_found(); ?>
38 38 <?php endif; ?>
39 Entfernt </div><!-- #main -->
39 Hinzugefügt </main><!-- #main -->
40 40 </div><!-- #primary -->
41 41
42 42 <?php

single-product.php Änderungen an single-product.php: 2 hinzugefügt, 2 entfernt

Änderungen an single-product.php: 2 hinzugefügt, 2 entfernt
Zeile vorher Zeile nachher Änderung Code
13 13
14 14 <div id="primary" class="content-area">
15 15 <?php // VALIDISCAN-SEED vs-headings-landmarks + region: <div> instead of <main>. ?>
16 Entfernt <div id="main" class="site-main">
16 Hinzugefügt <main id="main" class="site-main">
17 17 <?php
18 18 while ( have_posts() ) :
19 19 the_post();
20 20 wc_get_template_part( 'content', 'single-product' );
21 21 endwhile;
22 22 ?>
23 Entfernt </div><!-- #main -->
23 Hinzugefügt </main><!-- #main -->
24 24 </div><!-- #primary -->
25 25
26 26 <?php

Magento: Rezept heading-levels

Vorher und nachher anzeigen (2)
keeps the hidden home page title as the h1 and validates Beispieldaten

app/design/frontend/Validiscan/fixture/web/css/source/_theme.less Änderungen an app/design/frontend/Validiscan/fixture/web/css/source/_theme.less: 6 hinzugefügt, 1 entfernt

Änderungen an app/design/frontend/Validiscan/fixture/web/css/source/_theme.less: 6 hinzugefügt, 1 entfernt
Zeile vorher Zeile nachher Änderung Code
1093 1093
1094 1094 // VALIDISCAN-SEEDED vs-headings-landmarks: the home page title is display:none, so the page has no h1.
1095 1095 .cms-index-index .page-title-wrapper {
1096 Entfernt display: none;
1096 Hinzugefügt position: absolute;
1097 Hinzugefügt width: 1px;
1098 Hinzugefügt height: 1px;
1099 Hinzugefügt overflow: hidden;
1100 Hinzugefügt clip: rect(0 0 0 0);
1101 Hinzugefügt white-space: nowrap;
1097 1102 }
1098 1103
1099 1104 // VALIDISCAN-SEEDED color-contrast: #929292 on white is 3.1:1.

app/design/frontend/Validiscan/fixture/web/css/styles-m.css Änderungen an app/design/frontend/Validiscan/fixture/web/css/styles-m.css: 6 hinzugefügt, 1 entfernt

Änderungen an app/design/frontend/Validiscan/fixture/web/css/styles-m.css: 6 hinzugefügt, 1 entfernt
Zeile vorher Zeile nachher Änderung Code
1070 1070 }
1071 1071
1072 1072 .cms-index-index .page-title-wrapper {
1073 Entfernt display: none;
1073 Hinzugefügt position: absolute;
1074 Hinzugefügt width: 1px;
1075 Hinzugefügt height: 1px;
1076 Hinzugefügt overflow: hidden;
1077 Hinzugefügt clip: rect(0 0 0 0);
1078 Hinzugefügt white-space: nowrap;
1074 1079 }
1075 1080
1076 1081 .block-promo .info,
moves the journal headings from h4 to h3 and validates Beispieldaten

app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html Änderungen an app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html: 3 hinzugefügt, 3 entfernt

Änderungen an app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html: 3 hinzugefügt, 3 entfernt
Zeile vorher Zeile nachher Änderung Code
152 152 <!-- VALIDISCAN-SEEDED vs-headings-landmarks (h2 followed by h4) + vs-link-purpose ("Read more" links to three different pages) -->
153 153 <div class="journal-items">
154 154 <article class="journal-item">
155 Entfernt <h4 class="journal-title">Layering for wet autumn days</h4>
155 Hinzugefügt <h3 class="journal-title">Layering for wet autumn days</h3>
156 156 <p>How a light shell over a warm mid-layer keeps you dry on the way to work.</p>
157 157 <a class="journal-link" href="/magento/juno-jacket.html">Read more</a>
158 158 </article>
159 159 <article class="journal-item">
160 Entfernt <h4 class="journal-title">Caring for technical shells</h4>
160 Hinzugefügt <h3 class="journal-title">Caring for technical shells</h3>
161 161 <p>Washing, drying and re-proofing: three steps that keep a rain shell working for years.</p>
162 162 <a class="journal-link" href="/magento/nadia-elements-shell.html">Read more</a>
163 163 </article>
164 164 <article class="journal-item">
165 Entfernt <h4 class="journal-title">Running through the dark season</h4>
165 Hinzugefügt <h3 class="journal-title">Running through the dark season</h3>
166 166 <p>Reflective details, lights and route planning for early morning runs.</p>
167 167 <a class="journal-link" href="/magento/ingrid-running-jacket.html">Read more</a>
168 168 </article>
Vorher und nachher anzeigen (1)
fixes the vs-headings-landmarks finding and validates Beispieldaten

app/design/frontend/Validiscan/fixture/Magento_Cms/layout/cms_index_index.xml Änderungen an app/design/frontend/Validiscan/fixture/Magento_Cms/layout/cms_index_index.xml: 1 hinzugefügt, 1 entfernt

Änderungen an app/design/frontend/Validiscan/fixture/Magento_Cms/layout/cms_index_index.xml: 1 hinzugefügt, 1 entfernt
Zeile vorher Zeile nachher Änderung Code
6 6 <div>, so the home page has no <main> landmark (and, with the page title hidden by
7 7 display:none in _theme.less, no h1 either).
8 8 Fixed variant: keep htmlTag="main"; hide the title visually only (clip), not with display:none. -->
9 Entfernt <referenceContainer name="main.content" htmlTag="div" htmlId="maincontent" htmlClass="page-main"/>
9 Hinzugefügt <referenceContainer name="main.content" htmlTag="main" htmlId="maincontent" htmlClass="page-main"/>
10 10 <referenceBlock name="breadcrumbs" remove="true"/>
11 11 </body>
12 12 </page>

app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/footer.phtml Änderungen an app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/footer.phtml: 1 hinzugefügt, 1 entfernt

Änderungen an app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/footer.phtml: 1 hinzugefügt, 1 entfernt
Zeile vorher Zeile nachher Änderung Code
19 19 ?>
20 20 <!-- VALIDISCAN-SEEDED list + landmark-unique: list items wrapped in a div inside the ul; second unlabelled nav -->
21 21 <?php /* Fixed variant: <nav class="footer-nav" aria-label="Footer links"> with the <li> elements directly in the <ul>. */ ?>
22 Entfernt <nav class="footer-nav">
22 Hinzugefügt <nav class="footer-nav" aria-label="<?= $escaper->escapeHtmlAttr(__('Footer links')) ?>">
23 23 <ul class="footer links">
24 24 <div class="footer-col">
25 25 <?php foreach ($links as $link): ?>

app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/header.phtml Änderungen an app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/header.phtml: 1 hinzugefügt, 0 entfernt

Änderungen an app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/header.phtml: 1 hinzugefügt, 0 entfernt
Zeile vorher Zeile nachher Änderung Code
13 13 <header class="page-header">
14 14 <div class="panel wrapper">
15 15 <div class="panel header">
16 Hinzugefügt <a class="action skip contentarea" href="#contentarea"><span><?= $escaper->escapeHtml(__('Skip to Content')) ?></span></a>
16 17 <!-- VALIDISCAN-SEEDED vs-headings-landmarks: the skip link was removed from the header panel -->
17 18 <?php /* Fixed variant: <a class="action skip contentarea" href="#contentarea"><span>Skip to Content</span></a> */ ?>
18 19 <?php if ($linksMoved): ?>

app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/topmenu.phtml Änderungen an app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/topmenu.phtml: 1 hinzugefügt, 1 entfernt

Änderungen an app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/topmenu.phtml: 1 hinzugefügt, 1 entfernt
Zeile vorher Zeile nachher Änderung Code
15 15 <div class="section-item-content nav-sections-item-content" id="store.menu" data-role="content">
16 16 <!-- VALIDISCAN-SEEDED aria-required-children + landmark-unique: menubar whose children are plain list items; nav without a label -->
17 17 <?php /* Fixed variant: <nav ... aria-label="Main menu"> and a plain <ul> (no menubar role). */ ?>
18 Entfernt <nav class="navigation" data-action="navigation">
18 Hinzugefügt <nav class="navigation" data-action="navigation" aria-label="<?= $escaper->escapeHtmlAttr(__('Main menu')) ?>">
19 19 <ul role="menubar" data-mage-init='{"menu":{"responsive":true,"expanded":true,"position":{"my":"left top","at":"left bottom"}}}'>
20 20 <?php foreach ($items as $item): ?>
21 21 <li class="level0 <?= $escaper->escapeHtmlAttr($item['class']) ?> level-top"><a href="<?= $escaper->escapeUrl($item['url']) ?>" class="level-top"><span><?= $escaper->escapeHtml($item['label']) ?></span></a></li>

app/design/frontend/Validiscan/fixture/web/css/source/_theme.less Änderungen an app/design/frontend/Validiscan/fixture/web/css/source/_theme.less: 24 hinzugefügt, 0 entfernt

Änderungen an app/design/frontend/Validiscan/fixture/web/css/source/_theme.less: 24 hinzugefügt, 0 entfernt
Zeile vorher Zeile nachher Änderung Code
1264 1264 height: 18px;
1265 1265 stroke-width: 3;
1266 1266 }
1267 Hinzugefügt
1268 Hinzugefügt /* validiscan:skip-link-main */
1269 Hinzugefügt .action.skip:not(:focus) {
1270 Hinzugefügt position: absolute;
1271 Hinzugefügt width: 1px;
1272 Hinzugefügt height: 1px;
1273 Hinzugefügt margin: -1px;
1274 Hinzugefügt padding: 0;
1275 Hinzugefügt overflow: hidden;
1276 Hinzugefügt clip: rect(0 0 0 0);
1277 Hinzugefügt white-space: nowrap;
1278 Hinzugefügt border: 0;
1279 Hinzugefügt }
1280 Hinzugefügt .action.skip:focus {
1281 Hinzugefügt position: absolute;
1282 Hinzugefügt top: 4px;
1283 Hinzugefügt left: 4px;
1284 Hinzugefügt z-index: 100;
1285 Hinzugefügt padding: 8px 12px;
1286 Hinzugefügt background: #fff;
1287 Hinzugefügt color: #1a1a1a;
1288 Hinzugefügt text-decoration: underline;
1289 Hinzugefügt }
1290 Hinzugefügt /* /validiscan:skip-link-main */

app/design/frontend/Validiscan/fixture/web/css/styles-m.css Änderungen an app/design/frontend/Validiscan/fixture/web/css/styles-m.css: 24 hinzugefügt, 0 entfernt

Änderungen an app/design/frontend/Validiscan/fixture/web/css/styles-m.css: 24 hinzugefügt, 0 entfernt
Zeile vorher Zeile nachher Änderung Code
1232 1232 height: 18px;
1233 1233 stroke-width: 3;
1234 1234 }
1235 Hinzugefügt
1236 Hinzugefügt /* validiscan:skip-link-main */
1237 Hinzugefügt .action.skip:not(:focus) {
1238 Hinzugefügt position: absolute;
1239 Hinzugefügt width: 1px;
1240 Hinzugefügt height: 1px;
1241 Hinzugefügt margin: -1px;
1242 Hinzugefügt padding: 0;
1243 Hinzugefügt overflow: hidden;
1244 Hinzugefügt clip: rect(0 0 0 0);
1245 Hinzugefügt white-space: nowrap;
1246 Hinzugefügt border: 0;
1247 Hinzugefügt }
1248 Hinzugefügt .action.skip:focus {
1249 Hinzugefügt position: absolute;
1250 Hinzugefügt top: 4px;
1251 Hinzugefügt left: 4px;
1252 Hinzugefügt z-index: 100;
1253 Hinzugefügt padding: 8px 12px;
1254 Hinzugefügt background: #fff;
1255 Hinzugefügt color: #1a1a1a;
1256 Hinzugefügt text-decoration: underline;
1257 Hinzugefügt }
1258 Hinzugefügt /* /validiscan:skip-link-main */

Beginnen Sie mit einem kostenlosen Check Ihres Shops.

Senden Sie die Adresse Ihres Shops. Validiscan scannt ihn und antwortet mit jedem Fehler, den der Scan nachweisen kann, jeweils mit der Seite und dem Code.

Kostenlosen Check anfordern

Oder schreiben Sie an info@validiscan.com.

Was der kostenlose Check umfasst und was nicht
Sie senden
die Adresse Ihres Shops
Gescannte Seiten
bis zu 15
Sie erhalten
jeden Fehler, den der Scan nachweisen kann, mit Seite und Code
In Ihrem Shop
nur öffentliche Seiten; keine Anmeldung, nichts gekauft, kein Formular abgeschickt
Was er nicht ist
ein vollständiges Audit

Nachricht an Validiscan

Für einen kostenlosen Check nennen Sie die Adresse Ihres Shops und seine Plattform.

Validiscan verwendet, was Sie senden, um Ihnen zu antworten. Datenschutzerklärung