User acceptance testing usually fails for logistical reasons rather than technical ones. Testers are given a spreadsheet, a deadline, and no easy way to say "this is broken" at the moment they notice it. By the time they get to the spreadsheet, they have lost the URL, the exact wording, and half the reproduction steps.
A feedback button on the page collapses that gap to one click. The report is written where the problem is, and the context comes along for free.
Set it up for a test cycle
Create a project for the environment under test and allow its origin — including a wildcard for preview deployments so every build is covered without reconfiguration.
Severity is built in — a 1-to-5 picker from Cosmetic to Critical — so the field a UAT round usually needs first is already there. Add the two or three custom fields on top of it that your triage actually depends on: an area-of-the-app dropdown, a build number, a test-case reference.
Give testers one instruction
Not "log it in the sheet with the URL and your browser version". Just: click the tab, say how bad it is, describe what happened, press send. Everything you would otherwise ask them to copy down is captured automatically.
Tell them about the screenshot button, because it is the one thing that needs a deliberate press. It takes a single still image of the page they are on, blanks every form field before it does, and shows it to them before it goes anywhere.
Triage in the tracker, not in a second tool
Reports arrive in GitHub or Jira already labelled and formatted. Your triage is the triage you already do, on the board you already use — not a separate queue somebody has to remember to check.
Turn it off when the cycle ends
Pause the project and the widget stops rendering everywhere it is installed, immediately, with no deploy. Turn it back on for the next round.