The agency UAT checklist: 60+ checks before you ship a client website
User acceptance testing is where promising agency projects die. Not because the work is wrong, but because the launch surfaces issues that should have been caught a week earlier. Below is the UAT checklist we recommend to agencies running real client projects — exhaustive on purpose, opinionated where it matters, and organised so you can run it as a board.
Copy this list into your project tool as a checklist. Tick each item once verified. Don't ship until the list is clean.
Phase 0 — Pre-UAT setup (before testing starts)
Most UAT failures trace back to bad setup. Get this right and the rest of UAT is mechanical.
- UAT environment is identified. Confirm whether testing happens on staging, pre-prod, or production. If it's not isolated, decide explicitly that you're testing live.
- UAT environment matches production config. Same database structure, same environment variables, same payment processor mode (test vs live), same email provider config.
- Test data is loaded. Don't UAT against an empty database — load realistic content volumes.
- Test user accounts are created. One per role: admin, regular user, guest, suspended/blocked, plus any custom roles.
- UAT tracker is set up. Kanban board, spreadsheet, or feedback tool — pick one and don't split issues across multiple tools.
- Reviewer access is confirmed. Send the URLs and credentials at least 24 hours before UAT starts. Test that each reviewer can actually log in.
- Browser/device matrix is agreed. Decide which browsers and devices are in scope. Don't UAT on browsers your team isn't going to support.
- Sign-off criteria are explicit. Define what "passed UAT" actually means — every item closed, or every blocker closed, or some other state.
Phase 1 — Functional checks
Navigation and core flows
- Every navigation link resolves to the right page (no 404s).
- Logo links back to the homepage.
- Breadcrumb trails are correct on every page with breadcrumbs.
- Back button works from every page (no broken history stacks from SPA misconfiguration).
- Active-nav state highlights the current section.
- Footer links work.
Forms
- Every form submits successfully with valid input.
- Required-field validation triggers correctly.
- Email format validation accepts the edge cases (
name+tag@domain.co.uk, etc.). - Error messages are clear and appear near the offending field.
- Success state is unambiguous — confirmation message, redirect, or both.
- Submit button is disabled during submission to prevent double-submits.
- Forms work without JavaScript on critical pages (e.g. contact, checkout).
- Submitted data lands in the right place (database, CRM, email).
Authentication and accounts
- Signup → confirmation email → login flow works end-to-end.
- Forgot-password flow works.
- Logout clears the session everywhere (no zombie sessions in other tabs).
- Session expiry behaves as designed.
- "Remember me" persists across browser restarts when checked.
- Brute-force protection / rate limiting works (try a few wrong logins).
Payments and commerce
- Test card transactions complete and produce the right confirmation.
- Failed-card flow is graceful (clear error, no double-charge).
- Order confirmation emails arrive within 60 seconds.
- Receipt content is correct (line items, taxes, totals).
- Refund flow works in the admin (don't ship without testing this).
- Currency / tax / shipping rules are correct for every market in scope.
Phase 2 — Visual checks
Responsive design
- Desktop (1440 wide and 1920 wide).
- Laptop (1280 wide).
- Tablet portrait (768 wide).
- Mobile (375 and 414 wide).
- No horizontal scroll on any breakpoint.
- Tap targets on mobile are at least 44×44 px.
- Text doesn't overflow containers at any breakpoint.
Browser rendering
- Chrome (latest two versions).
- Safari (latest, plus the previous major if iOS is in scope).
- Firefox (latest).
- Edge (latest).
- Mobile Safari on iOS (real device, not just simulator).
- Chrome on Android (real device).
Visual polish
- Fonts load on every page (no FOUT longer than 200ms after first visit).
- Images have explicit dimensions to prevent layout shift.
- Hero images and above-the-fold content load quickly.
- Hover, focus, and active states are styled.
- Focus rings are visible (don't strip them for accessibility).
- Dark mode renders correctly if supported.
- Print stylesheet exists for pages that get printed (invoices, receipts).
Phase 3 — Performance
- Largest Contentful Paint < 2.5s on a Moto G Power (Chrome's mid-tier device profile) over 4G.
- Cumulative Layout Shift < 0.1.
- Total Blocking Time < 200ms.
- Lighthouse Performance score ≥ 90 on the homepage and the top three landing pages.
- Images are served as WebP or AVIF where supported.
- Above-the-fold images use
loading="eager"; below-the-fold useloading="lazy". - Critical CSS is inlined for the first paint.
- No third-party scripts blocking initial render.
Phase 4 — Content and copy
- No Lorem Ipsum anywhere in production content.
- No "TODO", "FIXME", or placeholder text in user-facing copy.
- All typos surfaced by a final spell-check pass.
- Dates and numbers use the right locale formatting.
- Phone numbers, addresses, and contact details are correct.
- Legal pages exist: Privacy Policy, Terms, Cookie Policy.
- Cookie consent banner is functional (consent saved, suppressed on subsequent visits).
- Image alt text on every meaningful image.
Phase 5 — SEO checks
- Every page has a unique
<title>. - Every page has a unique meta description.
- Canonical URLs are set correctly (no self-canonical pointing to staging).
robots.txtblocks staging; allows production. Don't ship a robots that blocks the whole site.sitemap.xmlis present, current, and submitted to Search Console.- Structured data (Organization, Product, Article, FAQ) validates in Google's Rich Results Test.
- Open Graph and Twitter card tags render correctly when pasted into Slack or Twitter.
- 301 redirects from old URLs are in place if migrating from an existing site.
Phase 6 — Analytics and tracking
- GA4 or chosen analytics platform fires on every page.
- Goals / conversions are configured.
- UTM parameters are preserved through redirects.
- Form submissions are tracked as events.
- Outbound clicks on important links are tracked.
- Tag Manager (if used) has no debug-mode-only firing rules left on.
- Marketing pixels (Facebook, LinkedIn, etc.) fire on the right events.
Phase 7 — Accessibility quick checks
A full accessibility audit is its own project. These are the minimum checks for a launch:
- Keyboard navigation works through every interactive element.
- Tab order is logical.
- Skip-to-content link exists.
- Colour contrast meets WCAG AA on text and interactive elements.
- Form fields have associated labels (not just placeholders).
- Images have alt text; decorative images have empty alt.
- No content flashes more than three times per second.
- Aria attributes are present where needed; not over-used.
Phase 8 — Final pre-launch
- SSL certificate is valid and covers all subdomains in use.
- DNS is configured for the launch domain.
- Email deliverability is tested (SPF, DKIM, DMARC records in place).
- Backup of the production database has been taken.
- Rollback plan is documented.
- Launch-day point person is identified.
- Client has been briefed on the launch sequence.
- Monitoring is configured (uptime ping, error tracker, performance budget).
How to run this as a board, not a spreadsheet
UAT spreadsheets become unmanageable above forty items. Run UAT as a Kanban board instead — one card per check, with statuses for To verify, Fail (issue logged), Passed. Visual feedback tools like WebPinch let you pin issues directly on the page during the UAT pass; each pin becomes a card with a screenshot, browser, OS, and DOM element automatically attached. Launch when every card is in Passed.
The items most agencies miss
- Form double-submission. Easy to forget, painful for the client when it happens in production.
- Email deliverability. A signup flow that "works" until the confirmation email lands in spam is a launch-blocking bug.
- Cookie consent on the staging environment. If staging has consent banner suppressed, you can ship a site where the banner is broken in prod.
- Robots.txt left in staging-block mode. The single most common SEO disaster.
- The 404 page itself. People do hit it. Make sure it's branded and links back into the site.
- Real-device mobile testing. Simulator and Chrome devtools don't catch everything.
The summary
UAT isn't a single review — it's eight phases of structured checks that catch different classes of bug. Run them in order on a board, not in your head, and "are we ready to ship?" becomes a question with a clear answer: yes, when the board is clear.
Try WebPinch free
Pin feedback on any website, capture screenshots automatically, and track everything on a Kanban board.