The most common cause: browsers hide controllers on purpose
If a controller is plugged in and working, but a page reports nothing until
you press a button, that’s expected behavior, not a fault. The W3C Gamepad
specification requires that getGamepads() return an empty list until it
detects what it calls a gamepad user gesture, and that the
gamepadconnected event only fire once you actually interact with a
controller that was already connected before the page loaded:
“To mitigate fingerprinting,
getGamepads()returns an empty list before a gamepad user gesture has been seen.” — W3C Gamepad specification
MDN’s guide to the API confirms the same behavior in practice, and notes Firefox implements it explicitly to prevent a page from silently detecting which controllers you own without you ever touching them (MDN, Using the Gamepad API). In short: connect the controller, then press any button or move a stick — most “my controller isn’t detected” reports resolve at exactly this step.
If a button press still doesn’t work, check these next
The tab needs focus. The gesture has to happen while the page is the active, focused tab — pressing a button while a different window is in front won’t register.
Wired vs. Bluetooth. If Bluetooth pairing is flaky, try a USB cable to rule out a radio/pairing issue before assuming the browser is at fault.
Browser support. The Gamepad API is widely supported in current
Chrome, Edge, Firefox, and other Chromium-based browsers, but individual
properties can vary — MDN notes, for example, that the timestamp
property specifically isn’t supported in Firefox even though the core API
is (MDN, Using the Gamepad API).
If one browser isn’t picking up your controller, try another before
assuming a hardware problem.
Another application has an exclusive hold on the device. Some controller-management software (manufacturer configuration tools, certain emulator front-ends) can claim exclusive access to a controller, which prevents the browser from seeing it at all. Closing that software and reconnecting is worth trying if a controller worked in-browser before and suddenly stopped.
Driver or OS-level recognition. If the controller doesn’t show up anywhere at the operating-system level either — not just in the browser — the issue is upstream of any webpage. Check your OS’s own Bluetooth/USB device list first to confirm it’s paired or connected before troubleshooting further in-browser.
Once it’s detected, confirm every input actually works
Detection is only the first step — a controller can connect successfully while still having a dead button, an unresponsive trigger, or a drifting stick. Run the Gamepad Tester to press every button and move every stick and trigger through its full range, and check the Controller Polling Rate Test if inputs feel delayed or inconsistent once connected.