A website regression testing checklist checks whether a release broke behavior that already worked. For a public website, that means more than rerunning unit tests. The deployed page can still return the wrong status, lose its canonical URL, hide a primary action on mobile, or block crawlers even when the application build is green.
Use this checklist to create a small, repeatable baseline, compare the release with that baseline, and turn confirmed changes into specific fixes.
What website regression testing should cover
A useful regression suite follows the public path from the network response to the visitor's task. Test each layer on its own so a failure points to the right owner:
- Response: final URL, HTTP status, redirects, content type, and security-sensitive headers.
- Page meaning: title, description, canonical URL, headings, visible copy, and structured data.
- Crawler access:
robots.txt, sitemap discovery, index controls, and canonical consistency. - Rendered experience: desktop and mobile layout, navigation, overlays, forms, and the primary action.
- Accessibility: names, labels, heading structure, keyboard focus, contrast, and automated-rule results.
- Performance: stable lab conditions, key loading metrics, long tasks, and unexpected layout movement.
Do not collapse all six layers into one screenshot. You can spot a moved button in a screenshot. Use text assertions to catch a new noindex value or a canonical URL that points to staging.
Start with a reviewable baseline
A baseline is the last known result your team reviewed and accepted. The most recent run may contain a known failure or incomplete evidence. Record the production URL, release or commit, test time, viewport, browser, and expected result. Keep enough evidence for someone else to identify the change and its comparison point.
For visual regression testing, use a controlled environment. Playwright's visual comparison documentation notes that operating system, browser version, hardware, settings, and headless mode can affect rendering. Generate and compare screenshots under the same conditions, then review updates instead of approving every changed pixel.
import { test, expect } from "@playwright/test";
test("homepage keeps its primary path", async ({ page }) => {
await page.goto("https://example.com/");
await expect(page.getByRole("heading", { level: 1 })).toBeVisible();
await expect(page.getByRole("link", { name: "Start free" })).toHaveAttribute("href", "/signup");
await expect(page).toHaveScreenshot("homepage.png", { fullPage: true });
});
Keep the heading and link assertions beside the screenshot. They explain the contract when a broad screenshot diff contains an intentional design change.
Website regression testing checklist
Run the smallest relevant checks on every pull request, then run the public-URL checks against a deployed preview or production release.
Download the website regression testing checklist (CSV) and adapt the owners, blocking policy, and expected values to your release process. The file is a starting point, not a claim that every route or interaction can be tested from one public URL.
1. Confirm the deployed response
Test the URL people will share. Follow redirects and record the final response instead of checking only a local server.
curl -sSIL https://example.com/
curl -sS https://example.com/ | grep -E '<title>|canonical|robots'
Confirm that the preferred HTTPS host responds, redirects are intentional, and the final response contains HTML. If a release changes domains or paths, Google's site move guidance recommends testing the new site, mapping old URLs to new URLs, and monitoring both sets of URLs after the move.
2. Exercise the first visitor task
Open the page in a clean session and complete its primary action. Check the destination, success state, failure state, and browser back behavior. Repeat the path at a narrow mobile viewport.
Do not stop when the button is visible. Confirm that the action can be reached with a keyboard, its accessible name describes the result, and its destination returns a usable response. The website form testing checklist covers validation, pending states, and error recovery when the first task includes a form.
3. Compare metadata and crawl controls
Save the expected title, description, canonical URL, and index policy as text assertions. Then check robots.txt and the relevant sitemap entry. These values often live in different templates or deployment settings, so one route change can make them disagree.
Use the canonical URL and redirect guide to align the final URL, internal links, canonical tag, and sitemap. Check robots.txt versus sitemap.xml in its own test; a sitemap helps discovery, while robots rules control crawler access.
4. Compare desktop and mobile evidence
Run the same critical path at defined desktop and mobile widths. Look for horizontal overflow, covered controls, clipped text, unexpected overlays, missing focus, and layout shifts near the primary action.
Mask or isolate timestamps, rotating testimonials, ads, and other dynamic regions before using pixel thresholds. A noisy baseline trains reviewers to ignore diffs. Keep assertions for important text and destinations even when a dynamic area must be excluded from a screenshot.
For a manual pass that complements automation, follow the mobile website testing routine.
5. Recheck accessibility and performance
Run automated accessibility rules on the same rendered state, then test the keyboard path and error recovery yourself. A tool can catch a missing accessible name; it cannot decide whether the task order makes sense to a person.
Keep performance comparisons under consistent lab conditions. Compare the measured element and trace alongside the score. The Core Web Vitals guide for developers explains how LCP, INP, and CLS answer different questions and why lab and field data should remain separate.
6. Put stable checks in CI
Automate conditions that have an unambiguous pass or fail result: response status, expected destination, missing metadata, broken crawl controls, accessibility rule failures, and stable browser assertions. Keep subjective copy or design review visible to a human.
GitHub explains that required status checks can prevent a protected branch from merging until the selected checks pass. Give each check a narrow name so a reviewer can tell whether the failure came from the build, browser path, accessibility scan, or public website audit.
Store audit credentials in the CI provider's secret manager. Keep tokens out of logs and query strings. Mark an unavailable audit as unavailable unless your release policy requires that external check; missing evidence cannot support a pass.
Monitor after deployment
Pull-request checks cannot observe a later DNS change, expired asset, CMS edit, header change, or third-party failure. Run a scheduled website monitoring check against the same public URL and compare compatible results.
Alert on changes a developer can act on:
- A check that passed in the baseline becomes a warning or failure.
- An existing issue becomes more severe.
- Readiness drops or risk increases beyond a defined threshold.
- The page loses required evidence.
Keep measurement loss separate. If the browser run is unavailable or coverage drops, report that the comparison is incomplete. Do not label the page as regressed until a complete, compatible run confirms the change.
Slop Audit follows this distinction. A completed monitor can create in-app events for new issues, worsened findings, a readiness drop, or increased Slop Risk. Partial coverage creates an informational measurement event instead of a confirmed regression alert. Each event links the current scan to its baseline so the evidence remains reviewable.
Turn a regression into a release task
A useful failure report should contain:
- The current and baseline URLs or scan IDs.
- The rule or user path that changed.
- The observed value in each run.
- The viewport and test conditions.
- The smallest next fix and the rerun needed to verify it.
Avoid tickets such as “homepage score dropped.” Write “mobile navigation now covers the primary action at 390 pixels; compare the current screenshot with the last completed baseline, fix the header height, and rerun both viewports.” The website audit report example shows how to move from evidence to a specific fix.
A small checklist is easier to trust
Start with the routes and states that can block a visitor or crawler, then add lower-risk coverage as the product grows. A useful first baseline often contains:
- The homepage, signup or contact path, pricing or documentation route, and one representative campaign URL.
- The expected final URL, title, description, canonical, index policy, and primary action for each route.
- Mobile and desktop screenshots only for stable states, with dynamic timestamps, ads, and rotating content masked or asserted separately.
- A named owner for every failure and a rule for whether an unavailable external check blocks release.
This keeps CI feedback reviewable. A large, noisy suite can teach a team to approve diffs without understanding them; a small suite with clear evidence can expand safely after each real regression.
Run website regression testing with Slop Audit
Start with one public URL and run a Slop Audit. Review the response, metadata, crawl, desktop, mobile, accessibility, performance, first-task, and coverage evidence. Save the result in project history, add the CI check to pull requests, and enable scheduled monitoring so later compatible runs can be compared after deployment.
Keep your unit, integration, and end-to-end tests in place. Slop Audit adds a repeatable public-URL comparison to the release process so developers can find a changed signal, inspect its evidence, and verify the fix. Its report provides evidence without certifying accessibility, security, or search placement.