Последнее обновление: 29 апреля 2026 года
``` *** **Ссылки по теме:** * [Обязательные страницы](../required-pages) * [Рекомендуемые страницы](../optional-pages) * [Требования по типам сайтов](../by-website-type) ---------- # Рекомендуемые и условно-обязательные юридические страницы > Пользовательское соглашение, публичная оферта, политика cookies — какие документы нужны в зависимости от типа сайта ## 1. Пользовательское соглашение (Terms of Service) [Заголовок раздела «1. Пользовательское соглашение (Terms of Service)»](#1-пользовательское-соглашение-terms-of-service) ### Обязательность [Заголовок раздела «Обязательность»](#обязательность) **Не всегда** строго обязательно по букве закона, но **крайне рекомендуется** для большинства сайтов. ### Что содержит [Заголовок раздела «Что содержит»](#что-содержит) * **Правила поведения на сайте**: запрет на спам, вредоносный контент, нарушение авторских прав * **Интеллектуальные права**: контент сайта (тексты, фото, дизайн, логотип) — ваша собственность; контент, загруженный пользователями — их ответственность * **Ограничение ответственности**: вы не отвечаете за косвенные убытки, перебои в доступе к сайту, третьи лица * **Порядок разрешения споров**: в каком суде и под какой юрисдикцией рассматриваются разногласия * **Прекращение доступа**: при нарушении правил вы можете заблокировать пользователя ### Пример структуры [Заголовок раздела «Пример структуры»](#пример-структуры) ```plaintext 1. Определения 2. Общие положения 3. Ваша ответственность как пользователя 4. Наша ответственность как владельца сайта 5. Интеллектуальная собственность 6. Запрещённое использование 7. Изменения условий 8. Разрешение споров 9. Контакты для вопросов ``` ### Размещение [Заголовок раздела «Размещение»](#размещение) * **В подвале** рядом с Политикой конфиденциальности * Часто объединяют с Политикой конфиденциальности, но лучше держать **отдельно** — они регулируют разные аспекты ## 2. Публичная оферта (Договор-оферта) [Заголовок раздела «2. Публичная оферта (Договор-оферта)»](#2-публичная-оферта-договор-оферта) ### Обязательность [Заголовок раздела «Обязательность»](#обязательность-1) **ОБЯЗАТЕЛЬНА**, если через сайт можно: * Что-то **купить** (интернет-магазин, товары) * Заказать **услугу** (консультацию, разработку, доставку) * Подписаться на **подписку** (SaaS, курсы, мобильное приложение, членство) ### Что содержит [Заголовок раздела «Что содержит»](#что-содержит-1) Публичная оферта — это **контракт**. Пользователь автоматически акцептует оферту при нажатии кнопки **«Оплатить»** или **«Заказать»**. Должна содержать: * **Существенные условия договора**: * Точное описание товара/услуги * **Цена** (финальная, все налоги включены или указаны отдельно) * **Способы оплаты** (карта, банковский перевод, электронные кошельки и т.д.) * Валюта * **Доставка и исполнение** (если применимо): * Сроки доставки или выполнения услуги * Адресаты, регионы доставки * Стоимость доставки * **Возврат и гарантия** (по Закону о защите прав потребителей): * Сроки возврата товара (14–30 дней) * Порядок возврата денег * Гарантийные обязательства (если есть) * Исключения (услуги обычно не подлежат возврату) * **Ответственность сторон**: * При отказе от заказа * При повреждении товара при доставке * При задержке исполнения ### Пример структуры [Заголовок раздела «Пример структуры»](#пример-структуры-1) ```plaintext 1. Определение терминов 2. Предмет договора (что продаём/услуга) 3. Цена и способы оплаты 4. Сроки и условия доставки/исполнения 5. Возврат и гарантия 6. Ответственность сторон 7. Конфиденциальность и персональные данные 8. Судебное разбирательство ``` ### Размещение [Заголовок раздела «Размещение»](#размещение-1) * **Видна перед оформлением заказа** * **Ссылка на оферту** в момент оплаты (как чекбокс: «Я принимаю условия публичной оферты») * Должна быть **легко доступна** и **в полном объёме** ## 3. Политика использования cookies [Заголовок раздела «3. Политика использования cookies»](#3-политика-использования-cookies) ### Обязательность [Заголовок раздела «Обязательность»](#обязательность-2) **Рекомендуется**, особенно если используете: * Аналитику (Google Analytics, Яндекс.Метрика, Amplitude) * Ретаргетинг (Facebook Pixel, Google Ads) * Чат-боты, живые чаты (Intercom, Drift) * Социальные кнопки (Like, Share) * A/B-тестирование ### Что содержит [Заголовок раздела «Что содержит»](#что-содержит-2) * **Определение cookies**: что это такое, в чём опасность/пользе * **Типы cookies**: * Функциональные (для работы сайта) * Аналитические (чтобы понять поведение пользователей) * Маркетинговые (ретаргетинг, рекламные сети) * Третьих лиц * **Управление согласием**: как пользователь может включить/отключить cookies * **Срок действия cookies** * **Ссылка на Политику конфиденциальности** ### Техническое требование: Cookie-баннер [Заголовок раздела «Техническое требование: Cookie-баннер»](#техническое-требование-cookie-баннер) Нужен **интерактивный баннер** с возможностью управления: ```html ``` **Требования к баннеру:** * ✅ Кнопка **«Отклонить»** / **«Только необходимые»** (не менее видимая, чем «Принять») * ✅ Ссылка на Политику cookies * ✅ Появляется **только один раз** (память о выборе пользователя) * ✅ Рабочие переключатели для каждого типа cookies ## Сравнение трёх основных документов [Заголовок раздела «Сравнение трёх основных документов»](#сравнение-трёх-основных-документов) | Документ | Обязательность | Размещение | Кто подписывает | | ------------------------------- | ------------------- | ------------------------ | --------------- | | **Политика конфиденциальности** | ✅ Если есть формы | Подвал + рядом с формами | Компания | | **Пользовательское соглашение** | ⚠️ Рекомендуется | Подвал | Компания | | **Публичная оферта** | ✅ Если есть продажи | Перед оплатой | Компания | *** **Дополнительно читайте:** * [Обязательные страницы](../required-pages) — Политика конфиденциальности и реквизиты * [Требования для разных типов сайтов](../by-website-type) — какие документы нужны конкретно вам * [Технические аспекты реализации](../implementation-checklist) — как разместить все на сайте ---------- # Обязательные юридические страницы > Минимальный набор юридических документов, которые должны быть на любом сайте в России, если он собирает персональные данные ## Когда они нужны [Заголовок раздела «Когда они нужны»](#когда-они-нужны) Если на сайте есть **хотя бы одна форма** (обратная связь, подписка, заявка, регистрация, комментарии), вы обрабатываете персональные данные. В этом случае требования **152-ФЗ «О персональных данных»** применяются **строго**. ## 1. Политика конфиденциальности (обязательно) [Заголовок раздела «1. Политика конфиденциальности (обязательно)»](#1-политика-конфиденциальности-обязательно) Самый важный юридический документ. Это не просто текст — это **юридическое основание** для обработки данных. ### Что должно быть в документе: [Заголовок раздела «Что должно быть в документе:»](#что-должно-быть-в-документе) * **Перечень собираемых данных**: ФИО, email, телефон, IP-адрес, cookies, данные о поведении на сайте и т.д. * **Цели обработки**: контактирование, рассылка, аналитика, улучшение сервиса * **Законные основания**: согласие пользователя, необходимость для исполнения договора, в соответствии с требованиями закона * **Сроки хранения**: как долго вы храните каждый вид данных * **Получатели данных**: Яндекс.Метрика, Google Analytics, CRM, почтовые сервисы, платежи системы и т.д. — **все** сервисы, которым передаются данные * **Права пользователей**: право доступа, исправления, удаления, ограничения обработки (ст. 18–21 152-ФЗ) * **Контакты ответственного лица**: кому писать при вопросах о персональных данных ### Размещение: [Заголовок раздела «Размещение:»](#размещение) * **Ссылка в подвале сайта** (видна на всех страницах) * **Рядом с каждой формой сбора данных**: как чекбокс согласия * **Текст чекбокса**: «Я даю согласие на обработку персональных данных в соответствии с \[ссылка на] Политикой конфиденциальности» ### Пример структуры [Заголовок раздела «Пример структуры»](#пример-структуры) ```plaintext 1. Определения 2. Информация, которую мы собираем 3. Цели обработки персональных данных 4. Законные основания 5. Сроки хранения 6. Получатели персональных данных 7. Права субъектов персональных данных 8. Безопасность данных 9. Третьи лица и трансграничная передача 10. Обновления политики 11. Контакты оператора ``` ## 2. Реквизиты владельца сайта (обязательно) [Заголовок раздела «2. Реквизиты владельца сайта (обязательно)»](#2-реквизиты-владельца-сайта-обязательно) Требуется по [Закону о защите прав потребителей](https://www.consultant.ru/document/cons_doc_LAW_305/) и [149-ФЗ](https://www.consultant.ru/document/cons_doc_LAW_61798/). ### Что указать: [Заголовок раздела «Что указать:»](#что-указать) **Для ООО:** * Полное наименование компании (как в свидетельстве) * ИНН * ОГРН * Юридический адрес (как в реестре) * ФИО директора * Email и телефон **Для ИП:** * ФИО полностью * ИНН * ОГРНИП * Адрес регистрации (как в реестре) * Email и телефон ### Размещение: [Заголовок раздела «Размещение:»](#размещение-1) * **В подвале сайта** (футер — видна со всех страниц) * На отдельной странице **«О компании»**, **«Контакты»** или **«Реквизиты»** * Некоторые сайты размещают также на странице **«Пользовательское соглашение»** или **«Публичная оферта»** ### Почему это важно [Заголовок раздела «Почему это важно»](#почему-это-важно) * **Закон требует**: потребители должны знать, с кем они взаимодействуют * **Платежи**: банки и платежные системы (Яндекс.Касса, Сбербанк, PayPal и т.д.) часто проверяют наличие реквизитов перед подключением * **Защита**: если с пользователем возникнет спор, он должен найти ваши данные легко ## Технические требования [Заголовок раздела «Технические требования»](#технические-требования) ### Активное согласие (не предустановленное) [Заголовок раздела «Активное согласие (не предустановленное)»](#активное-согласие-не-предустановленное) ```html ``` ### Ссылка должна быть активной [Заголовок раздела «Ссылка должна быть активной»](#ссылка-должна-быть-активной) Пользователь **должен иметь возможность**: * Нажать на ссылку/кнопку рядом с чекбоксом * Прочитать документ перед тем, как согласиться ## Рекомендация [Заголовок раздела «Рекомендация»](#рекомендация) ✅ **Не копируйте шаблоны** из интернета «как у всех» — они часто не соответствуют вашему конкретному бизнесу. ✅ **Заказать у IT-юриста** документы, адаптированные под ваши бизнес-процессы — это реально защищает. *** **Также читайте:** * [Рекомендуемые юридические страницы](../optional-pages) — когда нужны дополнительные документы * [Требования для разных типов сайтов](../by-website-type) — что требуется конкретно вам * [Технические аспекты реализации](../implementation-checklist) — как правильно разместить на сайте ---------- # Шаблоны юридических документов > Готовые шаблоны политик и соглашений для адаптации под ваш конкретный сайт Ниже представлены готовые шаблоны основных юридических документов. **Не копируйте их как есть** — адаптируйте под ваш конкретный бизнес, интеграции и реальные данные. ## Рекомендация [Заголовок раздела «Рекомендация»](#рекомендация) Лучше всего показать эти шаблоны IT-юристу, который адаптирует их под вашу ситуацию. Это гарантирует, что документы действительно защитят вас и будут соответствовать закону. ## Доступные шаблоны [Заголовок раздела «Доступные шаблоны»](#доступные-шаблоны) ### Юридические документы для сайта [Заголовок раздела «Юридические документы для сайта»](#юридические-документы-для-сайта) * [Политика конфиденциальности](./privacy-policy-template) — основной документ про обработку персональных данных * [Пользовательское соглашение](./terms-of-service-template) — правила поведения на сайте * [Публичная оферта](./public-offer-template) — контракт для продажи товаров/услуг * [Политика использования cookies](./cookie-policy-template) — описание cookies и управление согласием ### Договоры с исполнителями [Заголовок раздела «Договоры с исполнителями»](#договоры-с-исполнителями) * [Договор на разработку ПО (Agile/фриланс)](./contract-freelance) — помесячный Agile-договор между самозанятым фрилансером и компанией-заказчиком с еженедельным обзором, авансом на следующий месяц и оплатой по результатам месяца * [Договор оказания услуг (общий)](./contract-services) — универсальный договор с оформлением всех услуг через Технические задания; внутри файла — сам договор и 3 шаблона ТЗ (на задачу, на диагностику, на разработку) ## Структура шаблонов [Заголовок раздела «Структура шаблонов»](#структура-шаблонов) Каждый шаблон содержит: 1. **Описание** — что это за документ, когда его использовать 2. **Структурированный текст** — разделы и подразделы, готовые к заполнению 3. **Комментарии** — что нужно изменить/дополнить под вашу ситуацию (выделены `[в квадратных скобках]`) 4. **Примеры** — как заполнить конкретные части ## Как использовать [Заголовок раздела «Как использовать»](#как-использовать) 1. Откройте нужный шаблон 2. Скопируйте текст в свой документ (Google Docs, Word, CMS) 3. Замените `[текст в квадратных скобках]` на свои данные 4. Читайте комментарии и рекомендации (они помогут понять, что именно менять) 5. Проверьте у юриста перед публикацией *** **Основные ссылки:** * [Обязательные страницы](../required-pages) * [Рекомендуемые страницы](../optional-pages) * [Требования по типам сайтов](../by-website-type) * [Технические аспекты](../implementation-checklist) ---------- # Шаблон: Договор на разработку ПО для СЗН > Готовый шаблон договора на разработку программного обеспечения с оплатой по месячным итерациям # ДОГОВОР [Заголовок раздела «ДОГОВОР»](#договор) № \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ Дата: \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ 20\_\_\_г. Общество с ограниченной ответственностью “Фирма ВНВ” (ООО “Фирма ВНВ”), в лице Генерального директора И.О. Фамилия, действующего на основании Устава, именуемое в дальнейшем «Заказчик», с одной стороны, и И.О. Фамилия, 00 месяц 0000 года рождения, паспорт: серия 00 00 номер 000000, выдан Наименование органа 00.00.0000, код подразделения 000-000, зарегистрированный по адресу: 000000, Адрес: г. Город, ул. Улица, д. 0, кв. 0, телефон: +7 (000) 000-00-00, применяющий специальный налоговый режим «Налог на профессиональный доход» (самозанятый), ИНН 000000000000, именуемый в дальнейшем «Исполнитель», с другой стороны, совместно именуемые «Стороны», заключили настоящий Договор о нижеследующем: # 1. ПРЕДМЕТ ДОГОВОРА [Заголовок раздела «1. ПРЕДМЕТ ДОГОВОРА»](#1-предмет-договора) 1.1. Заказчик поручает, а Исполнитель принимает на себя обязательства по оказанию услуг по разработке, доработке, интеграции, исправлению дефектов и техническому сопровождению программного обеспечения, сайтов, сервисов и иных цифровых продуктов Заказчика (далее совместно – «Программное обеспечение»). 1.2. Стороны осознанно выбирают гибкую методику разработки (agile) согласно Манифесту, изложенному в Приложении № 3 к настоящему Договору, и руководствуются его принципами при оказании услуг. Такой выбор обусловлен намерением Сторон повысить эффективность разработки, снизить риски несоответствия результатов потребностям Заказчика и обеспечить возможность адаптации состава услуг к изменяющимся требованиям в ходе исполнения Договора — вместо методов управления проектами, основанных на фиксации содержания, сроков и стоимости работ (проектный треугольник). 1.3. Услуги оказываются месячными итерациями. Одна итерация составляет 1 (один) календарный месяц и оплачивается по правилам раздела 3 настоящего Договора. В пределах каждой месячной итерации Стороны согласуют и изменяют состав задач без изменения стоимости итерации, если иное прямо не согласовано Сторонами в письменной форме. 1.4. Задачи, приоритеты и критерии готовности согласуются Сторонами в письменной форме через электронную почту, мессенджер или доску задач (трекер). В качестве инструментов совместной работы Стороны используют трекер задач (для постановки, отслеживания и приёмки задач) и систему контроля версий (Git) — для учёта изменений исходного кода, отслеживания версий и истории правок. Не реже одного раза в неделю Стороны проводят обзор задач, результатов и планов на следующую неделю. По итогам такого обзора Заказчик вправе менять приоритеты и состав задач. 1.5. Состав услуг и стоимость одной месячной итерации определяются в Приложении № 1 к настоящему Договору. Изменение стоимости итерации, а также выход за пределы согласованной месячной загрузки возможен по согласованию Сторон. 1.6. Результаты оказанных услуг за отчётный месяц фиксируются в трекере задач, системе контроля версий (Git), ежемесячном отчёте Исполнителя (Акт оказанных услуг, примерный шаблон в Приложении № 2). Незавершённые задачи автоматически переносятся в план (backlog) следующих итераций согласно приоритетам. # 2. ПРАВА И ОБЯЗАННОСТИ СТОРОН [Заголовок раздела «2. ПРАВА И ОБЯЗАННОСТИ СТОРОН»](#2-права-и-обязанности-сторон) 2.1. Исполнитель обязуется: 2.1.1. Оказывать услуги лично, с надлежащим качеством согласно плану задач, сохраняя самостоятельность в выборе способов, времени, места и инструментов оказания услуг. 2.1.2. Перед внесением изменений на рабочий сайт предварительно тестировать изменения на локальном или тестовом окружении. 2.1.3. В начале каждого месяца, следующего за отчётным, направлять Заказчику ежемесячный отчёт по данным трекера задач и системы контроля версий (Git) (по форме Приложения № 2 - Акт оказанных услуг). 2.1.4. После получения оплаты формировать чек в приложении «Мой налог» и направлять его Заказчику на адрес эл. почты или через мессенджер. 2.1.5. Не разглашать конфиденциальную информацию Заказчика, включая исходный код, доступы, проектную документацию, данные пользователей, коммерческие условия и сведения о внутренней организации разработки, а также не использовать такие сведения вне целей исполнения настоящего Договора. 2.2. Заказчик обязуется: 2.2.1. Своевременно предоставлять необходимые доступы и информацию, необходимую для оказания услуг. 2.2.2. Рассматривать ежемесячный отчёт (Акт оказанных услуг) и, при наличии замечаний, направлять Исполнителю предложения по корректировке или доработке задач для включения в план (трекер задач) следующих итераций. 2.2.3. Согласовывать перечень задач и приоритетов в порядке, установленном пунктами 1.3-1.4 настоящего Договора, и участвовать в еженедельном обзоре задач не реже одного раза в неделю. 2.2.4. Оплачивать услуги в порядке раздела 3. # 3. ПОРЯДОК РАСЧЕТОВ [Заголовок раздела «3. ПОРЯДОК РАСЧЕТОВ»](#3-порядок-расчетов) 3.1. Оплата услуг осуществляется в рублях в безналичной форме по реквизитам Исполнителя, указанным в разделе 8 настоящего Договора. Стоимость одной месячной итерации указывается в Приложении № 1. 3.2. Заказчик уплачивает аванс за следующую месячную итерацию в размере 25 (двадцать пять) или 50 (пятьдесят) % стоимости такой итерации не позднее последнего рабочего дня текущего месяца или 5-го (пятого) числа оплачиваемого месяца. Внесение аванса означает подтверждение продолжения действия настоящего Договора на следующий месяц и резервирование Исполнителем производственной ёмкости на соответствующую месячную итерацию. Уплаченный аванс является невозвратным платежом. Уплата аванса за следующий месяц является основным способом подтверждения согласия Заказчика с результатами оказанных услуг за прошедший отчётный месяц. Подписанный Заказчиком Акт оказанных услуг также является подтверждением такого согласия. 3.3. При отсутствии аванса в срок, установленный пунктом 3.2 настоящего Договора, Исполнитель не обязан резервировать загрузку на следующий месяц и вправе согласовывать новые сроки начала очередной итерации по мере своей фактической доступности. 3.4. Оставшаяся часть стоимости отчётного месяца уплачивается Заказчиком в течение 5 (пяти) рабочих дней с даты получения ежемесячного отчёта (Акта оказанных услуг) за соответствующий месяц. 3.5. Обязанность Заказчика по оплате считается исполненной с момента зачисления денежных средств на расчётный счёт Исполнителя. 3.6. НДС не облагается в связи с применением Исполнителем специального налогового режима «Налог на профессиональный доход» (ст. 2, п. 8 ст. 5 Федерального закона от 27.11.2018 № 422-ФЗ). 3.7. Исполнитель обязан в течение 3 (трёх) рабочих дней после получения каждой оплаты направить Заказчику чек, сформированный в приложении «Мой налог», на адрес электронной почты. 3.8. В случае снятия с учёта в качестве плательщика налога на профессиональный доход Исполнитель обязан письменно уведомить Заказчика в течение 3 (трёх) календарных дней. 3.9. Если услуги не оказывались либо не могли оказываться по вине Заказчика (не предоставлены доступы, отсутствуют согласованные задачи, заблокирована обратная связь и т.п.), сроки выполнения соответствующих задач подлежат переносу, а оплаченная месячная итерация считается зарезервированной за Заказчиком в пределах фактически доступной загрузки Исполнителя. 3.10. Исключительные права на результаты интеллектуальной деятельности, созданные Исполнителем в соответствующем отчётном месяце в рамках настоящего Договора, переходят к Заказчику в полном объёме с момента полной оплаты стоимости услуг за такой отчётный месяц, если иное не согласовано Сторонами в письменной форме. 3.11. Исполнитель гарантирует, что обладает необходимыми правами на передаваемые результаты оказанных услуг и не будет оспаривать права Заказчика на такие результаты. # 4. ЗАКРЫТИЕ ОТЧЁТНОГО МЕСЯЦА [Заголовок раздела «4. ЗАКРЫТИЕ ОТЧЁТНОГО МЕСЯЦА»](#4-закрытие-отчётного-месяца) 4.1. По итогам каждого отчётного месяца Исполнитель формирует ежемесячный отчёт (Акт оказанных услуг) по форме Приложения № 2 на основании данных согласованного Сторонами трекера задач и системы контроля версий (Git). 4.2. Ежемесячный отчёт (Акт оказанных услуг) направляется Заказчику в начале месяца, следующего за отчётным. 4.3. Заказчик вправе в течение 5 (пяти) календарных дней с момента получения ежемесячного отчёта (Акт оказанных услуг) направить Исполнителю замечания и предложения по задачам для включения в план (backlog) следующих итераций. Такие замечания не приостанавливают оплату и не влияют на закрытие прошедшего отчётного месяца. 4.4. Оплата оставшейся части стоимости услуг за отчётный месяц в порядке пункта 3.4 настоящего Договора является исполнением денежного обязательства Заказчика и не отменяет порядок закрытия отчётного месяца, установленный пунктами 4.7-4.8 настоящего Договора. 4.5. При наличии обоснованных замечаний Заказчика Стороны фиксируют их в трекере задач и согласуют приоритет устранения в трекере задач ближайших месячных итераций. Устранение замечаний выполняется в последующих итерациях в пределах согласованной месячной загрузки и стоимости итерации, если иное прямо не согласовано Сторонами в письменной форме. 4.6. Перечень оказанных услуг за отчётный месяц определяется по фактически выполненным задачам, отражённым в трекере задач, истории изменений в системе контроля версий (Git) и ежемесячном отчёте (Акте оказанных услуг). Замечания по отчёту не влияют на состав оказанных услуг за месяц и учитываются только при планировании следующих итераций. 4.7. Отчётный месяц считается закрытым, а его результаты — согласованными Сторонами с даты уплаты аванса за следующую месячную итерацию в порядке пункта 3.2 настоящего Договора. Если Заказчик подписал Акт оказанных услуг ранее, отчётный месяц считается закрытым с даты подписания такого Акта со стороны Заказчика. 4.8. Стороны согласовали, что основным способом закрытия отчётного месяца и подтверждения согласия Заказчика с его результатами является уплата аванса за следующую месячную итерацию в порядке пункта 3.2 настоящего Договора. Подписанный Заказчиком Акт оказанных услуг также является подтверждением такого согласия. # 5. ОТВЕТСТВЕННОСТЬ СТОРОН [Заголовок раздела «5. ОТВЕТСТВЕННОСТЬ СТОРОН»](#5-ответственность-сторон) 5.1. Исполнитель несёт ответственность за сохранность полученных доступов и обязуется не разглашать их третьим лицам. 5.2. Стороны освобождаются от ответственности за неисполнение обязательств, если оно вызвано обстоятельствами непреодолимой силы (форс-мажором). 5.3. Исполнитель заверяет и гарантирует, что вправе заключать и исполнять настоящий Договор, надлежащим образом исполняет налоговые обязанности и ведёт учёт в соответствии с законодательством РФ, а также по требованию Заказчика или уполномоченного органа предоставляет подтверждающие документы в срок до 5 (пяти) рабочих дней. 5.4. В случае причинения Заказчику убытков вследствие нарушения гарантий, указанных в п. 5.3, Исполнитель обязан возместить такие убытки в течение 10 (десяти) рабочих дней с даты получения письменного требования Заказчика. 5.5. Стороны подтверждают, что настоящий Договор является гражданско-правовым договором. Исполнитель не подчиняется правилам внутреннего трудового распорядка Заказчика, не включается в штат Заказчика и самостоятельно организует процесс оказания услуг. # 6. СРОК ДЕЙСТВИЯ И РАСТОРЖЕНИЕ [Заголовок раздела «6. СРОК ДЕЙСТВИЯ И РАСТОРЖЕНИЕ»](#6-срок-действия-и-расторжение) 6.1. Договор вступает в силу с даты его заключения. Договор действует бессрочно до его прекращения по основаниям, предусмотренным настоящим Договором или законодательством Российской Федерации. 6.2. Любые изменения и дополнения к Договору действительны в письменной форме, подписанной обеими Сторонами. Согласование текущих задач и приоритетов может производиться в электронной почте или мессенджерах и имеет силу для исполнения. 6.3. Любая из Сторон вправе отказаться от продолжения оказания услуг на следующий месяц, письменно уведомив другую Сторону не позднее чем за 5 (пять) рабочих дней до начала соответствующей месячной итерации. При этом отсутствие аванса за следующий месяц само по себе считается отсутствием подтверждения бронирования следующей итерации. 6.4. В случае досрочного прекращения Договора Исполнитель обязан передать Заказчику фактически созданные и оплаченные результаты оказанных услуг, а Заказчик обязан оплатить фактически оказанные и переданные услуги. Уплаченный аванс за соответствующую месячную итерацию возврату не подлежит. 6.5. Стороны допускают обмен документами по настоящему Договору посредством ЭДО согласно законодательству РФ. Организация ЭДО между Сторонами не отменяет использование иных способов изготовления и обмена документами между Сторонами в рамках обязательств. # 7. ЗАКЛЮЧИТЕЛЬНЫЕ ПОЛОЖЕНИЯ [Заголовок раздела «7. ЗАКЛЮЧИТЕЛЬНЫЕ ПОЛОЖЕНИЯ»](#7-заключительные-положения) 7.1. Настоящий Договор составлен в двух экземплярах, имеющих равную юридическую силу, по одному для каждой Стороны. 7.2. Вопросы, не урегулированные настоящим Договором, регулируются действующим законодательством Российской Федерации. 7.3. Стороны подтверждают, что Исполнитель применяет специальный налоговый режим «Налог на профессиональный доход» (самозанятый) и не является плательщиком НДС. Заказчик не признаётся налоговым агентом по отношению к Исполнителю. # 8. РЕКВИЗИТЫ И ПОДПИСИ СТОРОН [Заголовок раздела «8. РЕКВИЗИТЫ И ПОДПИСИ СТОРОН»](#8-реквизиты-и-подписи-сторон) ## ЗАКАЗЧИК: [Заголовок раздела «ЗАКАЗЧИК:»](#заказчик) ООО “Фирма ВНВ” Адрес: 000000, Россия, г. Город, ул. Улица, д. 0, офис 0. ИНН 0000000000 КПП 000000000 ОГРН 0000000000000 Расчетный счет: 00000000000000000000 в Банк НАЗВАНИЕ Корсчёт: 00000000000000000000 БИК: 000000000 \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_/ И.О. Фамилия/ М.П. ## ИСПОЛНИТЕЛЬ: [Заголовок раздела «ИСПОЛНИТЕЛЬ:»](#исполнитель) И.О. Фамилия Адрес: 000000, обл. Регион, г. Город, ул. Улица, д. 0 ИНН: 000000000000 Расчётный счёт: 00000000000000000000 Наименование: БАНК НАЗВАНИЕ БИК: 000000000 Корсчёт: 00000000000000000000 ИНН: 0000000000 КПП: 000000000 \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ / И.О. Фамилия / # ПРИЛОЖЕНИЕ № 1 – СОСТАВ И СТОИМОСТЬ УСЛУГ [Заголовок раздела «ПРИЛОЖЕНИЕ № 1 – СОСТАВ И СТОИМОСТЬ УСЛУГ»](#приложение--1--состав-и-стоимость-услуг) Вид услуг: разработка программного обеспечения на основе гибкой методологии (Agile). В состав услуг входит: * проектирование, разработка и доработка функциональности Программного обеспечения Заказчика; * исправление дефектов, рефакторинг и интеграция с внешними системами; * подготовка технических решений и оценка вариантов реализации; * ведение и актуализация backlog задач; * еженедельный обзор статуса задач, демонстрация прогресса и уточнение приоритетов; * ведение системы контроля версий (Git): комментирование изменений (commit messages), поддержание читаемой истории правок, регулярная синхронизация с удалённым репозиторием; * развёртывание, тестирование и иные технические действия, необходимые для поставки работающего результата в пределах месячной итерации. Стоимость одной месячной итерации: 50000 (Пятьдесят тысяч) рублей. Порядок оплаты: * аванс за следующий месяц: 25 (двадцать пять) или 50 (пятьдесят) % стоимости месячной итерации; * уплаченный аванс за соответствующую месячную итерацию является подтверждением продолжения действия Договора на следующий месяц, возврату не подлежит и является основным способом подтверждения согласия с результатами оказанных услуг за прошедший отчётный месяц; * оставшаяся часть стоимости: по итогам отчётного месяца в порядке раздела 3 настоящего Договора. Подписи Сторон: Заказчик \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ / И.О. Фамилия Исполнитель \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ / И.О. Фамилия # ПРИЛОЖЕНИЕ № 2 – АКТ ОКАЗАННЫХ УСЛУГ [Заголовок раздела «ПРИЛОЖЕНИЕ № 2 – АКТ ОКАЗАННЫХ УСЛУГ»](#приложение--2--акт-оказанных-услуг) № \_\_\_\_\_\_\_\_ от «\_**» \_\_\_\_\_\_\_\_\_\_ 20** г. к Договору № \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ от \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ 20\_\_\_ г. Заказчик: ООО “Фирма ВНВ” Исполнитель: И.О. Фамилия Отчётный месяц: \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ 20\_\_ г. Исполнитель выполнил и передал Заказчику результаты оказанных услуг по следующим задачам отчётного месяца. Список задач формируется на основании данных согласованного Сторонами трекера задач с указанием ссылок на задачи. 1. Наименование задачи (ссылка \_\_\_\_\_\_\_\_ ) 2. Наименование задачи (ссылка \_\_\_\_\_\_\_\_ ) 3. Наименование задачи (ссылка \_\_\_\_\_\_\_\_ ) Список изменений в системе контроля версий (Git) за отчётный месяц: 1. Ссылка на изменения (commits) за месяц: 2. Количество изменений: Стоимость услуг за отчётный месяц: \_\_\_\_\_\_\_\_ руб. Полученный аванс: \_\_\_\_\_\_\_\_ руб. Оставшаяся часть к оплате: \_\_\_\_\_\_\_\_ руб. Замечания и предложения по задачам, объёму или качеству оказанных услуг, если они есть, учитываются только при планировании следующих итераций и не влияют на оплату и закрытие прошедшего месяца. Подписи Сторон: Заказчик \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ / И.О. Фамилия Исполнитель \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ / И.О. Фамилия # ПРИЛОЖЕНИЕ № 3 – МАНИФЕСТ ГИБКОЙ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ [Заголовок раздела «ПРИЛОЖЕНИЕ № 3 – МАНИФЕСТ ГИБКОЙ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ»](#приложение--3--манифест-гибкой-разработки-программного-обеспечения) к Договору № \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ от \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ 20\_\_\_ г. ## Манифест гибкой разработки программного обеспечения (Agile Manifesto) [Заголовок раздела «Манифест гибкой разработки программного обеспечения (Agile Manifesto)»](#манифест-гибкой-разработки-программного-обеспечения-agile-manifesto) Настоящее Приложение дословно фиксирует Манифест гибкой разработки, определённый экспертами по разработке программного обеспечения, и применяется Сторонами в целях повышения эффективности разработки и снижения рисков при оказании услуг по настоящему Договору. Оригинал манифеста находится по адресу:Содержимое кастомного раздела.
'; }); ``` ## Связанные страницы [Заголовок раздела «Связанные страницы»](#связанные-страницы) * [Товары WooCommerce](../products) * [Установка и первые шаги](../getting-started) ## Материалы и источники [Заголовок раздела «Материалы и источники»](#материалы-и-источники) * [WooCommerce pages (Shop, Cart, Checkout, My Account)](https://woocommerce.com/document/woocommerce-pages/) * [Customizing cart and checkout pages](https://woocommerce.com/document/woocommerce-store-editing/customizing-cart-and-checkout/) * [Product collection block](https://woocommerce.com/document/woocommerce-store-editing/customizing-shop-page-catalog/product-collection-block/) * [WooCommerce blocks](https://woocommerce.com/document/woocommerce-blocks/) * [Set up store pages (WordPress.com course)](https://wordpress.com/support/courses/build-your-store-with-woocommerce/set-up-store-pages/) ---------- # WooCommerce: настройка налогов > Налоги в WooCommerce: ставки, автоматические налоги, НДС для ЕС, настройка для разных юрисдикций. ## Базовая настройка [Заголовок раздела «Базовая настройка»](#базовая-настройка) Включение налогов: 1. **WooCommerce → Настройки → General → Enable taxes** 2. Перейти на вкладку **Tax** ### Основные опции [Заголовок раздела «Основные опции»](#основные-опции) | Параметр | Значение | | ----------------------- | ------------------------------------------------------- | | Prices entered with tax | Yes — если цены вводятся с учётом налога | | Calculate tax based on | Shipping address / Billing address / Store base address | | Shipping tax class | Ставка налога для доставки | | Rounding | Округлять налог на уровне позиции или всего заказа | | Display prices | С налогом или без в каталоге/корзине/чеке | ## Налоговые ставки [Заголовок раздела «Налоговые ставки»](#налоговые-ставки) Настраиваются в **WooCommerce → Настройки → Tax → Standard rates** (и дополнительные классы). Для каждой ставки задаётся: * **Country Code** — код страны (ISO 3166) * **State Code** — код штата/региона * **ZIP/Postcode** — диапазон индексов (например, `10001...10099`) * **City** — город * **Rate %** — процентная ставка * **Tax name** — название налога для чеков * **Priority** — приоритет при пересечении правил * **Compound** — составной налог (налог на налог) ### Импорт/экспорт ставок [Заголовок раздела «Импорт/экспорт ставок»](#импортэкспорт-ставок) CSV-файл со ставками можно импортировать через кнопку **Import CSV** на странице ставок. ## Автоматические налоги: WooCommerce Tax [Заголовок раздела «Автоматические налоги: WooCommerce Tax»](#автоматические-налоги-woocommerce-tax) Плагин [WooCommerce Tax](https://woocommerce.com/products/tax/) (бесплатно) автоматически рассчитывает налоги: * Определяет ставки на основе адреса покупателя * Поддерживает США (state + local), Канаду, ЕС, Великобританию, Австралию * Обновляет ставки автоматически ## НДС для стран ЕС [Заголовок раздела «НДС для стран ЕС»](#ндс-для-стран-ес) Для цифровых товаров, продаваемых в ЕС, действуют особые правила: * НДС взимается по ставке страны **покупателя** * Требуется валидация VAT-номера для B2B-продаж * Плагин [EU VAT Number](https://woocommerce.com/products/eu-vat-number/) помогает с валидацией Подробнее: [Setting up EU VAT rates for digital products](https://woocommerce.com/document/setting-up-eu-vat-rates-for-digital-products/). ## PHP-пример: кастомная налоговая ставка [Заголовок раздела «PHP-пример: кастомная налоговая ставка»](#php-пример-кастомная-налоговая-ставка) ```php add_filter('woocommerce_find_rates', function($matched_tax_rates, $country, $state, $postcode, $city, $tax_class) { // Дополнительная ставка 5% для конкретного региона if ($country === 'US' && $state === 'NY') { $matched_tax_rates['custom_ny'] = [ 'rate' => 5.0, 'label' => 'NY Special Tax', 'shipping' => 'yes', 'compound' => 'no', ]; } return $matched_tax_rates; }, 10, 6); ``` ## Связанные страницы [Заголовок раздела «Связанные страницы»](#связанные-страницы) * [Приём платежей](../payments) * [Управление заказами](../orders) ## Материалы и источники [Заголовок раздела «Материалы и источники»](#материалы-и-источники) * [Setting up taxes in WooCommerce](https://woocommerce.com/document/setting-up-taxes-in-woocommerce/) * [How taxes work in WooCommerce](https://woocommerce.com/document/how-taxes-work-in-woocommerce/) * [WooCommerce Tax guide](https://woocommerce.com/document/woocommerce-shipping-and-tax/woocommerce-tax/) * [Collect sales tax (WordPress.com course)](https://wordpress.com/support/courses/build-your-store-with-woocommerce/collect-sales-tax/) ---------- # WordPress как платформа > Платформа WordPress: выбор формата сайта, запуск, AI Builder, headless-подход и установка на популярных хостингах. ## Что в этом разделе [Заголовок раздела «Что в этом разделе»](#что-в-этом-разделе) Здесь собраны все материалы, которые помогают использовать WordPress как платформу для запуска сайта. Если нужен быстрый старт, типовой сайт, headless-сценарий или пошаговая установка на хостингах, это входная точка. ## Старт и выбор формата [Заголовок раздела «Старт и выбор формата»](#старт-и-выбор-формата) * [Что выбрать: сайт, блог или сайт с блогом](./faq/choose-website-or-blog) * [Как создать сайт: AI, пятишаговый старт и дизайн-план](./faq/create-website-workflow) * [Headless WordPress с Next.js: создание сайта на Jamstack](./faq/headless-wordpress-nextjs) ## Установка на хостингах [Заголовок раздела «Установка на хостингах»](#установка-на-хостингах) * [WordPress на Beget](./faq/wordpress-on-beget) * [WordPress на Timeweb](./faq/wordpress-on-timeweb) * [WordPress на REG.RU](./faq/wordpress-on-regru) * [WordPress на Yandex Cloud](./faq/wordpress-on-yandex-cloud) ## Когда выбирать WordPress [Заголовок раздела «Когда выбирать WordPress»](#когда-выбирать-wordpress) * когда нужен контентный сайт с удобной админкой; * когда важны редактор, темы, плагины и быстрый запуск; * когда проект можно начать как типовой, а потом дорастить; * когда нужен headless-подход с Next.js или другой frontend-архитектурой. ## Связанные материалы [Заголовок раздела «Связанные материалы»](#связанные-материалы) * [WP Stack](../) * [Типовые сайты и проекты](../wordpress/faq/how-to/website-types-and-projects) * [Кастомный сайт или веб-приложение](../pricing/custom-projects/) ## Материалы и источники [Заголовок раздела «Материалы и источники»](#материалы-и-источники) * [WordPress documentation](https://wordpress.org/documentation/) * [How to install WordPress](https://wordpress.org/documentation/article/install-wordpress/) ---------- # Enable Abilities for MCP: готовый набор инструментов для AI-агентов > Плагин Enable Abilities for MCP: 71 готовая Ability в 16 категориях для MCP Adapter — контент, SEO, WooCommerce, Elementor, llms.txt, кэш. Установка, безопасность, сценарии. ## Что делает плагин [Заголовок раздела «Что делает плагин»](#что-делает-плагин) **Enable Abilities for MCP** регистрирует готовый набор WordPress Abilities и открывает их AI-ассистентам через [MCP Adapter](../../../ai/wordpress-mcp-adapter). Вместо того чтобы писать свои abilities с нуля, вы получаете **71 инструмент в 16 категориях** с админкой для включения/выключения каждого. Позиционирование в стеке: * **Abilities API** (ядро WP 6.9+) — реестр возможностей сайта * **MCP Adapter** — транспорт: публикует Abilities как MCP tools для Claude, Cursor, VS Code и других клиентов * **Enable Abilities for MCP** — контентный слой: конкретный набор инструментов для управления сайтом Все abilities плагина идут с метаданными `show_in_rest` и `mcp.public` — они сразу видны в default MCP server без дополнительного кода (см. [публикацию Abilities через MCP](../../../ai/wordpress-mcp-adapter)). ## Требования [Заголовок раздела «Требования»](#требования) * WordPress 6.9 или новее (Abilities API в ядре) * Плагин [MCP Adapter](https://github.com/WordPress/mcp-adapter/releases), установленный и настроенный * PHP 8.0 или новее ## Установка и настройка [Заголовок раздела «Установка и настройка»](#установка-и-настройка) 1. **Плагины → Добавить новый** → найти «Enable Abilities for MCP» → установить и активировать. 2. Перейти в **Настройки → WP Abilities** — там тумблеры для каждой ability, сгруппированные по категориям. 3. Установить и настроить MCP Adapter, подключить AI-клиент по STDIO или HTTP (конфиги — в [практическом руководстве по MCP Adapter](../../../ai/wordpress-mcp-adapter)). ⚠️ **По умолчанию после активации включены почти все abilities.** Перед боевым подключением пройдитесь по списку и выключите лишнее — особенно write-инструменты, которые не нужны вашему сценарию. Деструктивные abilities для Elementor и LearnDash выключены по умолчанию (opt-in). На Multisite плагин можно активировать для всей сети — у каждого сайта своя конфигурация abilities. ## Категории abilities [Заголовок раздела «Категории abilities»](#категории-abilities) | Категория | Что даёт AI-агенту | | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Core** | Информация о сайте, пользователе, окружении (обёртки над core abilities) | | **Read** | Посты с фильтрами (статус, категория, тег, поиск), страницы, категории, теги, комментарии, медиа, пользователи | | **Write** | Создание/обновление/удаление постов и страниц, категории и теги, модерация и ответы на комментарии, загрузка изображений по URL в медиабиблиотеку (с назначением featured image) | | **SEO — Rank Math** | Чтение и обновление метаданных: title, description, focus keyword, canonical, robots, Open Graph | | **SEO — SEOPress** | Чтение/обновление метаданных + content analysis с уровнями влияния и рекомендациями (SEOPress 7.5+) | | **SEO — Yoast** | Чтение/обновление метаданных + получение и парсинг sitemap index | | **Custom Post Types** | Список CPT, чтение/создание/обновление/удаление элементов с таксономиями и meta-полями (ACF, JetEngine и др.) | | **WooCommerce** | Товары (цена, SKU, остатки, вариации), заказы (HPOS-compatible), клиенты | | **The Events Calendar** | События: список с фильтрами по датам/площадке/организатору, создание и обновление | | **Elementor** | Дерево структуры страницы, правка элемента по id (в т.ч. batch), привязка dynamic tags (opt-in) | | **LearnDash** | Курсы, прогресс пользователей, результаты квизов; запись/отписка пользователей (opt-in) | | **JetEngine Options Pages** | Список options pages со схемой полей, чтение и запись значений (включая repeater) | | **Code Snippets** | Управление сниппетами | | **Multilanguage** | Инструменты для мультиязычных сайтов | | **AI Agent Readiness** | Чтение и валидация `llms.txt`, запись с авто-маршрутизацией (SEOPress Pro / виртуальный файл) | | **Utility** | Поиск и замена текста в контенте, статистика сайта, обновление любого meta-поля по ключу (с блоклистом защищённых), очистка кэша | ## Ключевые сценарии [Заголовок раздела «Ключевые сценарии»](#ключевые-сценарии) ### SEO-аудит и правки через AI-агента [Заголовок раздела «SEO-аудит и правки через AI-агента»](#seo-аудит-и-правки-через-ai-агента) Связка read + write abilities закрывает полный цикл SEO-работы агента: 1. Агент читает пост с SEO-метаданными (`ewpa/get-post`) 2. Получает content analysis от SEOPress (`ewpa/get-seopress-content-analysis`) — каждая проверка с уровнем влияния и текстовой рекомендацией 3. Обновляет мету (`ewpa/update-seopress`, `ewpa/update-yoast`, `ewpa/update-rank-math`) 4. С параметром `refresh=true` запускает повторный анализ и проверяет результат Для Yoast дополнительно доступен sitemap index — агент может построить карту всех URL сайта с датами изменений. ### Stale-audit loop и очистка кэша [Заголовок раздела «Stale-audit loop и очистка кэша»](#stale-audit-loop-и-очистка-кэша) Тонкая проблема production: write-abilities, которые правят meta напрямую (`update-seopress`, `update-post-meta`, `elementor-update-element`), **не вызывают `save_post`** — кэш-плагины продолжают отдавать старый HTML, и SEO-аудит показывает устаревшие title/description после правок агента. Ability `ewpa/clear-cache` (с версии 2.0.24) решает это: чистит кэш одного поста (`post_id`, требует `edit_post`) или всего сайта (требует `manage_options`). Автоопределяет WP Rocket, LiteSpeed Cache, W3 Total Cache, WP Super Cache, WP Fastest Cache; при их отсутствии откатывается на объектный кэш WordPress. Про настройку кэширования см. [Кэширование WordPress](../../cache/server-level-cache). ### Управление llms.txt [Заголовок раздела «Управление llms.txt»](#управление-llmstxt) Категория AI Agent Readiness (2 abilities): * `ewpa/get-llms-txt` — читает `llms.txt`, определяет, кто его отдаёт (SEOPress Pro, физический файл, сам плагин, сторонний компонент или никто), и валидирует по спецификации llmstxt.org с конкретными замечаниями (нет H1, нет blockquote-резюме, нет markdown-ссылок, сырой HTML, превышение размера) * `ewpa/update-llms-txt` (opt-in, `manage_options`) — записывает содержимое с авто-маршрутизацией: в опцию SEOPress Pro, если активен (динамические плейсхолдеры продолжают работать), либо в виртуальный `/llms.txt`, который плагин отдаёт через `do_parse_request`. Отказывает, если файл уже обслуживается физически или сторонним плагином Теорию и назначение файла см. [LLMs.txt для AI-агентов](../../../ai/llms-txt-for-ai-agents). ### WooCommerce [Заголовок раздела «WooCommerce»](#woocommerce) Отдельные abilities работают через нативный WooCommerce API (HPOS-compatible, декларировано формально): * товары: список с ценой, SKU, остатками, категориями; деталь с галереей, атрибутами, вариациями; обновление цены, акционной цены, остатков, статуса * заказы: список с клиентом/суммой/статусом/датой, деталь с line items и адресами, смена статуса с опциональной заметкой * клиенты: email, имя, сумма покупок, число заказов Кроме того, секция Custom Post Types автоматически видит товары, заказы, купоны и любые другие CPT с полным доступом к meta-полям (`_price`, `_sku`, `_stock_status` и др.). Общий контекст — в разделе [WooCommerce для WordPress](../../../woocommerce/). ## Модель безопасности [Заголовок раздела «Модель безопасности»](#модель-безопасности) Плагин построен на стандартных механизмах прав WordPress: * каждая ability проверяет capabilities — например, создание поста требует `publish_posts`, правка поста проверяет права на конкретный пост * per-post permission checks: чтение поста требует `current_user_can('read_post', $id)`, а не только общего `read` (закрыт IDOR, найденный в версиях до 2.0.18: низкопривилегированный пользователь с Application Password мог читать чужие черновики и приватные посты по ID) * обновление meta-полей — с блоклистом защищённых внутренних ключей * входные данные санитизируются; плагин полностью проходит WPCS (phpcs) * ошибки прав доступа возвращают описательный `WP_Error` (нет параметра / нет поста / реальный отказ), а не голое «Permission denied» **Рекомендации для production:** * заведите отдельного пользователя для MCP-доступа с минимально необходимой ролью * начинайте с read-only набора, write-abilities включайте точечно * помните: Bearer-токен MCP Adapter аутентифицируется как конкретный WP-пользователь, и его роль определяет потолок прав Общий baseline — в [Базовой безопасности WordPress](../../../websites/security/wordpress-security-basics), модель прав MCP — в [практическом руководстве по MCP Adapter](../../../ai/wordpress-mcp-adapter). ## Расширение своими abilities [Заголовок раздела «Расширение своими abilities»](#расширение-своими-abilities) Плагин регистрирует abilities стандартным API — рядом можно добавить свои: ```php add_action( 'wp_abilities_api_init', function () { wp_register_ability( 'myplugin/get-report', [ 'label' => 'Get sales report', 'description' => 'Returns aggregated sales data for the last 30 days.', 'input_schema' => [ 'type' => 'object' ], 'execute_callback' => 'myplugin_build_report', 'permission_callback' => fn() => current_user_can( 'manage_woocommerce' ), 'meta' => [ 'mcp' => [ 'public' => true ] ], ] ); } ); ``` Кастомные abilities появятся рядом с инструментами плагина в default MCP server. Детали регистрации и публикации — в [WordPress MCP Adapter](../../../ai/wordpress-mcp-adapter). ## Когда плагин нужен, а когда нет [Заголовок раздела «Когда плагин нужен, а когда нет»](#когда-плагин-нужен-а-когда-нет) **Нужен, если:** * подключаете AI-агента к боевому сайту и не хотите писать десятки abilities руками * нужен SEO-контур: аудит меты + правки + повторная проверка * агент должен работать с WooCommerce, Elementor, LearnDash или The Events Calendar * хотите управлять набором инструментов через UI, а не кодом **Не нужен, если:** * достаточно 2–3 собственных abilities — проще зарегистрировать их в своём плагине (см. пример выше) * нужен строго фиксированный контур инструментов — тогда лучше кастомный MCP server с явным списком abilities (схема — в [руководстве по MCP Adapter](../../../ai/wordpress-mcp-adapter)) ## Связанные страницы [Заголовок раздела «Связанные страницы»](#связанные-страницы) * [WordPress MCP Adapter: практический запуск](../../../ai/wordpress-mcp-adapter) — установка адаптера, конфиги клиентов, кастомные серверы * [AI-архитектура WordPress](../../../ai/wp-ai-architecture) — место Abilities API и MCP в экосистеме * [LLMs.txt для AI-агентов](../../../ai/llms-txt-for-ai-agents) — теория и спецификация llms.txt * [Плагины WordPress: основы выбора и установки](../../plugins/plugins-basics) * [SEO-плагины WordPress: сравнение и выбор](../../plugins/seo-plugins) — Rank Math, SEOPress, Yoast, которыми управляет плагин ## Материалы и источники [Заголовок раздела «Материалы и источники»](#материалы-и-источники) * [Enable Abilities for MCP — каталог WordPress.org](https://wordpress.org/plugins/enable-abilities-for-mcp/) * [MCP Adapter — релизы на GitHub](https://github.com/WordPress/mcp-adapter/releases) * [Спецификация llms.txt](https://llmstxt.org/) ---------- # Кэширование в WordPress: обзор > Три вида кэширования в ядре WordPress: страничный кэш, объектный кэш и transients. Как они связаны, когда что использовать, карта подраздела. Кэширование — главный инструмент ускорения WordPress и снижения нагрузки на сервер. В ядре существует три основных вида кэширования, и каждый решает свою задачу. ## Что такое кэш [Заголовок раздела «Что такое кэш»](#что-такое-кэш) Кэш — промежуточный буфер, который хранит часто используемые данные в памяти или на диске и ускоряет их выдачу. Типичные кандидаты на кэширование: * запрос последнего сообщения из внешней сети (Twitter/X, Telegram); * вывод погоды со стороннего сервиса; * выборка последних записей из базы данных; * название сайта и другие опции из базы данных. Пример: если на главной выводится последний твит, не нужно дергать внешний API при каждом посещении. Достаточно одного запроса, результат сохраняется в кэш на заданное время, а следующие посетители получают его мгновенно. ## Три вида кэширования [Заголовок раздела «Три вида кэширования»](#три-вида-кэширования) | Вид | Что хранит | Где реализован | Постоянство | | ------------------------------- | ----------------------------- | ----------------------------------------- | ----------------------------------------- | | [Страничный кэш](./page-cache) | HTML страницы целиком | Плагины (WP Super Cache, Surge, Batcache) | Зависит от плагина | | [Объектный кэш](./object-cache) | Данные произвольного типа | Ядро (`WP_Object_Cache`) | Один запрос; постоянный с Redis/Memcached | | [Transients](./transients) | Данные с временем жизни (TTL) | Ядро (Transients API) | Постоянный: БД или внешний object cache | Все три вида пересекаются и зависят друг от друга: * При включённом страничном кэше до объектного кэша дело часто не доходит — страница отдаётся целиком из статики. * Batcache вообще использует объектный кэш для хранения страниц. * Transients при наличии внешнего объектного кэша (Redis, Memcached) хранят данные в нём, а не в базе. ## Когда что применять [Заголовок раздела «Когда что применять»](#когда-что-применять) **Для большинства сайтов** достаточно страничного кэша — это первое, что стоит сделать при проблемах со скоростью, особенно на дешёвом хостинге. Плагины легко установить и настроить. **Для разработчиков тем и плагинов** важно понимать объектный кэш и transients: ядро само кэширует опции, записи, мета-данные и термины, поэтому не нужно бояться функций `get_option()` и `get_post()` — они не создают лишних запросов к базе. **Для высоких нагрузок** добавляются внешние хранилища (Redis, Memcached) и серверный уровень (Varnish, Nginx FastCGI Cache) — см. [Кэширование WordPress: инфраструктурный уровень](./server-level-cache). ## Страницы подраздела [Заголовок раздела «Страницы подраздела»](#страницы-подраздела) * [Кэширование страниц](./page-cache) — плагины page cache: WP Super Cache, W3 Total Cache, Batcache, Surge, WP Rocket; сравнение и выбор. * [Кэширование объектов](./object-cache) — полный API `WP_Object_Cache`: функции, группы, persistent backends, нюансы опций. * [Transients API](./transients) — транзитное кэширование с TTL и матрица выбора: object cache vs transient vs option. * [Surge](./surge) — zero-config страничный кэш от Konstantin Kovshenin: WP-CLI, 1000–2500 RPS на слабом VPS. ## Материалы и источники [Заголовок раздела «Материалы и источники»](#материалы-и-источники) * [Основы кэширования в WordPress](https://wpmag.ru/2013/keshirovaniye-wordpress/) — Константин Ковшенин, WP Magazine * [Кэширование объектов в WordPress](https://wpmag.ru/2014/keshirovanie-obektov-wordpress/) — Константин Ковшенин, WP Magazine * [Кеширование WordPress: WP Super Cache, WP Rocket, Surge](https://wpcraft.ru/blog/cache-wordpress) — WPCraft ---------- # Кэширование объектов в WordPress > Полный разбор WP_Object_Cache API: wp_cache_get/set/add/replace/delete, группы (глобальные и непостоянные), persistent object cache через Redis/Memcached, особенности опций и autoload. ## Что такое объектный кэш [Заголовок раздела «Что такое объектный кэш»](#что-такое-объектный-кэш) Кэширование объектов (object cache) — встроенный механизм ядра WordPress, который сохраняет данные произвольного типа и отдаёт их при повторных обращениях. Используется для хранения результатов сложных операций: запросов к базе, вычислений, внешних вызовов. Пример без кэша — каждый вызов функции бьёт в базу: ```php function foo() { global $wpdb; return $wpdb->get_results( "SELECT ..." ); } foo(); // SQL! foo(); // SQL! foo(); // SQL! ``` Та же функция с объектным кэшем: ```php function foo() { global $wpdb; $cache = wp_cache_get( 'foo' ); if ( $cache ) { return $cache; } $value = $wpdb->get_results( "SELECT ..." ); wp_cache_add( 'foo', $value ); return $value; } foo(); // SQL! foo(); // cache foo(); // cache ``` В ядре объектный кэш используется практически для всего: опции, записи, страницы, метки, категории, пользователи. Именно поэтому повторные вызовы `get_option()` или `get_post()` в одном запросе не создают лишних запросов к базе. ## Основные функции [Заголовок раздела «Основные функции»](#основные-функции) Кэш реализован классом `WP_Object_Cache`, но работать с ним удобнее через вспомогательные функции. ### wp\_cache\_get() [Заголовок раздела «wp\_cache\_get()»](#wp_cache_get) Читает значение по ключу. Если ключ не найден — возвращает `false`. ```php $value = wp_cache_get( 'key' ); $value = wp_cache_get( 'key', 'my-group' ); ``` Два редких дополнительных параметра: * `$force` — принудительный поиск во внешнем хранилище в обход локального кэша; * `$found` — переменная по ссылке, становится `true`/`false` в зависимости от того, найдено ли значение. Полезно, когда в кэше может лежать легитимный `false`: ```php $value = wp_cache_get( 'key', 'default', false, $found ); if ( ! $found ) { // Ключа точно нет в кэше — регенерируем } ``` ### wp\_cache\_add() [Заголовок раздела «wp\_cache\_add()»](#wp_cache_add) Добавляет значение по ключу. Если ключ уже существует — **ничего не делает** и возвращает `false`. ```php $added = wp_cache_add( 'key', 'value' ); $added = wp_cache_add( 'key', 'value', 'my-group' ); ``` Параметры: `$key`, `$data`, `$group` (по умолчанию `default`), `$expire` (время жизни — работает только в некоторых persistent-плагинах). ### wp\_cache\_set() [Заголовок раздела «wp\_cache\_set()»](#wp_cache_set) Те же параметры, но **перезаписывает** значение, если оно уже есть. Если значения нет — добавляет. ```php wp_cache_set( 'key', 'value', 'my-group' ); ``` ### wp\_cache\_replace() [Заголовок раздела «wp\_cache\_replace()»](#wp_cache_replace) Заменяет **только существующее** значение. Если ключа нет — ничего не добавляет. ```php wp_cache_replace( 'key', 'new-value', 'my-group' ); ``` Логика трёх функций: `add` — только если нет; `set` — в любом случае; `replace` — только если есть. ### wp\_cache\_delete() [Заголовок раздела «wp\_cache\_delete()»](#wp_cache_delete) Удаляет значение по ключу. Вернёт `true`, если значение найдено и удалено. ```php $deleted = wp_cache_delete( 'key', 'my-group' ); ``` ### wp\_cache\_incr() и wp\_cache\_decr() [Заголовок раздела «wp\_cache\_incr() и wp\_cache\_decr()»](#wp_cache_incr-и-wp_cache_decr) Инкремент и декремент числовых значений — для счётчиков: ```php wp_cache_incr( 'key' ); // +1 wp_cache_incr( 'key', 2 ); // +2 wp_cache_incr( 'key', 1, 'my-group' ); wp_cache_decr( 'key' ); // -1 ``` ### wp\_cache\_flush() [Заголовок раздела «wp\_cache\_flush()»](#wp_cache_flush) Сбрасывает **весь** объектный кэш. Использовать с особой осторожностью: на нагруженном сайте полный сброс вызывает всплеск запросов к базе. ## Постоянство кэша [Заголовок раздела «Постоянство кэша»](#постоянство-кэша) По умолчанию объектный кэш в WordPress **непостоянный**: значения живут только в рамках одного запроса, при следующем запросе кэш пуст. Это не бесполезно: за один запрос WordPress вызывает `get_option()` около 500 раз — кэш в памяти схлопывает их до одного обращения к базе. ### Внешний (постоянный) объектный кэш [Заголовок раздела «Внешний (постоянный) объектный кэш»](#внешний-постоянный-объектный-кэш) Постоянный кэш реализуется плагинами, которые подменяют хранилище на внешнее: * [Redis Object Cache](https://wordpress.org/plugins/redis-cache/) — самый популярный сегодня, с экраном диагностики в админке; * [Memcached Object Cache](https://wordpress.org/plugins/memcached/) — классика для highload; * [WordPress Redis Backend](https://github.com/ericmann/wordpress-redis-backend) — альтернативная реализация для Redis. Технически это drop-in `object-cache.php` в `wp-content/`. При выборе хранилища учитывайте, сколько памяти потребуется самым частым объектам — и конфигурируйте сервер с запасом. Проверка наличия внешнего кэша в коде плагина: ```php if ( wp_using_ext_object_cache() ) { wp_cache_set( 'key', 'value' ); } else { update_option( 'key', 'value' ); } ``` С внешним кэшем появляется понятие **локального кэша**: при повторном запросе ключа в рамках одного запроса страницы плагин не дёргает Memcached/Redis повторно, а отдаёт значение из памяти PHP. Параметр `$force` в `wp_cache_get()` позволяет обойти это поведение. ## Группы [Заголовок раздела «Группы»](#группы) Параметр `$group` позволяет использовать один и тот же ключ в разном контексте — фактически это префикс ключа. Группы имеют значение при работе в режиме Multisite и с внешними хранилищами. Группы ядра: `default`, `posts`, `options`, `comment`, `themes`, `plugins`, `users`. ### Глобальные группы [Заголовок раздела «Глобальные группы»](#глобальные-группы) В Multisite к каждому ключу добавляется префикс с ID сайта (аналог префиксов таблиц `wp_3_posts`, `wp_4_posts`). Глобальные группы — исключение: они общие для всей сети. Классический пример — `users`: пользователи хранятся в одной глобальной таблице независимо от сайта. Другие глобальные группы ядра: `themes`, `blog-details`, `site-options`, `site-transient`. Добавить свою глобальную группу: ```php wp_cache_add_global_groups( 'my-global-group' ); ``` ### Непостоянные группы [Заголовок раздела «Непостоянные группы»](#непостоянные-группы) Постоянные группы — те, что пишутся во внешнее хранилище при наличии плагина. По умолчанию постоянны все группы; исключить группу можно так: ```php wp_cache_add_non_persistent_groups( 'my-group' ); ``` Значения такой группы сохраняются только в локальном кэше PHP и не уходят в Redis/Memcached. Непостоянные группы ядра: `comment`, `counts`, `themes`, `plugins`. ## Отключение кэша [Заголовок раздела «Отключение кэша»](#отключение-кэша) При импорте большого объёма данных добавление каждого элемента в кэш — лишняя работа. Отключить добавление на время: ```php wp_suspend_cache_addition( true ); // отключить добавление в кэш // ... импорт тысяч записей ... wp_suspend_cache_addition( false ); // включить обратно ``` Похожая функция `wp_suspend_cache_invalidation()` отключает сброс кэша, но работает только для кэша записей при вызове `clean_post_cache()`. ## Объектный кэш и опции [Заголовок раздела «Объектный кэш и опции»](#объектный-кэш-и-опции) Опции имеют особое отношение с кэшем. При первом вызове `get_option()` ядро выполняет `wp_load_alloptions()` — одним запросом загружает **все** опции с флагом `autoload` в кэш. Первый `get_option()` вызывается ядром ещё до загрузки темы. Поэтому такой код не выполняет ни одного запроса к базе: ```php echo get_option( 'blogdescription' ); if ( get_option( 'comments_open' ) ) { printf( 'На сайте %s комментарии открыты', get_option( 'blogname' ) ); } echo 'Свяжитесь с нами: ' . get_option( 'admin_email' ); ``` Практический вывод: не бойтесь `get_option()`, `bloginfo()` и `get_post_meta()` (использует такой же подход). Советы «убрать обращения к get\_option() для ускорения» — миф, основанный на непонимании кэша. Следствие для архитектуры: опции с `autoload = yes` загружаются при каждом запросе. Не складируйте в autoload-опции большие массивы данных — это замедляет каждый запрос. ## Отладка [Заголовок раздела «Отладка»](#отладка) Статистику обращений к кэшу и потребление памяти по группам показывает плагин [Debug Bar](https://wordpress.org/plugins/debug-bar/). При наличии внешнего кэша Debug Bar покажет каждое обращение к внешнему серверу. Для глубокого изучения механизма смотрите исходник `wp-includes/cache.php` в ядре. ## Материалы и источники [Заголовок раздела «Материалы и источники»](#материалы-и-источники) * [Кэширование объектов в WordPress](https://wpmag.ru/2014/keshirovanie-obektov-wordpress/) — Константин Ковшенин, WP Magazine * [Основы кэширования в WordPress](https://wpmag.ru/2013/keshirovaniye-wordpress/) — Константин Ковшенин, WP Magazine * [Transients API](../transients) — транзитное кэширование с TTL * [Кэширование WordPress: инфраструктурный уровень](../server-level-cache) — OPcache, Varnish, Nginx FastCGI ---------- # Кэширование страниц в WordPress > Страничный кэш (page cache): как работает, плагины WP Super Cache, W3 Total Cache, Batcache, Surge и WP Rocket — сравнение архитектур, мультисерверность, критерии выбора. ## Как работает страничный кэш [Заголовок раздела «Как работает страничный кэш»](#как-работает-страничный-кэш) Для выдачи одной страницы WordPress проделывает много работы: несколько запросов в базу за последними записями, настройками виджетов и темы, активными плагинами, названием сайта, фоном и десятками других данных. Кэширование страниц (page cache) сохраняет результат целиком. При повторном запросе по тому же адресу отдаётся готовая страница из кэша — быстрее и с минимальной нагрузкой на сервер. При изменении записи кэш сбрасывается и пересоздаётся с новыми данными. В ядре WordPress страничный кэш не реализован — но есть все необходимые хуки для реализации на уровне плагинов. Для 80% сайтов статического страничного кэша достаточно, чтобы всё работало быстро. ## Сравнение плагинов [Заголовок раздела «Сравнение плагинов»](#сравнение-плагинов) | Плагин | Хранилище | Архитектура | Мультисерверность | Интерфейс | Для кого | | -------------- | -------------------------------- | ------------------------------------------------------------------------------- | ----------------------- | ------------------------------ | ----------------- | | WP Super Cache | Файловая система | Статические HTML, может отдавать напрямую через Apache/nginx в обход PHP | Сложно (файлы локальны) | Админка | Новички и опытные | | W3 Total Cache | Диск или память | Не сохраняет структуру для отдачи без PHP, зато работает с внешними хранилищами | Да | Админка, очень много настроек | Опытные | | Batcache | Внешний object cache (Memcached) | Страницы в объектном кэше | Да | Только PHP-конфиг, без админки | Профессионалы | | Surge | Файловая система | Drop-in `advanced-cache.php`, zero-config | Сложно | Нет настроек, WP-CLI | Разработчики | | WP Rocket | Файловая система | Page cache + оптимизация фронтенда | Сложно | Админка, максимум автоматики | Все, платно | ### WP Super Cache [Заголовок раздела «WP Super Cache»](#wp-super-cache) [WP Super Cache](https://wordpress.org/plugins/wp-super-cache/) — самый популярный и один из старейших плагинов страничного кэша. Создаёт статические HTML-файлы, а при правильной конфигурации веб-сервер (Apache или nginx) отдаёт их напрямую, вообще минуя PHP. Дополнительно: настройка CDN, поддержка мобильной версии. Подходит и новичкам, и опытным пользователям. Ограничение: файловое хранилище крайне сложно синхронизировать между двумя и более веб-серверами. ### W3 Total Cache [Заголовок раздела «W3 Total Cache»](#w3-total-cache) [W3 Total Cache](https://wordpress.org/plugins/w3-total-cache/) — многоуровневый комбайн: страницы, запросы к базе, объекты, браузерный кэш, сжатие скриптов и стилей, CDN. Хранит кэш и на диске, и в памяти (Memcached, Redis). Ключевое отличие от WP Super Cache: не сохраняет структуру статических файлов, поэтому отдача без PHP невозможна — зато внешние хранилища позволяют легко работать в многосерверной архитектуре. Из-за огромного количества настроек рекомендуется опытным пользователям. ### Batcache [Заголовок раздела «Batcache»](#batcache) [Batcache](https://github.com/Automattic/batcache) — плагин от Automattic с единственной функцией: кэширование страниц, но безупречное. Использует внешнее кэширование объектов (Memcached) для хранения страниц, поэтому легко масштабируется на многосерверную архитектуру. Исторически Batcache был основой кэширования сети WordPress.com: более 40 млн сайтов, 2000+ серверов, миллиарды просмотров страниц в месяц. У плагина нет даже страницы настроек — вся конфигурация в PHP-файле. Сегодня развивается слабо, но остаётся рабочим вариантом для highload-проектов с Memcached. Только для профессиональных разработчиков. ### Surge [Заголовок раздела «Surge»](#surge) [Surge](https://wordpress.org/plugins/surge/) — современный zero-config плагин от Konstantin Kovshenin: статические HTML на диске, автоинвалидация, управление через WP-CLI. В тестах держит 1000–2500 RPS на одноядерном VPS с 1 ГБ RAM. Подробный разбор: [Surge: статический кэш без настроек](../surge). ### WP Rocket [Заголовок раздела «WP Rocket»](#wp-rocket) [WP Rocket](https://wp-rocket.me/) — премиум-плагин, считается одним из самых эффективных решений. Помимо страничного кэша: минификация, lazy load, preload, оптимизация БД, CDN. Подходит и новичкам за счёт автоматических настроек, и профессионалам за счёт гибкости. ## Как выбрать [Заголовок раздела «Как выбрать»](#как-выбрать) Зависит от размера сайта, возможностей хостинга и опыта: * **Начинаете с нуля** → WP Super Cache (бесплатно, просто) или WP Rocket (платно, максимум из коробки). * **Нужна тонкая настройка и внешние хранилища** → W3 Total Cache. * **VPS, инфраструктура как код, WP-CLI** → Surge. * **Мультисерверный highload с Memcached** → Batcache. * **Магазин WooCommerce** → см. [Кэширование в WooCommerce](../../../woocommerce/caching) — динамические страницы (корзина, чекаут, кабинет) исключаются из кэша. ## Гибридные подходы [Заголовок раздела «Гибридные подходы»](#гибридные-подходы) Статический кэш страниц может комбинироваться с динамическими методами: часть контента отдаётся статикой, часть рендерится на клиенте (CSR), часть на сервере (SSR). Гибридные схемы — сложная инженерная тема уровня highload-архитектуры: нужно чётко понимать, что кэшируется где и как инвалидируется. Для большинства проектов достаточно простого страничного кэша + исключений для динамических страниц. ## Материалы и источники [Заголовок раздела «Материалы и источники»](#материалы-и-источники) * [Основы кэширования в WordPress](https://wpmag.ru/2013/keshirovaniye-wordpress/) — Константин Ковшенин, WP Magazine (сравнение WP Super Cache, W3 Total Cache, Batcache) * [Кеширование WordPress: WP Super Cache, WP Rocket, Surge](https://wpcraft.ru/blog/cache-wordpress) — WPCraft * [Кэширование WordPress: инфраструктурный уровень](../server-level-cache) — браузерный кэш, OPcache, Varnish, многоуровневая схема ---------- # Кэширование WordPress: инфраструктурный уровень > Кэширование на уровне инфраструктуры: браузерный кэш, OPcache, Varnish, Nginx FastCGI — многоуровневая схема и выбор стратегии для WordPress. Помимо трёх механизмов кэширования в ядре ([страничный кэш](../page-cache), [объектный кэш](../object-cache), [transients](../transients)), скорость WordPress зависит от инфраструктурного уровня: браузера, PHP-движка и сервера перед веб-сервером. Для немедленного эффекта установите плагин страничного кэша: [WP Rocket](https://wp-rocket.me/) (премиум), [WP Super Cache](https://wordpress.org/plugins/wp-super-cache/) (бесплатный) или [Surge](https://wordpress.org/plugins/surge/) (бесплатный, zero-config). Подробнее об общих принципах оптимизации — [Оптимизация WordPress](../../../websites/performance/optimization). Общая картина всех видов кэша сайта, включая сравнение с другими платформами (Bitrix, Astro, Next.js): [Кэширование сайтов](../../../websites/performance/cache). ## Браузерный кэш [Заголовок раздела «Браузерный кэш»](#браузерный-кэш) Браузерный кэш снижает количество запросов к серверу за счёт хранения статических файлов (изображения, CSS, JS) на компьютере посетителя. Сервер отправляет заголовки `Cache-Control` (особенно `max-age`) и `Expires`, а браузер сверяется через [ETag](https://en.wikipedia.org/wiki/HTTP_ETag) вместо повторной загрузки — сервер отвечает `304 Not Modified` вместо `200 OK` с телом файла. ### Пример заголовков в `.htaccess` [Заголовок раздела «Пример заголовков в .htaccess»](#пример-заголовков-в-htaccess) ```apache