QA Rules¶
QA Rules catch text problems automatically, every time a page is captured — no separate scan step. Some checks (broken layout, console errors, failed network requests) run automatically with no setup; QA Rules let you add checks specific to your site.
What gets checked automatically, with no rule needed¶
- Text overflow — content clipped or cut off by its container.
- RTL layout overflow — the same overflow check, applied to right-to-left content (Arabic, Hebrew, etc.) so layout breaks in RTL languages aren't missed.
- Console errors / page errors — JavaScript errors on the page.
- Failed requests — network requests that failed or returned an error status.
What you configure with a QA Rule¶
| Rule type | What it catches | Language-specific? |
|---|---|---|
| Translation pattern | Leftover placeholder text (like {{variable}} or some.translation.key) that should have been replaced with real content — a common sign a translation was missed. Built-in patterns are already checked; add your own if your site has other tell-tale placeholder formats. |
No — applies to every language. |
| Forbidden phrase | Text that should never appear — old branding, internal notes, placeholder copy. Matched as plain text (not case-sensitive), not a pattern. | Yes — required. Pick which language this phrase applies to. |
| Ignore console message | Suppresses console errors/warnings you already know about and don't want flagged (e.g. a noisy third-party script). Matched as a pattern. Also stops that error from ever counting as a "new" one for Monitor notifications — same suppression, not a separate setting. | No |
| Ignore network domain | Suppresses failed-request warnings for a specific third-party domain you don't control. Matched as plain text. | No |
| Required phrase | Flags a capture when mandatory copy is absent. Matching can use substring, whole word, exact page text, or regex. | Yes — required. |
| Ignore selector | Suppresses DOM-based findings from a known noisy element or component. Enter a CSS selector. | No |
| Text length limit | Flags matching elements whose trimmed text exceeds a character limit. Enter a CSS selector and maximum length. | No |
| Accessible text | Flags matching elements that have no text, aria-label, alt, title, or placeholder. Enter a CSS selector. |
No |
Specific examples¶
| Check | Example configuration or page condition | Expected result |
|---|---|---|
| Translation pattern | Pattern \\[\\[.+?\\]\\]; page contains [[checkout_title]] |
missing_translation issue |
| Forbidden phrase | French, whole-word Free; page says Start your Free trial |
forbidden_phrase issue; freestyle does not match |
| Required phrase | English, substring Terms and Conditions; footer omits it |
required_phrase_missing issue |
| Ignore console message | Pattern ResizeObserver loop limit exceeded |
That known console error is suppressed |
| Ignore network domain | analytics.example.com |
Failed analytics requests are suppressed; API failures remain |
| Ignore selector | .intercom-widget |
DOM findings attributed to that selector are suppressed |
| Text length limit | Selector .pricing-card h3, maximum 30; heading has 42 characters |
text_too_long issue |
| Accessible text | Selector img.product-image; an image has no alt, label, title, or text |
missing_accessible_text issue |
| Automatic text overflow | A 100px-wide button clips Complete your purchase with overflow: hidden |
text_overflow issue |
| Automatic RTL overflow | An Arabic dir="rtl" navigation label exceeds its container |
rtl_overflow issue |
| Automatic console error | Page logs TypeError: Cannot read properties of undefined |
console_error issue |
| Automatic page error | An uncaught promise throws during page load | page_error issue |
| Automatic failed request | GET /api/products returns HTTP 500 |
Error-severity failed_request issue |
| Brand color | Approved #1A73E8; a visible button uses an out-of-tolerance red |
brand_color_violation issue |
| Brand font | Approved Inter; visible content uses Comic Sans MS |
brand_font_violation issue |
Phrase matching modes behave as follows: Contains text finds the phrase anywhere; Whole
word avoids partial-word matches; Exact text requires an entire text node (or the page body
for a required phrase) to match; and Regular expression supports patterns such as
Terms (and|&) Conditions.
Creating a rule¶
| Field | What it means |
|---|---|
| Type | One of the eight configurable rule types above. |
| Language | Shown and required for Forbidden phrase and Required phrase rules. |
| Pattern | The text or pattern to match. |
| Match mode | How forbidden/required phrases are compared. |
| Maximum length | Character limit for Text length rules. |
| Pages | Apply to all pages, or pick specific ones. |
A rule with no pages selected applies everywhere in the project. A rule scoped to specific pages only applies there — it never affects other pages.
Managing rules¶
The rules list shows each one's type, pattern, language (if applicable), and scope. From here you can disable a rule temporarily (without deleting it) or remove it. To change a rule's pattern or type, delete it and create a new one — there's currently no in-place edit for those fields.
Where results show up¶
Every capture is checked automatically as it's taken — you don't run QA Rules separately. Anything detected becomes an issue attached to that capture, visible from the capture's detail view.
Dismissing a warning that's fine¶
In the capture's issues panel, each warning has an Ignore menu with two choices:
- Ignore until it changes — the default. Records the warning as acknowledged for that page and variant (language + viewport + cookie profile), together with a snapshot of the flagged element: its text and rendered size (for a missing translation, the exact string). The warning stops showing on later captures of that page — but only while the element stays the same. If a later capture finds the same element with different text or a different size, the warning comes back with a "content changed since you ignored this" note, so a genuinely new overflow on a redesigned button is never hidden. Manage these under Ignored findings in the project's Detection & Review section; removing one there makes the warning show again regardless.
- Always ignore on this page / across the project — creates a standing QA Rule (an
Ignore selector,Ignore console message, orIgnore network domainrule) so that class of finding is silenced permanently. Available for layout/overflow, console/page errors, and failed requests; missing translations and brand violations only support "ignore until it changes".