Testing Links and Navigation

Navigation testing checks that people can move through a site and arrive where they expect: links lead to the right place, menus and breadcrumbs show where the user is, Back returns to the previous view, a URL pasted into a new tab opens the same page, and a mistyped address ends on a helpful "page not found" page.

On a product page, for example, the "Delivery" link should jump to the delivery section, and Back should return to page 2 of the results with the filters kept.

Why it matters

A broken link in checkout stops users when they need the next step; a Back button that loses a filtered search makes them start again; a shared link that opens the home page instead of the product loses the visit. Developers rarely notice: they click forward from the home page and seldom paste URLs, reload or go back.

Links also break when nobody edits the page: a product is removed, a section is renamed. That makes navigation a regression risk in every release, and its defects are easy to report: one page, one link, one wrong destination.

Worked example: a category renamed in a release

Release note: "The Phones category becomes Mobiles. URLs move from /phones/... to /mobiles/..., and old URLs redirect permanently." The tester's checks follow; NAV-03 failed on staging, as the bug report records.

  • NAV-01: the menu item "Mobiles" opens /mobiles and is highlighted there.
  • NAV-02: /phones → 301 → /mobiles → 200, in one hop.
  • NAV-03: /phones/nova-12 → 301 → /mobiles/nova-12, the product, not the category.
  • NAV-04: /phones?page=2 → page 2 of Mobiles.
  • NAV-05: the Nova 12 breadcrumb reads "Home › Mobiles › Nova 12" with working links.
  • NAV-06: filter a search, go to page 2, open a product, press Back → page 2, filter kept.
  • NAV-07: /mobiles/nova-12 in a private window opens the product; /mobiles/no-such-phone returns 404.
Title:    Old product URLs redirect to the Mobiles category instead of the product
URL:      https://staging.shop.example.com/phones/nova-12
Build:    web 3.8.0 on staging
Actual:   301 -> /mobiles -> 200 (category page)
Expected: 301 -> /mobiles/nova-12 -> 200 (Nova 12 product page)
Impact:   bookmarks, shared links and search results of every product

Common mistakes

  • Checking that a link returns no error, but not that it opens the page its text promises.
  • Trusting 200: a soft 404 passes every status check.
  • Testing navigation only by clicking from the home page, never by pasting a URL, reloading or pressing Back.
  • Assuming anchors work because the page loads; only the browser shows whether #section finds its target.
  • Reporting a "broken link" without its page, link text, href and status.
  • Checking links once, although removed content and external sites break them later.

The QA perspective

Navigation checks start when a story adds or moves a page: ask where it appears in the menus, what its URL is, whether an old URL must redirect and where to, and what links to it. A URL change without a redirect plan is a requirement gap; raise it before the release.

Keep a short navigation checklist for regression (menus, breadcrumbs, Back from results, a signed-out deep link, the 404 page) and leave the hundreds of links to an automated check. Report a broken link with its source page, link text, href, status and final URL, plus the hop list for a redirect.

Practice exercise

Plan navigation tests for a moved help centre

Your task

A company moves its help centre from /support/... to /help/... and adds a breadcrumb and a menu item "Help". The release note says: "Old support URLs redirect to the new ones. Each article has a table of contents linking to its sections." Write at least eight navigation checks with their expected results.

Then read the staging trace below: which of your checks does it answer, and what would you report?

Material
Link on page:  https://example.com/support/returns#refund-time

GET https://example.com/support/returns
    302 Found      Location: https://example.com/help
GET https://example.com/help
    200 OK         page title: "Help centre"
Steps
  1. List the menu, breadcrumb and content links the change touches.
  2. Add redirect checks for old URLs, query strings and fragments.
  3. Add checks for Back, a deep link and the 404 page.
  4. Compare the trace with your expected results.
Show the model answer
Model answer

Example checks: "Help" opens /help and is highlighted there; an article breadcrumb reads "Home › Help › Returns" with working links; table-of-contents links scroll to their sections; old URLs redirect in one hop to the matching article and keep #section; an old search URL such as /support/search?q=refund keeps its query string; article links point straight to /help/...; an article URL opens in a private window; Back returns to the search results; /help/no-such-article returns 404.

The trace meets one expectation, a single hop, and breaks three: 302 Found is a temporary redirect for a permanent move (expect 301 or 308; confirm with the team); it ends on the help home page, not /help/returns; and because a browser keeps the fragment when the Location has none (RFC 9110), the user lands on /help#refund-time, a section that does not exist there.

Report: "Old support article URLs redirect temporarily to the help home page instead of the article", with the source link, the hops, the expected 301 → /help/returns → 200 and the impact on bookmarks and search results. The trace answers only the redirect checks; the rest need the browser.

Frequently asked questions

What is the difference between a broken link and a broken anchor?

A broken link points to a URL the server cannot serve, and the status code shows it (404, 410). A broken anchor points to a #fragment with no matching id on the page: the page loads with 200 and simply does not scroll, so you find it only in the browser.

Is a redirect a defect?

No. Redirects are the right way to keep old URLs working after a move. A redirect is a defect when it leads to the wrong page, uses a temporary code for a permanent move, or passes through a chain of hops or a loop. Links on your own pages should still point to the final URL.

Should every link open in a new tab?

No. The default, the same tab, keeps Back working and lets users open a new tab themselves. Teams usually keep new tabs for cases such as external sites or a document opened while filling in a form, and such a link should say that it opens a new tab. Check against the team's rule, not your own preference.

Can link checking be automated?

Yes, and on a large site it should be: a crawler or a test script can request every link and report the status codes. It cannot judge whether a destination matches its link text, does not reliably catch soft 404s and does not test Back or deep links in context, so keep a short manual pass for those.

References

Practise with Mutqan tools

Trace redirect chains (301/302/307/308) and see every hop, status and final URL.

Web

Break a URL into protocol, host, port, path, query parameters, fragment and credentials.

Web

Decode percent-encoded URLs and query strings back to readable text.

Encoding

Parse and build query strings, including repeated keys and bracket-array notation.

Web

Go deeper

Your progress on this topic

Part of the QA Roadmap