Когда ты много лет работаешь с сайтами, мало что может тебя удивить. Но иногда попадается баг настолько странный, что ты невольно начинаешь подозревать, что на стороне сервера завёлся полтергейст. Сегодня я расскажу, как Cloudflare решил «помочь» и чуть не разрушил запуск нового сайта. Спойлер: дело было в кэше.
📦 Контекст: сайт, который должен был просто заработать
Есть два домена — пусть будут site-old.ru и site-new.ru. Первый — старый сайт на Joomla 3, с классическим модулем обратной связи mod_pwebcontact. Второй — новый, свежий, на Joomla 5. Всё перенесли, настроили, протестировали. Казалось бы, дело за малым: сменить домен и запустить новый сайт.
Так и сделали: сайт на site-new.ru заработал, и всё было отлично... до тех пор, пока мы не увидели, что формы перестали работать.
В консоли браузера красовалась ошибка:
Uncaught TypeError: this.options.onLoad is null
Анализ показал, что модуль формы ломается из-за того, что пытается вызвать onLoad, которого нет. Но ведь мы обновили компонент! Мы удалили старые шаблоны! Мы сбросили кэш Joomla и браузера! Что ещё нужно этому сайту?!
Исследование: с чем мы имеем дело
В какой-то момент стало очевидно: поведение сайта зависит не от кода, а от чего-то внешнего. Одним из подозреваемых стал Cloudflare. Включили Dev Mode — форма заработала. Выключили — снова упала.
Ага, значит дело в нём.
Cloudflare кэшировал HTML старых страниц, включая скрипты и inline-инициализацию модуля mod_pwebcontact, где onLoad почему-то был null. Когда новый сайт поднимался на том же домене, Cloudflare радостно подсовывал браузеру этот устаревший и несовместимый скрипт из своей памяти.
Что особенно интересно — кэшировалась не только страница, но и массив параметров JavaScript, сгенерированный сервером для формы. То есть мы буквально видели новый сайт, но с настройками старого компонента.
Развязка: осознать и нажать «Purge Everything»
Решение оказалось банально простым: мы просто очистили кэш на стороне Cloudflare полностью. Мгновенно:
- исчезли ошибки в консоли
- форма инициализировалась корректно
- новый компонент работал, как и должен
Иногда именно самые простые действия оказываются самыми действенными. После этого случая мы внедрили правило: если сайт использует Cloudflare и меняется движок, версия CMS или форма — сбрасывай кэш сразу, не жди багов.
Выводы и советы коллегам
- Cloudflare кэширует больше, чем ты думаешь — включая inline JS и HTML.
- При смене CMS, компонентов или форм всегда сбрасывай кэш полностью.
- Включай Dev Mode на этапе тестирования нового сайта на боевом домене.
- Если форма падает с
onLoad is null, ищи не в коде, а в источнике старого кэша. - Для критичных компонентов (формы, корзина, AJAX-запросы) настраивай Page Rules
Cache Level: Bypass.
Этот кейс научил нас быть осторожнее с тем, что по умолчанию «помогает». Автоматизация хороша, пока ты контролируешь, что именно она автоматизирует.
Надеюсь, этот разбор сэкономит кому-то несколько бессонных часов и спасёт запуск очередного сайта :)