Resources

Website problems

Technical problems a website can have, what causes them, and how to verify and fix each one.

accessibility

Missing language declaration

Without `<html lang>`, screen readers guess the pronunciation and translation tools guess the source language. Why it is one attribute, and what a wrong value costs.

Read
Generic link text

Screen-reader users navigate by listing links. What a list of twenty 'read more' entries communicates, and how to write link text that works out of context.

Read
Missing image alt text

Alt text is what a screen reader announces and what shows when an image fails. Which images need it, which must have it empty, and how to fix it at scale.

Read
Low colour contrast

WCAG sets measurable contrast ratios for text against its background. What the thresholds are, what automated checks can and cannot measure, and how to fix a palette.

Read
Form inputs without labels

An input with no programmatic label is announced as a bare edit field. Why a placeholder is not a label, the four ways to associate one, and what autocomplete adds.

Read
Buttons and links with no accessible name

An icon-only control with no text is announced as 'button' and nothing else. Where the accessible name comes from, and how icon buttons get one without visible text.

Read
No visible focus indicator

Removing the focus outline makes a site unusable by keyboard. What WCAG requires, why `outline: none` is the single most damaging CSS line, and how to style focus properly.

Read
Invalid ARIA attributes

Broken ARIA references, invalid roles and hidden interactive elements actively mislead assistive technology. The failure modes, and why no ARIA beats wrong ARIA.

Read
Positive tabindex values

Any element with a positive tabindex jumps ahead of every element with the default. The effect is global, it does not compose, and reordering markup is the fix.

Read
Focusable elements hidden from screen readers

Marking a container hidden from assistive technology removes its whole subtree from the accessibility tree while leaving its controls in the tab order.

Read
ARIA references pointing nowhere

A labelledby or describedby attribute naming an identifier that does not exist produces no name at all. The visual label is unaffected, which is why it survives.

Read
No skip link

Without a way to bypass repeated navigation, a keyboard user traverses the same links on every page. What a working skip link looks like and why most break.

Read
Iframes without titles

An embedded frame with no title is announced as an unlabelled region. On a page with several, a screen reader user has no way to tell them apart.

Read

availability

Redirect loop

Two rules disagreeing send a request back and forth until the browser gives up. The four pairs that cause it, and how to find which layer issues which hop.

Read

content

Thin content pages

A thin page carries too little of its own substance to answer the query it targets. How to recognise one, why word count is the wrong measure, and the three honest remedies.

Read
Near-duplicate pages

Two pages whose content is substantially the same compete with each other and are usually collapsed into one by search engines. The four patterns that cause it, and the fix for each.

Read
Placeholder text left in production

Filler text that shipped. The eleven forms that recur, why they survive review, how to find every instance, and how to stop them reaching production again.

Read
Pages nothing links to

A page no other page links to is found by nobody browsing and crawled rarely. Why a sitemap entry is not a substitute, and which findings are false.

Read
Menu links that lead nowhere

A menu entry with no destination, an empty target or no accessible name loses visitors silently. The cause is usually one component, not many pages.

Read
Navigation that changes between pages

A menu that loses entries on some templates buries whole sections. The cause is a template condition, and the symptom is invisible on the pages you test.

Read
Typographic errors in content

Repeated words, doubled punctuation, missing spaces and shouted blocks are mechanical defects a scan can find. Individually trivial, collectively a signal.

Read

links

Broken links on a website

Which status codes really mean a link is broken, which are false alarms, and why internal broken links are worth fixing before external ones.

Read

mobile

Missing viewport meta tag

Without a viewport declaration, mobile browsers assume a desktop width and zoom out. What the tag does, the values that break pinch-zoom, and how to verify the fix.

Read
Horizontal scrolling on mobile

One element wider than the viewport makes the whole page scroll sideways. The six usual culprits, how to find the offending element, and why overflow:hidden is not the fix.

Read
Touch targets too small

A link small enough to be hard to hit costs a tap, and sometimes the wrong page. What WCAG 2.2 requires, where spacing counts instead of size, and how to fix a dense menu.

Read
Pinch zoom disabled

A viewport declaration preventing zoom removes the mechanism people with low vision rely on. It is a WCAG failure and no layout justifies it.

Read

seo

Missing meta description

A page with no meta description lets the search engine write its own snippet. What that costs, how to find every page affected, and how to fix it at the template level.

Read
Missing page title

A page with no <title> has no name in search results, browser tabs or bookmarks. Why it usually signals a template fault, and how to find every page affected.

Read
Duplicate page titles

When many pages share one title, search engines cannot tell them apart. The template patterns that cause it, and how to tell a duplicate title from a duplicate page.

Read
Missing canonical tag

A canonical tag tells search engines which URL is the real one. When its absence is harmless, when it splits a page across several addresses, and how to fix it.

Read
Accidental noindex on a live page

A noindex directive left on a live page removes it from search entirely, with no visible symptom. Where it hides, why staging is the usual source, and how to verify removal.

Read
robots.txt blocking pages that should be crawled

A Disallow rule stops pages being fetched at all. How the matching rules really work, why blocking is not removal, and the assets that break a page when blocked.

Read
Missing or broken XML sitemap

A sitemap lists the URLs you want discovered. What it can and cannot do, the errors that make one counterproductive, and when a site genuinely does not need it.

Read
Duplicate meta descriptions

When hundreds of pages share a description, it describes none of them. The template patterns behind it, why search engines rewrite it anyway, and how to generate descriptions that vary.

Read
Title tag too long or too short

Long titles are truncated in results, short ones waste the strongest descriptor a page has. Why there is no character limit, and what to put first.

Read
hreflang annotations being ignored

Annotations are validated as a set: one missing return reference, one wrong code or one relative URL and the whole cluster is discarded.

Read
Missing social sharing tags

Without sharing metadata, platforms guess the title, description and image from the page. The guess is frequently a logo and the first sentence of boilerplate.

Read
Missing H1 heading

A page with no H1 has no stated subject in its own markup. What browsers, screen readers and search engines do instead, and how to fix it at the template level.

Read
Broken heading structure

Headings are an outline, not a font size. What several H1s, a skipped level and an empty heading each do to screen readers and search engines, and how to repair the outline.

Read

transport

Redirect chains

A link that reaches its destination through several hops still works, but costs a request each time. How chains form, when they become loops, and how to flatten them safely.

Read

Elsewhere on this site