Если кнопка «Назад» или системный жест возврата на мобильной версии сайта не реагирует, чаще всего дело в JavaScript-роутинге одностраничного приложения (SPA), который перехватывает событие popstate, либо в устаревшем сервис-воркере, который отдаёт закэшированную версию страницы без рабочих обработчиков. Первым делом стоит открыть сайт в режиме «инкогнито» — если там всё работает, проблема в кэше браузера или расширениях на вашем устройстве.
Как проверить, в чём причина
Откройте консоль разработчика через мобильный режим отладки (в Chrome — через chrome://inspect с подключённого компьютера) и посмотрите, не выдаёт ли скрипт ошибку при попытке перейти назад. Часто встречаются такие причины:
- сайт написан как SPA (React, Vue) и вручную управляет историей через history.pushState, но не обрабатывает событие popstate
- сервис-воркер закэшировал старую версию JS-бандла, из-за чего логика навигации расходится с текущей разметкой
- вёрстка использует position: fixed или overflow: hidden на body, из-за чего браузер не даёт корректно завершить жест свайпа
- сторонний скрипт (аналитика, чат-виджет) вешает свой обработчик touchstart/touchmove и блокирует системный жест
Как починить, если проблема на вашей стороне
Очистите кэш и данные сайта в настройках браузера — на Android это делается через «Настройки сайта», на iOS Safari — через полную очистку истории для домена, так как выборочной очистки cookie для одного сайта там нет. Если после этого кнопка «Назад» заработала, значит дело было в устаревшем сервис-воркере или локальном хранилище.
Что делать разработчику, если баг в коде
Добавьте явный обработчик window.addEventListener(‘popstate’, …), который синхронизирует состояние приложения с текущим URL, а не полагается только на внутренний стейт. Проверьте версию сервис-воркера — при каждом релизе увеличивайте номер кэша, чтобы браузер принудительно скачивал новые файлы, а не отдавал устаревший popstate-обработчик из старого бандла. Также стоит протестировать поведение на реальном устройстве, а не только в эмуляторе — жесты свайпа по краю экрана эмулятор часто не воспроизводит корректно.
Если ошибка воспроизводится у всех пользователей одного браузера (например, только в Safari на iOS), ищите проблему в специфичных для этого движка ограничениях истории — Safari чувствительнее к количеству записей в history и может блокировать переход при слишком частых pushState за короткое время.