Skip to content
Practice & implementation

Accessible Promo Banners: Keep Text Out of the Image

Promo banners with discount text baked into the image fail WCAG 1.4.5. How shops build banners as HTML text, apply the exceptions and test before Black Week.

20 min read WCAG 1.4.5AktionsbannerOnlineshop

In short and in plain language

Many shops show big ad images for Black Week. Often the discount is text inside the image. That is a problem for many people.

Text in an image gets blurry when you zoom in. You cannot change its color. A screen reader cannot read it. It often reads out only the name of the file.

The rules for good websites say: text should be real text. There are only a few exceptions, for example a logo.

This works better: the photo sits in the back. The text sits in front as real text. Behind the text is a dark box. Then it is easy to read.

Before the sale starts, a test is worth it. Select the text, zoom in on the page and let a screen reader read it out.

For Black Week, the home page of many online shops gets a new look: a wide promo banner, a photo, and on top of it in large letters “-20% for Black Week”. In most cases, that text is part of the graphic. It was set in an image editor and exported as a JPG. For people who shop with magnification, a screen reader or their own color settings, this is a barrier: the text pixelates when zoomed, cannot be recolored and cannot be read aloud without alternative text. WCAG 2.2 Success Criterion 1.4.5 therefore requires text instead of images of text whenever the technology in use can achieve the intended presentation (W3C, WCAG 2.2). This article explains what the criterion means for promo banners, which exceptions apply, how to build a banner as HTML text and which checks make sense before a promotion goes live.

Key takeaways

  • WCAG 1.4.5 at Level AA requires real text instead of images of text whenever HTML and CSS can achieve the design; the only exceptions are customizable images and essential presentations such as logos (W3C, WCAG 2.2).
  • Alternative text satisfies 1.1.1 but not 1.4.5, because it is not displayed; on 53.1 percent of the most visited home pages, at least one image is missing alternative text (WebAIM Million 2026).
  • Banner text over a photo needs at least 4.5:1 contrast at the weakest spot, 3:1 for large text; an opaque text panel keeps that ratio regardless of the image (W3C, WCAG 2.2).
  • Built as HTML, banner text grows at 200 percent zoom, wraps at a width of 320 CSS pixels and is read aloud; the background photo gets an empty alt attribute (W3C, WCAG 2.2).
  • Black Friday falls on November 27, 2026: test every banner template before then by selecting the text, zooming to 200 percent, starting a screen reader, measuring contrast and checking the view on a smartphone.

Why promo banners matter in the fall

Promotion days are a sales peak for German retail. For Black Friday and Cyber Monday 2025, the German Retail Federation expected sales of 5.8 billion euros (HDE, forecast 2025). In 2026, Black Friday falls on November 27 and Cyber Monday on November 30. In the weeks before, many shops swap home page banners, category teasers and newsletter header images for promotional artwork. That artwork is often produced under time pressure in an image editor, and the text ends up inside the graphic because it is quick and looks good on the designer's screen.

For people who depend on the banner, the experience is different. At the end of 2025, a good 7.8 million people with severe disabilities lived in Germany (Destatis). For 4 percent of them, blindness or visual impairment was the most severe disability, and a good third of people with severe disabilities were 75 or older (Destatis). On top of that come many people without an officially recognized disability who shop with reading glasses, a screen magnifier or enlarged text. Worldwide, according to the World Health Organization, at least 2.2 billion people have a near or distance vision impairment (WHO).

For online shops, this is not a side issue. The WebAIM Million 2026 automatically evaluates the home pages of the top one million websites (WebAIM Million 2026). Home pages in the Shopping category averaged 71.0 detected errors there, 26.6 percent more than the average of all home pages (WebAIM Million 2026). On such pages, the promo banner is often the largest element above the fold and the first thing a visitor notices. If it carries its message only as an image, that message does not reach part of the customer base.

What WCAG 1.4.5 requires

Success Criterion 1.4.5 “Images of Text” belongs to conformance Level AA. It requires: if the technologies being used can achieve the visual presentation, text is used to convey information rather than images of text (W3C, WCAG 2.2). According to the definition, an image of text is text that has been rendered in a non-text form, such as an image, in order to achieve a particular visual effect (W3C, Understanding 1.4.5). The W3C sums up the goal in one sentence: users can adjust how text is presented (W3C, Understanding 1.4.5).

The criterion names two exceptions. The first covers customizable images: an image of text is allowed if users can visually customize it to their requirements. The second covers essential presentations: an image of text is allowed if a particular presentation is essential to the information being conveyed. Text that is part of a logo or brand name is explicitly considered essential (W3C, Understanding 1.4.5). As further examples, the W3C mentions the representation of a font family and the reproduction of a historical letter, where the original form itself carries the information about when it was written (W3C, Understanding 1.4.5).

For a promo banner, neither exception usually applies. Discount text can be set with HTML and CSS in almost any font, color and size, web fonts included. The W3C describes the intent of the criterion like this: if authors can use text to achieve the same visual effect, they should present the information as text rather than using an image (W3C, Understanding 1.4.5). The explanation does also mention fonts that are not widely deployed or that may not be redistributed (W3C, Understanding 1.4.5). Whether a web license exists for the campaign typeface can be clarified with the font vendor, though, and a well-readable web font is enough for the subline and the button anyway.

One clarification in the explanation is especially useful in practice. The criterion targets cases where images of text are used instead of text. Where an image and equivalent text are both presented to the user, 1.4.5 is met (W3C, Understanding 1.4.5). Alternative text is not enough for this, because it is not displayed but only exposed to assistive technology. Anyone who wants to keep designed artwork places the same text visibly next to it or below it as well.

Level AAA: stricter still

The related criterion 1.4.9 at Level AAA only allows images of text for pure decoration or where a particular presentation is essential to the information (W3C, WCAG 2.2). Customizability no longer counts as an exception there. Level AA is the benchmark for the legal obligations; anyone building new banner templates can still aim for 1.4.9 right away, because the extra effort stays small.

What the BFSG has to do with it

The German Accessibility Strengthening Act (BFSG) applies, among other things, to e-commerce services provided to consumers after June 28, 2025 (BFSG, Section 1(3)). The accompanying ordinance requires websites, including services offered on mobile devices, to be designed in a consistent and appropriate way that is perceivable, operable, understandable and robust (BFSGV, Section 12 No. 3). What that means in detail is set out in the European standard EN 301 549. Its clause 9.1.4.5 requires a web page to satisfy WCAG Success Criterion 1.4.5 (ETSI EN 301 549 V3.2.1).

A promo banner on the home page is part of the shop and therefore part of the service. Anyone who offers or provides a service in breach of the accessibility requirements commits an administrative offense, which can be fined up to 100,000 euros (BFSG, Section 37). Microenterprises that offer or provide services are exempt (BFSG, Section 3(3)). How market surveillance proceeds and which other risks exist is covered in our article on BFSG enforcement; which businesses count as microenterprises is explained in the article on the microenterprise exemption.

Four criteria, one banner

A banner with baked-in text rarely fails just one criterion. Usually four are connected, and each affects a different group of users. The following overview, according to WCAG 2.2, lines them up side by side, each with the finding that a test of an image banner typically turns up.

CriterionLevelRequirementTypical finding on an image banner
1.1.1 Non-text ContentAText alternative with the equivalent purpose; for controls, a name that describes the purposeNo alt attribute, the screen reader reads out the file name or link target
1.4.3 Contrast (Minimum)AA4.5:1 for text and images of text, 3:1 for large textWhite lettering on a light image area, contrast varies with the image
1.4.4 Resize TextAAText resizable up to 200 percent without loss of content or functionalityImages of text are exempt, but they pixelate when zoomed and do not grow with text-only zoom
1.4.5 Images of TextAAText instead of images of text where the technology can achieve the designDiscount and end date appear only in the graphic, although HTML and CSS could display them

The row for 1.4.4 stands out. The criterion explicitly exempts images of text: text must be resizable up to 200 percent, except for captions and images of text (W3C, WCAG 2.2). The explanation states why this is not a free pass: images of text do not scale as well as text because they tend to pixelate, and the W3C therefore suggests using text where possible (W3C, Understanding 1.4.4). The gap left by 1.4.4 is closed by 1.4.5. A test that only checks text resizing misses the image banner; a test of 1.4.5 finds it.

Two further Level AA criteria affect banner text indirectly. Success Criterion 1.4.10 requires content to remain usable without scrolling in two dimensions at a width of 320 CSS pixels, which is equivalent to a starting width of 1,280 CSS pixels at 400 percent zoom (W3C, WCAG 2.2). Success Criterion 1.4.12 requires that nothing is lost when users increase spacing, for example line height to 1.5 times the font size (W3C, WCAG 2.2). An image of text can do neither: it does not wrap and has no spacing that could be overridden.

Zoom, magnifiers and custom colors

How people with low vision use websites was surveyed by WebAIM, with 248 valid responses (WebAIM Low Vision Survey 2018). According to WebAIM, the sample was not controlled and may not represent all users with low vision (WebAIM Low Vision Survey 2018), but it shows the range. 17.9 percent of respondents enlarge content to 400 percent or larger (WebAIM Low Vision Survey 2018), and 51.4 percent use some type of high contrast mode (WebAIM Low Vision Survey 2018). Strong magnification and custom colors are part of everyday browsing for a sizable share of this group.

For an image of text, both paths are dead ends. Under strong magnification, crisp lettering turns into a staircase of pixels, and even a high-resolution graphic eventually hits its pixel limit. A high contrast mode or forced colors change text and background in HTML, but not the pixels of a graphic. The explanation of 1.4.4 notes that contrast and color combinations are harder to change for images of text, which some users need (W3C, Understanding 1.4.4). How shops can support contrast modes properly is shown in our article on forced colors and high contrast mode.

A second stumbling block sits in the page head. According to the Web Almanac 2024, 23 percent of mobile pages restrict zooming through the viewport meta tag, either with user-scalable=no or with a maximum scale of 1 (HTTP Archive Web Almanac 2024). Users can configure their browsers to override this setting, but not every default does so (HTTP Archive Web Almanac 2024). A banner with text in the image, on a page that blocks pinch zoom, leaves hardly any way to read the discount. Checking the viewport meta tag therefore belongs to any banner rebuild.

Mobile: when the banner shrinks

The problem is especially visible on a smartphone. A banner that spans the full content width on the desktop is scaled down to a fraction on a narrow screen. The baked-in text shrinks along with it, and a well-readable subline becomes a row of tiny letters. Many shops work around this with a second graphic for mobile devices, which means double export work for every promotion and every language. Banner text built in HTML wraps instead, keeps its font size and adapts to the available width.

There are also situations that rarely come up during design. On a weak connection, images load late or not at all, and the message disappears along with the image. The browser's translation feature translates HTML text, but not a graphic. Real text stays readable in all of these cases, can be found with the browser's search function and is also picked up as text by search engines. How accessibility and findability are connected is described in our article on the double lever of accessibility and SEO.

Alternative text when the image stays

Not every image of text can be replaced before a promotion starts. In that case it needs at least alternative text, because Success Criterion 1.1.1 requires a text alternative that serves the equivalent purpose for all non-text content (W3C, WCAG 2.2). For images of text, the rule is clear: the alternative text contains the same text that appears in the image (W3C WAI, Images Tutorial). Design effects such as shadows or the typeface are not described, because they do not matter for the message.

Most promo banners are linked and are therefore functional images. For them, the alternative text describes the action or destination, not the picture (W3C WAI, Images Tutorial). If it is missing, screen readers typically announce the file name, the image URL or the link destination (W3C WAI, Images Tutorial). “-20% for Black Week, View deals” then becomes “banner_bw_final.jpg” or a long URL with campaign parameters. What good alternative text looks like for other image types is shown in our article on accessible images and alt text.

How common missing alternative text is shows up in the WebAIM Million 2026. A home page contained 66.6 images on average, and 16.2 percent of all images were missing alternative text (WebAIM Million 2026). 45 percent of the images missing alternative text were linked, and one out of every four linked images was missing alternative text (WebAIM Million 2026). On 53.1 percent of home pages, the evaluation tool found at least one image without alternative text (WebAIM Million 2026). Another 10.8 percent of images with alternative text had questionable values such as “image”, a file name or a repeat of the adjacent text (WebAIM Million 2026).

For screen reader users, missing or improper image descriptions are a well-known obstacle. In WebAIM's tenth screen reader survey, with 1,539 valid responses, they rank sixth out of twelve problem areas (WebAIM Screen Reader Survey 2024). According to WebAIM, the order and indicated difficulty of the list have remained largely unchanged over the last 14 years (WebAIM Screen Reader Survey 2024). At the top, by a notable margin, is CAPTCHA (WebAIM Screen Reader Survey 2024), described in the survey as images presenting text used to verify that you are a human user (WebAIM Screen Reader Survey 2024).

Alternative text is the minimum

Alternative text makes the image banner understandable for screen readers and satisfies 1.1.1. For people who magnify or use custom colors, however, the discount remains an image. Only visible, real text on the page satisfies 1.4.5 as well.

Text over a photo: measure contrast

Placing banner text as HTML over a photo solves 1.4.5, but 1.4.3 still needs attention. Text needs a contrast ratio of at least 4.5:1 against its background (W3C, WCAG 2.2), large text at least 3:1 (W3C, WCAG 2.2). Text counts as large from 18 point, or from 14 point bold (W3C, WCAG 2.2); for many common fonts, this is roughly 1.5 times or 1.2 times the body text size (W3C, WCAG 2.2). Text that is part of a logo or brand name has no contrast requirement (W3C, WCAG 2.2), but the discount text next to it does.

The difficulty lies in the photo. An image has light and dark areas, and depending on the screen width, the text sits over a different spot. The W3C lists background images that do not provide sufficient contrast with foreground text as a dedicated failure of 1.4.3 (W3C, Understanding 1.4.3). Contrast is therefore measured at the weakest spot under the text, at every width where the banner crops differently. Low-contrast text is the most common automatically detected failure: it was found on 83.9 percent of the home pages evaluated (WebAIM Million 2026).

  • Opaque text panel: heading, subline and link sit in a box with a solid background color. Contrast then no longer depends on the photo.
  • Dense scrim: a dark layer between photo and text, dense enough that white text reaches at least 4.5:1 even over the lightest part of the image.
  • Calm image zone: the image is cropped so that an even area sits under the text, and that crop is defined for every screen width.
  • Shadows as a supplement only: a soft text shadow often helps only in some places. Whether it is enough only becomes clear when measuring at the weakest spot.

Which solution fits depends on the image and the brand. The opaque text panel is especially robust, because it holds up with changing photos and new crops. How to measure contrast over images and gradients, and what matters with brand colors, is described in our article on color contrast in accessibility.

Building the banner in HTML

Technically, the rebuild is manageable. The photo becomes the background with an empty alt attribute (alt=""), because it only sets the mood and carries no information of its own. Heading, subline and link sit on top as real text. In the following example, the text sits in a box with an opaque background, and the photo fills the area behind it.

promo-banner.html
<section class="promo-banner" aria-labelledby="promo-title">
  <picture>
    <source media="(min-width: 48em)" srcset="black-week-wide.avif" type="image/avif">
    <img src="black-week-narrow.jpg" alt="" width="800" height="600">
  </picture>
  <div class="promo-banner__text">
    <h2 id="promo-title">-20% for Black Week</h2>
    <p>On winter coats and knitwear, until Monday, November 30</p>
    <a href="/sale/black-week/">View deals</a>
  </div>
</section>
promo-banner.css
.promo-banner { display: grid; }
.promo-banner > * { grid-area: 1 / 1; }
.promo-banner img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.promo-banner__text {
  align-self: end;
  justify-self: start;
  margin: 1rem;
  padding: 1rem 1.25rem;
  background: #2d1350; /* opaque: contrast does not depend on the photo */
  color: #ffffff;
}
.promo-banner__text h2 { font-size: 2rem; line-height: 1.2; }
.promo-banner__text a { color: #ffffff; text-decoration: underline; }
@media (min-width: 48em) {
  .promo-banner__text h2 { font-size: 3rem; }
}

The grid assignment places photo and text in the same cell without absolute positioning. If the text grows through zoom or custom spacing, the cell grows with it instead of text spilling out of the banner or being cut off. Font sizes are set in rem and therefore follow the browser's base setting. The link carries meaningful text, so the screen reader announces “View deals, link” rather than a file name. For an accessible design system, it pays to build this component properly once and reuse it for every promotion.

In day-to-day work, the solution belongs in the template, not in each individual promotion. The content team then maintains heading, subline, link target and background image as separate fields, and the image is exported without text. That saves work along the way: a price change or a second language is a text edit, not a new graphic export. For artwork supplied from outside, for example by manufacturers, an example from the W3C explanation fits: an event poster containing text is uploaded, and because the content management system does not allow an HTML recreation, the same text is posted as regular text next to the poster (W3C, Understanding 1.4.5).

Classifying exceptions correctly

Not every text in an image is an image of text. The definition excludes text that is part of a picture containing significant other visual content (W3C, Understanding 1.4.5). As an example, the W3C mentions a person's name on a name tag in a photograph (W3C, Understanding 1.4.5). The following overview helps with classification in a shop.

Logo and wordmark

Counts as an essential presentation and may stay an image. If the logo is linked, its alternative text names the destination, such as “Home”.

Product photo with print

Text on packaging is part of a photo with other visual content and not an image of text. Descriptive alternative text is enough.

Discount on a mood photo

Promotional text added afterwards is the actual message. It belongs over the image as HTML, not inside the image.

Type samples and engraving

Where the shape of the lettering carries the information, as in an engraving preview, the presentation is essential. Alternative text conveys the content.

Manufacturer banners

If supplied artwork cannot be replaced, the same text appears visibly next to it. If image and text are both presented, 1.4.5 is met.

Voucher code

A code inside an image can neither be copied nor read aloud. Code, value and conditions belong on the page as text.

Classification remains a case-by-case question. What matters is whether the text carries the information and whether HTML and CSS can achieve the intended presentation. Lettering in the campaign typeface does not become a logo just because it looks distinctive. And for logos too, the exception only covers the presentation: a linked logo is a functional image whose alternative text should name the destination (W3C WAI, Images Tutorial).

Checks before the promotion starts

The following steps only need a browser, a screen reader and a contrast tool. They can be run quickly for every banner template and cover the criteria discussed in this article. The relevant success criterion is given in parentheses.

  • Select the text: can the discount text be selected with the mouse or found with the browser's search function? If not, it is part of the graphic (1.4.5).
  • Zoom to 200 percent: does the text stay sharp and fully visible? In addition, increase only the font size in the browser settings (1.4.4).
  • Shrink to 320 CSS pixels: narrow the window or zoom to 400 percent; text and link must be reachable without horizontal scrolling (1.4.10).
  • Start a screen reader: it should announce the visible text and a link name with its destination, not a file name or URL (1.1.1).
  • Measure contrast: at the weakest spot under the text, at every screen width, with at least 4.5:1, or 3:1 for large text (1.4.3).
  • Override text spacing: use a bookmarklet to increase line height and spacing; nothing may be cut off (1.4.12).
  • Turn off images: block images in the browser and check whether the promotion is still understandable.
  • Check the viewport meta tag: no user-scalable=no and no maximum-scale=1 in the page head.

This check does not replace a full audit, but it finds typical banner defects before a promotion goes live. Which testing tools complement such a manual check, and where their limits lie, is described in our article on accessibility testing tools. If you also use countdown bars and voucher pop-ups for Black Week, you will find the matching checks in the article on accessible Christmas promotions. If several banners run as a carousel, the rules for moving content from our article on accessible sliders apply as well.

From a single banner to a template

A rebuilt banner helps until the next promotion. What lasts is a template that makes text in images unnecessary. That takes three things: a banner component in the shop with separate fields for text and image, an image specification for designers and manufacturers that asks for artwork without baked-in text, and a short acceptance check before every publication. The content team does not need programming skills for this, but it does need a clear rule. How teams establish such rules is described in our article on training content teams.

We test promo banners and banner templates as part of a WCAG audit against criteria 1.1.1, 1.4.3, 1.4.4, 1.4.5, 1.4.10 and 1.4.12, using zoom, contrast measurements at several screen widths and a check of the screen reader output. Where text sits inside the image, we rebuild the template as HTML text as part of accessible web development. What an online shop should consider beyond that is summarized on our page about accessible e-commerce. The process of a shop rebuild is described on the page implementing an accessible online shop, and the legal obligations at a glance are listed under BFSG requirements.

Sources

This article is based on data from: W3C (WCAG 2.2 and the Understanding documents for 1.4.3, 1.4.4 and 1.4.5), W3C WAI Images Tutorial, WebAIM Million 2026, WebAIM Screen Reader Survey 2024, WebAIM Low Vision Survey 2018, HTTP Archive Web Almanac 2024, German Retail Federation (HDE, forecast 2025), Federal Statistical Office of Germany (Destatis), World Health Organization (WHO), ETSI EN 301 549 V3.2.1, German Accessibility Strengthening Act (BFSG) and the ordinance implementing it (BFSGV).

Related Articles

Practice & implementation

AI-Generated Code: What Accessibility Testing Finds

What accessibility testing finds in AI-generated code: four typical patterns, from div buttons to removed focus outlines, and how testing fits the workflow.

17 min read
German Accessibility Act

Accessibility information in your shop: § 19 BFSGV explained

What § 19 No. 1 BFSGV asks of online shops: keep manufacturers' accessibility information in a product data field, show it on product pages, check § 11 BFSG.

19 min read
WCAG & standards

Empty Links and Buttons: Giving Controls a Clear Name

Empty links and buttons are among the most common WCAG findings. Fix patterns for icon buttons, image links and “more” links, checked via the links list.

18 min read