WCAG 2.2 - Success Criterion
3.3.7 Redundant Entry
Description
Information that has already been entered by the user in a previous step of the same process must not be requested again, unless re-entering the information is essential for security reasons, the information may no longer be valid, or it is critical that the information is intentionally confirmed. This new WCAG 2.2 criterion reduces unnecessary cognitive and motor burden on users by ensuring they do not have to recall and re-type data they have already provided within the same multi-step workflow.
How To Test
- Identify all multi-step processes on the site (checkout flows, registration wizards, multi-page forms).
- Progress through each process and note every piece of information you are asked to enter.
- Identify any step that requests information you already provided earlier in the same process.
- Check whether the form auto-populates the repeated field with the previously entered value.
- If not auto-populated, check whether a user-selectable option (such as a "same as above" checkbox) is offered to copy the earlier data.
- Confirm that any re-entry requirement is justified by security, data validity, or an intentional confirmation need.
- Verify the solution works correctly with keyboard-only navigation and a screen reader.
Testing Tools
- NVDA — Free screen reader for Windows. Download, install, and open Firefox to test the demo. Navigate using Tab and arrow keys, and listen to role, name, and state announcements from the page.
- VoiceOver (macOS) — Built into macOS. Enable with Cmd+F5, then open Safari or Chrome to test the demo. Use VO+arrow keys to navigate and hear semantic structure announcements.
- Lighthouse — Browser accessibility audit in Chrome DevTools. Open DevTools (F12), go to Lighthouse, run the audit to identify semantic and labeling issues.
Demos
Enter your email in step 1 then proceed — step 2 asks you to type it again.
Step 1 of 3 — Create account
Step 2 of 3 — Confirm contact details
Enter your email in step 1 then proceed — step 2 pre-fills it automatically.
Step 1 of 3 — Create account
Step 2 of 3 — Confirm contact details
Code
<!-- ❌ Step 2 asks for email that was already entered in step 1 -->
<label for="email">Email address</label>
<input type="email" id="email" placeholder="Enter your email again">
<!-- User must recall and retype data they already provided -->
<!-- ✓ Step 2 pre-fills email from the previous step -->
<label for="email">Email address</label>
<input type="email" id="email" value="jane@example.com">
<!-- Value carried from step 1 — user can edit but need not retype -->
Code
Enter your billing address in step 1 then proceed — step 2 asks for shipping address with no checkbox or selection option.
Step 1 of 2 — Billing address
Step 2 of 2 — Shipping address
Enter your shipping address (no "same as billing" option)
Enter your billing address in step 1 then proceed — step 2 provides a checkbox to use the same address.
Step 1 of 2 — Billing address
Step 2 of 2 — Shipping address
Code
<!-- ❌ No checkbox or selection mechanism for reusing billing address -->
<label for="shipping-street">Shipping address</label>
<input type="text" id="shipping-street" placeholder="Enter address">
<!-- User must retype entire address from memory -->
<!-- ✓ Checkbox allows user to reuse billing address -->
<label>
<input type="checkbox" id="same-addr">
Use my billing address for shipping
</label>
<input type="text" id="shipping-street">
<!-- Fields auto-populate when checkbox is checked -->
Code
Fill in the payment form with an invalid credit card number — form clears all fields on error.
Fill in the payment form with an invalid credit card number — form retains all data, shows targeted error.
Code
<!-- ❌ Form clears all fields on validation error -->
document.getElementById('paymentForm').reset(); // Clears all data!
alert('Invalid card number. Please try again.');
<!-- User must re-enter all data just to fix one field -->
<!-- ✓ Form retains data, shows error for invalid field only -->
if (!isValidCard(cardNumber)) {
cardField.focus(); // Focus only the invalid field
errorMsg.textContent = 'Card number must be 16 digits';
// Do NOT reset form — all other data stays
}
Code
Fail Explanation
A checkout process that asks users to enter their billing address on one screen and then asks them to enter their shipping address on the next screen - without offering a "same as billing" option or auto-populating the fields - is a failure when both addresses are the same workflow. Similarly, a multi-step registration form that asks for a user's name on step one and then asks for the same name again on step three, without pre-filling it, forces users with cognitive disabilities, motor impairments, or anyone relying on assistive technology to perform unnecessary repetitive work.
Pass Explanation
A process passes when it either auto-populates previously entered information into fields that require it again, or provides a mechanism (such as a checkbox labelled "Shipping address is the same as billing address") that allows users to indicate the data is the same without re-typing it. Previously submitted data that is still valid within the current session and context should be surfaced for the user, reducing the total number of manual input steps required to complete the process.
Notes
This criterion applies within a single process or session; it does not require sites to remember data across separate visits. The exceptions (security, expired data, intentional confirmation) are intentionally narrow - the default expectation is that users should not have to re-enter data they have already provided in the current workflow.
Techniques
WCAG techniques used in this demo: G221