Обновление контента на сайте
Обновление контента — рутинная задача, которая становится проблемой без правильного процесса. Прямая правка в production без тестирования — источник регрессий. Обновление через редактора CMS — правильный подход.
Структура процесса обновления
Через CMS (предпочтительно): Редактор меняет контент в Admin Panel → публикует → webhook вызывает ISR-регенерацию → страница обновляется без деплоя.
Через Git (для структурных изменений): Изменение в branch → review → merge → CI/CD → деплой.
Типы обновлений и сложность
| Тип обновления | Исполнитель | Время |
|---|---|---|
| Текст страницы, заголовки | Контент-менеджер в CMS | 5–30 мин |
| Замена изображений | Контент-менеджер | 10–20 мин |
| Добавление новой страницы | Контент-менеджер | 30–60 мин |
| Изменение структуры меню | Разработчик или CMS | 30 мин – 2 часа |
| Изменение секции лендинга | Разработчик | 2–4 часа |
| Новый блок/компонент | Разработчик | 1–3 дня |
Обновление статического контента (Markdown-файлы)
Для сайтов на Docusaurus/VitePress/Nextra — редактирование файлов напрямую через GitHub UI или Netlify CMS:
# Локально
git pull origin main
# Редактируем файл
vim content/blog/2024-new-post.md
git add content/blog/2024-new-post.md
git commit -m "content: add blog post about X"
git push origin main
# CI/CD автоматически публикует
Netlify/Decap CMS для Git-based сайтов
# public/admin/config.yml
backend:
name: github
repo: my-org/my-site
branch: main
media_folder: public/images
public_folder: /images
collections:
- name: blog
label: Blog Posts
folder: content/blog
create: true
fields:
- { name: title, label: Title, widget: string }
- { name: date, label: Date, widget: datetime }
- { name: body, label: Body, widget: markdown }
Массовое обновление через скрипт
// Обновление цен в e-commerce через API CMS
async function bulkUpdatePrices(csvPath: string) {
const prices = await readCsv(csvPath); // { sku, newPrice }[]
for (const { sku, newPrice } of prices) {
const entry = await cmsClient.entries.getBy('sku', sku);
if (!entry) {
console.warn(`Not found: ${sku}`);
continue;
}
await cmsClient.entries.update(entry.id, { price: newPrice });
console.log(`Updated ${sku}: ${newPrice}`);
}
}
Расписание обслуживания контента
Для регулярно обновляемых сайтов — еженедельный или ежемесячный контент-спринт: аудит устаревших страниц, обновление дат, проверка битых ссылок.
# Проверка битых ссылок
npx broken-link-checker https://mysite.com --recursive --exclude-external







