Fix
Links you can only find by colour
Take away colour and most link styling disappears with it. An underline is the one signal every reader recognises as "this is a link" — and it survives greyscale, glare, dark mode and colour-blindness untouched.
Who this locks out
If colour is the only link cue, colour-blind readers cannot find the links.
- Shoppers with reduced colour vision, for whom link blue and text black can read as the same shade
- People with low vision, where zoom, low brightness and washed-out hues erase subtle colour differences
- Anyone reading on an ageing screen or in daylight glare, where only shape survives
The transform
Before
<p class="entry-content">Full measurements are on the <a href="/size-guide/" style="color:#2f6fb2;text-decoration:none">size guide</a> page.</p> After
<p class="entry-content">Full measurements are on the <a href="/size-guide/" style="color:#2f6fb2;text-decoration:underline">size guide</a> page.</p> Detection
How this is tested here
Every scan runs three independent engines and 19 custom checks against your rendered pages, and records which engine flagged what. These are the real rules behind this fix family.
| Criterion | Level | Detected by | What we do |
|---|---|---|---|
| 1.4.1 Use of Color Most affects: People with colour-vision deficiency · People with low vision · People who are blind | A | axe-core (link-in-text-block) · IBM Equal Access (form_font_color, style_color_misuse) | auto |
What Klarvo Access does
Klarvo detects content links distinguished by colour alone with a bounded computed-style probe, restores a persistent underline through a constant, pre-audited CSS profile applied server-side in the HTML your store serves, and then re-validates the served page to confirm the cue is present.
Auto-applied
Generated, then applied server-side in the HTML your store actually serves — and independently re-validated in the served page before it counts as resolved.
An automated finding is evidence, not a certificate. Conformance is certified only by the professional audit — how that works.
Do it yourself
Fixing this by hand
What a colour-only link costs your store
Somewhere in your delivery page there is a sentence like “full measurements are on the size guide”. Three of those words are a link. You know that because they are a slightly different colour — perhaps a restrained blue-grey the designer chose because bright blue felt loud. Strip the colour away, and nothing is left. No underline, no border, no shape. The sentence reads as plain text, and the size guide might as well not exist.
Colour is stripped away more often than design reviews assume. Around one man in twelve and one woman in two hundred has some form of colour vision deficiency, and the most common forms compress exactly the region most link palettes live in — blues, purples and greys drift towards one another. A shopper with low vision runs the screen at double zoom with brightness down, and subtle hue differences flatten out. A phone in July sunlight renders your careful blue-grey and your body-text charcoal as the same colour. An older laptop panel was never going to tell them apart in the first place.
WCAG 1.4.1 Use of Color (Level A) is the criterion: colour must not be the only visual means of distinguishing a visual element. For links inside prose, the W3C documents the failure explicitly — F73, “creating links that are not visually evident without color vision” — and the practical damage on a shop is concrete. The customer cannot find the size guide, so they guess the size, and the order comes back as a return. They cannot see that “delivery exceptions apply” is a link, so the exception surprises them at the door. The information was there. It was just encoded in a channel some of your customers do not receive.
The standard permits a colour-only link under narrow conditions — technique G183: a 3:1 contrast ratio between link colour and surrounding text, plus an additional cue on hover and focus. It is a legitimate route and a fragile one: the ratio has to hold for every text-and-link pairing on the site, the hover cue does not exist on touch, and one theme update can break the arrangement silently. The underline is the boring, durable answer, which is why it is the one browsers have shipped as a default since the beginning.
How it is detected here
axe-core 4.12 carries a neighbouring rule for this criterion, link-in-text-block, which approaches it through colour: where a link inside a block of text is distinguished only by colour, the rule tests that colour against the 3:1 threshold, and where it cannot compute the colours it returns the element for review rather than a verdict. That rule runs in the scan, but it is not what this family is keyed to.
The deciding detector is Klarvo’s own probe, klarvo.content-link-underline, which runs in a real browser against the rendered page and asks the sturdier question directly: does each content link carry a persistent non-colour cue at rest? The probe is deliberately bounded:
- It looks only inside authored content containers —
main,article,.entry-contentand.wp-block-post-content— because that is where a link sits inside sentences and needs to be told apart from them. Navigation menus, headers and footers are excluded: their links are identified by position and grouping, not by colour against prose. - For each link it reads the computed style and accepts either cue: a
text-decoration-linethat includes an underline, or a visible bottom border. Either is a shape a colour-blind reader can see. - Links styled as buttons — anything matching
.buttonor.wp-element-button— are excluded. A filled, bordered button is its own affordance and needs no underline.
Every link in scope with neither cue is counted, and the count is attributed to the exact page it was observed on. The probe detects precisely the family the fix below can repair, and no more than that: passing it does not by itself establish every use-of-colour condition on the page, and the report never pretends otherwise.
What Klarvo does about it
This family is auto tier. The fix is not generated per element and not guessed at per site: it is a constant, pre-audited CSS profile, the same reviewed rule for every store, applied server-side in the HTML your store serves — never painted on by a script in the visitor’s browser. This is what ships:
:where(main, article, .entry-content, .wp-block-post-content)
a:not(.button):not(.wp-element-button) {
text-decoration-line: underline !important;
text-decoration-thickness: max(1px, 0.08em) !important;
text-underline-offset: 0.15em !important;
}
Three deliberate choices are folded into those lines. The scope matches the probe exactly, so the fix repairs precisely what was detected and touches nothing else — your navigation, your buttons and your header stay as designed. The thickness and offset keep the underline a tuned hairline that scales with the type and clears descenders, rather than the heavy strike-through look that gave underlines a bad name. And the declarations are marked !important because the failure being fixed is a stylesheet rule — usually a { text-decoration: none; } in the theme — and the repair has to outrank the rule that caused it.
The profile is injected once, in a style block with a reserved id, and the operation is idempotent: a page already serving the profile never receives a second copy. Your own colour choices are untouched — the link keeps its hue; it gains a shape.
Then the claim is checked rather than assumed. The page is fetched fresh and the served HTML must actually contain the profile before the fix is recorded as applied, and the probe runs again in the browser lane on the next scan, where the count of undecorated content links on that page should read zero. An automated finding is evidence, not a certificate — and so is an automated fix, which is why it is re-validated instead of trusted.
How to fix it yourself
The theme-level fix is one of the cheapest in all of accessibility, and where it lives depends on how your site is built.
Block themes. Set it once in theme.json, and every content link inherits it:
{
"version": 3,
"styles": {
"elements": {
"link": {
"typography": {
"textDecoration": "underline"
}
}
}
}
}
The same control is available without touching files: in the Site Editor, open Styles, and set the link element’s decoration to underline. Recent default themes ship this way already — if yours does not, it is a two-minute change.
Classic themes and child themes. Add the rule to your child theme’s stylesheet, or to Appearance → Customise → Additional CSS:
main a:not(.button):not(.wp-element-button),
article a:not(.button):not(.wp-element-button),
.entry-content a:not(.button):not(.wp-element-button),
.wp-block-post-content a:not(.button):not(.wp-element-button) {
text-decoration-line: underline;
text-decoration-thickness: max(1px, 0.08em);
text-underline-offset: 0.15em;
}
Then find the rule that removed the underline in the first place — search the theme’s stylesheet for text-decoration: none — and note where it applies, because it will keep fighting you on any selector you did not cover.
Page builders. Elementor, Divi and their peers keep a global link style in their site settings. Set the underline there, once, rather than per widget — a per-widget fix is the one that silently misses next month’s new section. While you are in the settings, resist the common pattern of removing the underline on hover; the cue should persist, and hover can add weight instead:
.entry-content a:hover {
text-decoration-thickness: max(2px, 0.12em);
}
Where it matters most in WooCommerce. The long description and tabs on a product page, where “see the size guide” and “read our washing instructions” live. Delivery, returns and FAQ pages, which are dense with in-sentence links. And the checkout terms line — the terms-and-conditions link sits inside a sentence inside a label, which is the exact colour-only pattern, on the page where a missed link costs the most.
If your brand direction genuinely cannot accept underlines at rest, the conformant alternative is G183 in full: verify a 3:1 ratio between link colour and body colour on every combination, and add an underline on both hover and focus. It can be done. It also has to be re-verified every time a colour token changes, and it gives a touchscreen user nothing — which is why we apply the underline and recommend you keep it.
How you know it worked
- Turn your screen greyscale — both macOS and Windows have a colour filter in their accessibility settings, and phones do too — and read a product description. Every link should still announce itself. This is the whole criterion in one test: if you can find the links without colour, so can everyone.
- View the served source. If Klarvo applied the fix, the page carries a Klarvo-delivered stylesheet opening with the verification sentinel
--klarvo-fix-profiles:1and containingtext-decoration-line:underline— in the HTML from the server, not conjured after load. - Check the exclusions held: your Add to basket buttons and menu items should look exactly as they did. If a button has sprouted an underline, it is missing its
.buttonor.wp-element-buttonclass — worth fixing anyway, because that class is how the rest of the ecosystem recognises it too. - Re-scan. The
klarvo.content-link-underlinecount for the page should be zero, and the family’s open count clears only once the served profile has been independently confirmed — not when the change was queued. - Keep the judgement calls in view. A colour-coded stock status or a chart legend is still a 1.4.1 question that no underline answers; those findings remain open in the report for a person, which is exactly where they belong.
Sources: W3C WAI — Understanding SC 1.4.1: Use of Color · W3C WAI — Technique G182: Ensuring that additional visual cues are available when text color differences are used to convey information · W3C WAI — Technique G183: Using a contrast ratio of 3:1 with surrounding text and providing additional visual cues on hover for links or controls · W3C WAI — Failure F73: Failure due to creating links that are not visually evident without color vision · Deque University — axe rule link-in-text-block (axe-core 4.12) · WebAIM — Links and Hypertext: Link Text and Appearance
FAQ
Questions this raises
Will underlines make my design look dated?
The profile is tuned for modern rendering: text-decoration-thickness holds the line to a hairline that scales with the type, and text-underline-offset drops it clear of descenders. Navigation menus, buttons and anything carrying a button class are untouched, so the change lands only in prose — where an underline reads as craft, not clutter.
My links are a completely different colour from the text. Is that not enough?
Only under strict conditions. W3C technique G183 accepts colour alone when the link colour holds a 3:1 ratio against the surrounding text and a second cue appears on both hover and focus — and hover never happens on a touchscreen. Most palettes fail the ratio, and a theme update can quietly break the hover rule. The underline route has no conditions to drift out of.
Does this settle every Use of Color finding on my store?
No, and we say so plainly. Underlining fixes the in-text link case — the most common 1.4.1 failure on a shop. Colour used elsewhere to carry meaning — a chart, a "colours in red are out of stock" note, a required-field marker that is only red — is a content decision, reported separately for a person to resolve.
Find out whether your store has this one.
The free scan checks your real pages — home, product, populated basket, hydrated checkout — with all three engines and all 19 Klarvo checks, and tells you exactly what it found and where.