﻿---
title: "Surge: статический кэш страниц без настроек"
description: "Плагин Surge — zero-config page cache для WordPress: статические HTML-файлы, автоинвалидация, WP-CLI управление, 1000–2500 RPS на слабом VPS. Установка, диагностика, исключения."
---

## Что такое Surge

[Surge](https://wordpress.org/plugins/surge/) — минималистичный плагин страничного кэширования от Konstantin Kovshenin (core contributor WordPress, ex-Automattic). Генерирует статические HTML-файлы и отдаёт их в обход PHP-цикла WordPress — это ускоряет TTFB и снимает нагрузку с сервера.

**Ключевая особенность:** у плагина нет экрана настроек. Он работает из коробки на любом корректно сконфигурированном хостинге. Кэш хранится на диске и автоматически инвалидируется при обновлении контента.

В нагрузочных тестах Surge держит **1000–2500 запросов в секунду** при 100 одновременных соединениях на одноядерном VPS с 1 ГБ RAM — это в 70+ раз быстрее стокового WordPress.

**Требования:** WordPress 5.7+, PHP 7.3+, протестирован вплоть до WordPress 7.0. Лицензия GPLv3, исходники на [GitHub](https://github.com/kovshenin/surge).

## Установка

Через админку: **Плагины → Добавить новый → поиск «surge» → Установить → Активировать**.

Через WP-CLI:

```bash
wp plugin install surge --activate
```

При активации плагин записывает drop-in `advanced-cache.php` в `wp-content/` — WordPress подхватывает его на ранней стадии загрузки и отдаёт статический HTML ещё до инициализации ядра. При деактивации drop-in удаляется автоматически.

## Управление через WP-CLI

Плагин ориентирован на разработчиков: основной интерфейс управления — WP-CLI, а не админка.

```bash
# Полная очистка кэша
wp surge flush

# Статус кэша (версия, количество файлов, состояние)
wp surge status
```

Альтернатива `wp surge flush` — выключить и включить плагин (toggle activation).

## Как проверить, что кэш работает

Три способа диагностики:

1. **Site Health** — **Инструменты → Здоровье сайта**. Ошибки установки (например, проблемы с `advanced-cache.php` или правами на запись) отображаются там.
2. **Заголовок `X-Cache`** — в ответе сервера видно `HIT` или `MISS`:

```bash
curl -I https://example.com/ | grep -i x-cache
```

3. **Окно инкогнито** — откройте сайт без авторизации: именно так выглядит закэшированная версия для анонимных посетителей.

## Когда происходит cache miss

Surge не кэширует запрос в следующих случаях:

- вы авторизованы в WordPress;
- в браузере установлена уникальная cookie;
- в URL есть уникальный query-параметр (маркетинговые параметры — `utm_campaign`, `utm_source` и подобные — игнорируются и кэшу не мешают);
- метод запроса не GET и не HEAD.

Это стандартное поведение страничного кэша: персонализированный контент никогда не должен попадать в общий кэш.

## Исключение страниц из кэша

Surge уважает стандартные HTTP-заголовки — отдельных настроек не нужно:

- Заголовок **`Cache-Control: no-cache`** (или `max-age=0`) в ответе — страница не кэшируется. Большинство плагинов (WooCommerce, формы, личные кабинеты) отправляют этот заголовок сами.
- Константа **`DONOTCACHEPAGE`** — уважается с версии 1.0.5, работает так же, как в WP Super Cache и Batcache:

```php
// В functions.php или плагине — отключить кэш для конкретного запроса
if ( is_page( 'checkout' ) ) {
    define( 'DONOTCACHEPAGE', true );
}
```

## Конфигурация через константы

С версии 1.2.0 поддерживаются константы `SURGE_*` в `wp-config.php` для тонкой настройки без UI.

Единственный частый случай — хостинги, где функция `fpassthru()` отключена «по соображениям безопасности». Тогда включается альтернативный метод отдачи файлов:

```php
// wp-config.php — для хостингов с отключённым fpassthru()
define( 'SURGE_FPASSTHRU_ALT', true );
```

## Multisite и события

- **Multisite** — совместимость улучшена в 1.1.0, плагин работает в сети сайтов.
- **Events system** (1.1.0+) — внутренний механизм событий с поддержкой `s-maxage` и `stale-while-revalidate` для гранулярного контроля свежести кэша. В 1.2.0 в события добавлен статус кэша.

## Surge vs другие плагины кэширования

| Критерий | Surge | WP Super Cache | WP Rocket |
|---|---|---|---|
| Цена | Бесплатный | Бесплатный | Премиум |
| Настройки | Нет (zero-config) | Много | Много + автоматика |
| Управление | WP-CLI | Админка | Админка |
| Оптимизация фронтенда | Нет | Нет | Да (минификация, lazy load, CDN) |
| Для кого | Разработчики | Все | Все |

**Когда выбирать Surge:**

- VPS или dedicated, где вы управляете сервером сами и не нужен «комбайн» оптимизации;
- highload-проект, где важна максимальная отдача статики без оверхеда;
- инфраструктура как код — настройка через константы и WP-CLI вписывается в CI/CD;
- frontend-оптимизация уже решена другими средствами (тема, CDN, серверная минификация).

**Когда НЕ выбирать Surge:** shared-хостинг с сильно урезанными PHP-функциями, или когда нужны минификация, lazy load и preload из коробки — это территория WP Rocket.

Полное сравнение всех плагинов страничного кэша: [Кэширование страниц в WordPress](https://wpcraft.ru/kb/stacks/wordpress/cache/page-cache.md).

## Совместимость с WooCommerce

WooCommerce сам отправляет `Cache-Control: no-cache` для Cart, Checkout и My Account — Surge уважает эти заголовки и не кэширует динамические страницы автоматически. Дополнительная настройка не требуется, но поведение стоит проверить через `X-Cache` после установки. Подробнее: [Кэширование в WooCommerce](https://wpcraft.ru/kb/stacks/woocommerce/caching.md).

## Материалы и источники

- [Surge на WordPress.org](https://wordpress.org/plugins/surge/)
- [kovshenin/surge на GitHub](https://github.com/kovshenin/surge) — README, changelog, исходники
- [Кеширование WordPress: WP Super Cache, WP Rocket, Surge](https://wpcraft.ru/blog/cache-wordpress) — обзорная статья WPCraft
- [Кэширование страниц в WordPress](https://wpcraft.ru/kb/stacks/wordpress/cache/page-cache.md) — сравнение всех плагинов страничного кэша