<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/your-alt-text-passes-automated-checks-that-doesn-t-mean-it-s-any-good--yl2nudg6n" -->

---
title: Your alt text passes automated checks. That doesn’t mean...
description: GitHub built an alt text quality plugin for its Accessibility Scanner to catch alt text that passes automated checks but is still unhelpful, such as filenames,...
canonical: https://daily.dev/posts/your-alt-text-passes-automated-checks-that-doesn-t-mean-it-s-any-good--yl2nudg6n
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Your alt text passes automated checks. That doesn’t mean it’s any good. | daily.dev
og:description: GitHub built an alt text quality plugin for its Accessibility Scanner to catch alt text that passes automated checks but is still unhelpful, such as filenames,...
og:url: https://daily.dev/posts/your-alt-text-passes-automated-checks-that-doesn-t-mean-it-s-any-good--yl2nudg6n
og:image: https://api.daily.dev/og/posts/yl2NUdG6n.png
og:image:alt: Your alt text passes automated checks. That doesn’t mean it’s any good.
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Your alt text passes automated checks. That doesn’t mean it’s any good.

**[GitHub Blog](https://daily.dev/sources/ghblog)** · 10 min read · 5 upvotes · 1 comments

## Summary

GitHub built an alt text quality plugin for its Accessibility Scanner to catch alt text that passes automated checks but is still unhelpful, such as filenames, placeholders, or generic words. Five deterministic string-based rules run by default with no AI dependency, while an opt-in rule sends image content and page context to a vision model via GitHub Models for subjective judgments. The post details engineering decisions: catching repeated alt text based on visual layout rather than DOM order, tuning the model prompt with a decision procedure and anti-nitpick rules to avoid flooding developers with false positives, and privacy/cost tradeoffs like redacting URLs before sending data to the model. It closes with limitations, including no support for SVGs, canvas, or aria-label, and a reminder that passing automated checks is not the same as real accessibility conformance.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://github.blog/engineering/user-experience/your-alt-text-passes-automated-checks-that-doesnt-mean-its-any-good>

## Questions this post answers

### How can I detect repeated alt text across images without flagging unrelated images that happen to be adjacent in the DOM?

Repetition should be judged by on-screen layout, not document order. A run of identical alt text only counts as a real repetition problem when the gap between bounding boxes is small relative to the boxes' own size, computed by comparing the max of horizontal and vertical gap against the largest width or height among the compared images. This avoids false positives like a header logo and footer logo sharing the same alt text but appearing nowhere near each other visually.

_Teams refining accessibility tooling can compare layout-aware approaches like this one through daily.dev._

### Why does a language model keep suggesting improvements to alt text that is already good?

A model asked an open-ended quality question like 'could this be better?' will almost always answer yes, causing every image to become a flagged finding and destroying the signal. Fixing this required a decision procedure with four ordered steps (decorative, redundant with caption, functional, informative) that stops at the first match, explicit anti-nitpick rules trusting the author's framing, and structured output that forces reasoning before the verdict.

_Developers tuning LLM-based review tools can track prompt design lessons like these via daily.dev._

### What privacy risks come from sending webpage images and context to a vision model for accessibility checks?

Image URLs and link hrefs often carry signed CDN tokens or session identifiers, so query strings and fragments must be stripped before entering the model context or logs, and src/srcset attributes should be replaced with a placeholder in any markup sent externally. Page text sent as context is also untrusted input, since a scanned page could contain text designed to steer the model, and structured output only constrains response shape, not underlying reasoning.

_Engineers weighing data-flow risks of AI-assisted tooling can follow this kind of design guidance on daily.dev._

## Community discussion

Top comments from developers on daily.dev.

**@heracles2756** · 0 upvotes

> A smart, pragmatic approach—combining deterministic checks with optional AI judgment makes accessibility tooling more useful without sacrificing developer trust or privacy

## Similar posts on daily.dev

- [Why it’s important to manually test for Accessibility](https://daily.dev/posts/why-it-s-important-to-manually-test-for-accessibility-pqosvk7wb) · SitePoint · 0 upvotes · 0 comments
- [A11Y Linting HTML with CSS – Frontend Masters Blog](https://daily.dev/posts/a11y-linting-html-with-css-frontend-masters-blog-qyrmawlqy) · Frontend Masters · 8 upvotes · 0 comments
- [A Better Experience for Everyone: Usability Meets Accessibility - FastRuby.io](https://daily.dev/posts/a-better-experience-for-everyone-usability-meets-accessibility---fastruby-io-a2l1ha4ia) · RUBYLAND · 0 upvotes · 0 comments
- [AI will soon deliver code that will pass automatic testing by default – Bogdan on Digital Accessibility \(A11y\)](https://daily.dev/posts/ai-will-soon-deliver-code-that-will-pass-automatic-testing-by-default-bogdan-on-digital-accessibil-eb5n7kvf9) · Bogdan on A11y · 1 upvotes · 0 comments

---

Tags: [#webdev](https://daily.dev/tags/webdev), [#llm](https://daily.dev/tags/llm), [#github](https://daily.dev/tags/github), [#accessibility](https://daily.dev/tags/accessibility)

[View this post on daily.dev](https://daily.dev/posts/your-alt-text-passes-automated-checks-that-doesn-t-mean-it-s-any-good--yl2nudg6n)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Your alt text passes automated checks. That doesn’t mean it’s any good.","url":"https://daily.dev/posts/your-alt-text-passes-automated-checks-that-doesn-t-mean-it-s-any-good--yl2nudg6n","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/your-alt-text-passes-automated-checks-that-doesn-t-mean-it-s-any-good--yl2nudg6n"},"datePublished":"2026-08-24T21:01:36.244Z","dateModified":"2026-09-14T06:31:50.177Z","description":"GitHub built an alt text quality plugin for its Accessibility Scanner to catch alt text that passes automated checks but is still unhelpful, such as filenames,...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/e80f0de6d75bbf6efcade3724d74cb7e?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/e80f0de6d75bbf6efcade3724d74cb7e?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"GitHub Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"GitHub Blog","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/106cf162b88840808484d4b5429b59b1","url":"https://daily.dev/sources/ghblog"},"commentCount":1,"discussionUrl":"https://daily.dev/posts/your-alt-text-passes-automated-checks-that-doesn-t-mean-it-s-any-good--yl2nudg6n","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":5},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":1}],"keywords":"webdev,llm,github,accessibility","timeRequired":"PT10M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"GitHub Blog","item":"https://daily.dev/sources/ghblog"},{"@type":"ListItem","position":3,"name":"Your alt text passes automated checks. That doesn’t mean it’s any good."}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/your-alt-text-passes-automated-checks-that-doesn-t-mean-it-s-any-good--yl2nudg6n","comment":[{"@type":"Comment","text":"A smart, pragmatic approach—combining deterministic checks with optional AI judgment makes accessibility tooling more useful without sacrificing developer trust or privacy","datePublished":"2026-08-25T16:15:04.753Z","url":"https://daily.dev/posts/yl2NUdG6n#c-eTa8LneAs","author":{"@type":"Person","name":"heracles 2756","url":"https://daily.dev/heracles2756","image":"https://media.daily.dev/image/upload/s--NoOPHSFv--/f_auto/v1785506917/avatars/avatar_iYIZwiJAMuCGXY2OiXW0x?_a=BAMAMicg0"}}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/your-alt-text-passes-automated-checks-that-doesn-t-mean-it-s-any-good--yl2nudg6n#faq","mainEntity":[{"@type":"Question","name":"How can I detect repeated alt text across images without flagging unrelated images that happen to be adjacent in the DOM?","acceptedAnswer":{"@type":"Answer","text":"Repetition should be judged by on-screen layout, not document order. A run of identical alt text only counts as a real repetition problem when the gap between bounding boxes is small relative to the boxes' own size, computed by comparing the max of horizontal and vertical gap against the largest width or height among the compared images. This avoids false positives like a header logo and footer logo sharing the same alt text but appearing nowhere near each other visually. Teams refining accessibility tooling can compare layout-aware approaches like this one through daily.dev."}},{"@type":"Question","name":"Why does a language model keep suggesting improvements to alt text that is already good?","acceptedAnswer":{"@type":"Answer","text":"A model asked an open-ended quality question like 'could this be better?' will almost always answer yes, causing every image to become a flagged finding and destroying the signal. Fixing this required a decision procedure with four ordered steps (decorative, redundant with caption, functional, informative) that stops at the first match, explicit anti-nitpick rules trusting the author's framing, and structured output that forces reasoning before the verdict. Developers tuning LLM-based review tools can track prompt design lessons like these via daily.dev."}},{"@type":"Question","name":"What privacy risks come from sending webpage images and context to a vision model for accessibility checks?","acceptedAnswer":{"@type":"Answer","text":"Image URLs and link hrefs often carry signed CDN tokens or session identifiers, so query strings and fragments must be stripped before entering the model context or logs, and src/srcset attributes should be replaced with a placeholder in any markup sent externally. Page text sent as context is also untrusted input, since a scanned page could contain text designed to steer the model, and structured output only constrains response shape, not underlying reasoning. Engineers weighing data-flow risks of AI-assisted tooling can follow this kind of design guidance on daily.dev."}}]}
```

