squirrelscan
GitHub

user-scalable=no: the viewport setting that blocks zoom

Disabling pinch zoom stops readers who need to magnify text. squirrel checks the viewport content for user-scalable and maximum-scale.

What disabling zoom does

user-scalable=no and a low maximum-scale in the viewport meta tag ask the browser to prevent pinch zoom. The usual motivation is stopping iOS zooming in when a small form field is focused, which is a font-size problem being solved in the wrong place.

The cost falls on people who need to magnify. WCAG success criterion 1.4.4 requires text to be resizable to 200% without loss of content or function, and blocking zoom fails it directly. Safari and recent Chrome ignore the request on that basis, but plenty of browsers still honour it.

What squirrel checks

The rule runs on every crawled page and reads meta[name="viewport"]. It emits a single check named viewport-zoom:

  • Skipped when there is no viewport tag. Message: No viewport meta tag to check.
  • Fail when the content contains user-scalable=no, user-scalable=0, or maximum-scale=1 or maximum-scale=1.0. Message: Viewport disables user zoom (accessibility issue), listing which of user-scalable=no and maximum-scale=1 was found. Severity error, weight 7.
  • Pass otherwise. Message: Viewport allows user zoom.

The maximum-scale test matches only the value 1, with optional decimal, so a maximum-scale=2 is not flagged even though it also caps zoom below the WCAG threshold.

How to fix it

<meta name="viewport" content="width=device-width, initial-scale=1" />

Remove user-scalable and maximum-scale entirely. If the reason was iOS zooming into form fields, the fix is to set those fields to 16px or larger, which is what triggers the behaviour.

Rule IDmobile/viewport-zoom
CategoryMobile
ScopePer-page
Severityerror
Weight7/10

Enable / disable

Disable this rule

[rules]
disable = ["mobile/viewport-zoom"]

Disable all Mobile rules

[rules]
disable = ["mobile/*"]

Enable only this rule

[rules]
enable = ["mobile/viewport-zoom"]

enable replaces the default ["*"], so this is the only rule selected. Leave disable out: a rule that matches any disable pattern is skipped even when enable names it. Only an enabled setting under a rule’s own [rule_options] table overrides both lists.

Mobile findings ship in every audit next to the SEO, performance and agent experience rules. See Core Web Vitals for how an agent works through a report.

References

Check your site

Run squirrel audit https://example.com and open the Mobile section of the report. Each page is reported with the zoom-blocking properties found. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.

Type to search…

↑↓ navigate↵ openesc close