[{"data":1,"prerenderedAt":1395},["ShallowReactive",2],{"blog-post-ru-headless-cms-dlya-nuxt":3,"blog-list-ru":1289},{"id":4,"title":5,"body":6,"category":1259,"cover":1260,"date":1261,"description":12,"excerpt":1262,"extension":1263,"faq":1264,"featured":1281,"meta":1282,"metaDescription":1283,"metaTitle":1284,"navigation":531,"path":1285,"readingMinutes":973,"seo":1286,"slug":1287,"stem":1287,"updated":1261,"__hash__":1288},"blogRu/headless-cms-dlya-nuxt.md","Headless CMS для Nuxt: @nuxt/content, Strapi или WordPress",{"type":7,"value":8,"toc":1248},"minimark",[9,13,16,21,24,27,30,33,37,40,43,55,62,69,153,156,160,337,341,350,357,434,440,459,476,483,489,493,496,499,502,609,693,700,781,792,811,827,832,836,839,842,898,986,989,1005,1024,1029,1033,1036,1139,1142,1146,1149,1152,1155,1158,1161,1175,1192,1196,1202,1208,1214,1220,1226,1232,1238,1244],[10,11,12],"p",{},"Вопрос «какую headless CMS поставить к Nuxt» я слышу на каждом втором проекте. И каждый раз ответ разный: зависит от того, кто правит контент, насколько часто, сколько типов страниц и есть ли бюджет на отдельный бэкенд. В 2026 году выбор стал богаче, но и запутаннее. Разберу честно, без маркетинга.",[10,14,15],{},"Я Евгений Волков, fullstack-разработчик, и для evolkov.tech я выбрал @nuxt/content: блог живёт прямо в репозитории в markdown-файлах, без отдельного сервера. У клиентских проектов другой контекст, и там выбор другой. Ниже разложу по полочкам все основные варианты headless CMS для Nuxt: когда каждый из них имеет смысл, а когда нет.",[17,18,20],"h2",{"id":19},"что-такое-headless-cms-и-чем-она-отличается-от-wordpress-монолита","Что такое headless CMS и чем она отличается от WordPress-монолита",[10,22,23],{},"Классический WordPress это монолит: бэкенд (PHP, MySQL, медиатека) и фронтенд (шаблоны, темы) живут в одном приложении. Ты ставишь тему, пишешь в редакторе, нажимаешь «Опубликовать». WP сам генерирует HTML и отдаёт браузеру. Просто, но ограниченно.",[10,25,26],{},"Headless CMS делает одно: хранит контент и отдаёт его через API. Никаких шаблонов, никакого встроенного рендеринга. Nuxt на фронтенде делает запрос (REST или GraphQL), получает данные в JSON и сам решает, как нарисовать страницу. Контент и отображение полностью разделены.",[10,28,29],{},"Зачем это нужно. Во-первых, скорость. Nuxt SSR и prerender рендерит страницы на сервере и отдаёт краулеру готовый HTML, поэтому SEO работает без JavaScript в браузере. Во-вторых, гибкость фронта: не подстраиваешься под ограничения темы, делаешь ровно тот дизайн и ту логику, которую нужно. В-третьих, контент-модель проектируешь под свою задачу, а не под то, что придумал авторов плагина.",[10,31,32],{},"Платить приходится сложностью. Два отдельных приложения: два деплоя, два хостинга, два места, где что-то может сломаться.",[17,34,36],{"id":35},"зачем-headless-именно-с-nuxt","Зачем headless именно с Nuxt",[10,38,39],{},"Nuxt особенно выгоден в связке с headless, потому что решает основную проблему: SEO.",[10,41,42],{},"Фронтенд, который строит страницы из API-данных, по умолчанию рискует стать SPA без серверного рендеринга: поисковик увидит пустую страницу. Nuxt закрывает это через SSR или prerender: он запрашивает данные из CMS на сервере (или на билде), строит HTML и отдаёт краулеру готовый результат. Яндекс и Google оба получают полный текст.",[10,44,45,46,50,51,54],{},"Второй плюс: ",[47,48,49],"code",{},"useFetch"," и ",[47,52,53],{},"useAsyncData"," в Nuxt удобно работают с любым API без дополнительных настроек. GraphQL-клиент или REST подключается в несколько строк. Реактивность Vue обновит компоненты, когда данные придут, без лишнего кода.",[10,56,57,58,61],{},"Третий плюс: ",[47,59,60],{},"@nuxt/content"," это вообще встроенный движок для контента, без внешних сервисов. Об этом ниже.",[10,63,64,65,68],{},"Есть ещё один аргумент, который редко упоминают. Когда фронт и бэкенд разделены, можно независимо кешировать каждый слой. Nuxt-фронт с ",[47,66,67],{},"routeRules: { prerender: true }"," отдаёт статику с CDN за миллисекунды. Strapi или WordPress при этом могут стоять на более медленном хостинге, и это не скажется на времени первого байта для пользователя. На монолитном WordPress такой разделённой стратегии нет: скорость фронта зависит от скорости PHP-рендеринга.",[70,71,76],"pre",{"className":72,"code":73,"language":74,"meta":75,"style":75},"language-ts shiki shiki-themes github-light github-dark","// nuxt.config.ts: prerender всех страниц блога, SSR для динамики\nexport default defineNuxtConfig({\n  routeRules: {\n    '/blog/**': { prerender: true },\n    '/account/**': { ssr: true },\n  },\n})\n","ts","",[47,77,78,87,105,111,128,141,147],{"__ignoreMap":75},[79,80,83],"span",{"class":81,"line":82},"line",1,[79,84,86],{"class":85},"sJ8bj","// nuxt.config.ts: prerender всех страниц блога, SSR для динамики\n",[79,88,90,94,97,101],{"class":81,"line":89},2,[79,91,93],{"class":92},"szBVR","export",[79,95,96],{"class":92}," default",[79,98,100],{"class":99},"sScJk"," defineNuxtConfig",[79,102,104],{"class":103},"sVt8B","({\n",[79,106,108],{"class":81,"line":107},3,[79,109,110],{"class":103},"  routeRules: {\n",[79,112,114,118,121,125],{"class":81,"line":113},4,[79,115,117],{"class":116},"sZZnC","    '/blog/**'",[79,119,120],{"class":103},": { prerender: ",[79,122,124],{"class":123},"sj4cs","true",[79,126,127],{"class":103}," },\n",[79,129,131,134,137,139],{"class":81,"line":130},5,[79,132,133],{"class":116},"    '/account/**'",[79,135,136],{"class":103},": { ssr: ",[79,138,124],{"class":123},[79,140,127],{"class":103},[79,142,144],{"class":81,"line":143},6,[79,145,146],{"class":103},"  },\n",[79,148,150],{"class":81,"line":149},7,[79,151,152],{"class":103},"})\n",[10,154,155],{},"Это позволяет получить лучшее из двух миров: статический CDN-HTML для краулера и SEO, живой сервер для авторизованных пользователей.",[17,157,159],{"id":158},"варианты-headless-cms-для-nuxt-обзорная-таблица","Варианты headless CMS для Nuxt: обзорная таблица",[161,162,163,191],"table",{},[164,165,166],"thead",{},[167,168,169,173,176,179,182,185,188],"tr",{},[170,171,172],"th",{},"Решение",[170,174,175],{},"Тип",[170,177,178],{},"Где хостится",[170,180,181],{},"Кто правит контент",[170,183,184],{},"Порог",[170,186,187],{},"Цена",[170,189,190],{},"Когда брать",[192,193,194,220,245,270,292,315],"tbody",{},[167,195,196,202,205,208,211,214,217],{},[197,198,199],"td",{},[200,201,60],"strong",{},[197,203,204],{},"Встроенный в Nuxt",[197,206,207],{},"Вместе с фронтом",[197,209,210],{},"Разработчик (markdown)",[197,212,213],{},"Низкий",[197,215,216],{},"Бесплатно",[197,218,219],{},"Блог, докстех, личный сайт",[167,221,222,227,230,233,236,239,242],{},[197,223,224],{},[200,225,226],{},"Strapi",[197,228,229],{},"Self-hosted headless",[197,231,232],{},"Свой сервер / VPS",[197,234,235],{},"Редактор через UI",[197,237,238],{},"Средний",[197,240,241],{},"Open-source бесплатно",[197,243,244],{},"Проект с нетехническим редактором",[167,246,247,252,255,258,261,264,267],{},[197,248,249],{},[200,250,251],{},"WordPress headless",[197,253,254],{},"Self-hosted",[197,256,257],{},"Свой хостинг / WP-хостинг",[197,259,260],{},"Редактор (уже знаком с WP)",[197,262,263],{},"Низкий для редактора",[197,265,266],{},"Бесплатно (хостинг платный)",[197,268,269],{},"Клиент уже на WP / богатые плагины",[167,271,272,277,279,282,285,287,289],{},[197,273,274],{},[200,275,276],{},"Directus",[197,278,254],{},[197,280,281],{},"Свой сервер",[197,283,284],{},"Любой через UI",[197,286,238],{},[197,288,241],{},[197,290,291],{},"Надстройка над существующей БД",[167,293,294,299,302,305,307,309,312],{},[197,295,296],{},[200,297,298],{},"Sanity",[197,300,301],{},"Cloud SaaS",[197,303,304],{},"Sanity cloud",[197,306,235],{},[197,308,213],{},[197,310,311],{},"Бесплатно до лимита, дальше $99+/мес",[197,313,314],{},"Большая команда, нет DevOps",[167,316,317,322,324,327,329,331,334],{},[197,318,319],{},[200,320,321],{},"Contentful",[197,323,301],{},[197,325,326],{},"Contentful cloud",[197,328,235],{},[197,330,213],{},[197,332,333],{},"Бесплатно до лимита, дальше $300+/мес",[197,335,336],{},"Enterprise, много локалей",[17,338,340],{"id":339},"nuxtcontent-когда-отдельная-cms-не-нужна-вообще","@nuxt/content: когда отдельная CMS не нужна вообще",[10,342,343,345,346,349],{},[47,344,60],{}," это модуль, встроенный в экосистему Nuxt. Никакого отдельного сервера, никакой базы данных. Контент лежит в папке ",[47,347,348],{},"content/"," в репозитории: markdown-файлы, YAML, JSON, CSV. Nuxt читает их на сборке или в рантайме, отдаёт через встроенный API, и ты строишь страницы прямо из этих данных.",[10,351,352,353,356],{},"Этот самый блог на evolkov.tech работает именно так. Пишу статью в ",[47,354,355],{},".md","-файле, коммичу в Git, деплой подхватывает изменения автоматически.",[70,358,360],{"className":72,"code":359,"language":74,"meta":75,"style":75},"// pages/blog/[slug].vue\nconst { data: article } = await useAsyncData(route.path, () =>\n  queryCollection('blogRu').path(route.path).first()\n)\n",[47,361,362,367,403,429],{"__ignoreMap":75},[79,363,364],{"class":81,"line":82},[79,365,366],{"class":85},"// pages/blog/[slug].vue\n",[79,368,369,372,375,379,382,385,388,391,394,397,400],{"class":81,"line":89},[79,370,371],{"class":92},"const",[79,373,374],{"class":103}," { ",[79,376,378],{"class":377},"s4XuR","data",[79,380,381],{"class":103},": ",[79,383,384],{"class":123},"article",[79,386,387],{"class":103}," } ",[79,389,390],{"class":92},"=",[79,392,393],{"class":92}," await",[79,395,396],{"class":99}," useAsyncData",[79,398,399],{"class":103},"(route.path, () ",[79,401,402],{"class":92},"=>\n",[79,404,405,408,411,414,417,420,423,426],{"class":81,"line":107},[79,406,407],{"class":99},"  queryCollection",[79,409,410],{"class":103},"(",[79,412,413],{"class":116},"'blogRu'",[79,415,416],{"class":103},").",[79,418,419],{"class":99},"path",[79,421,422],{"class":103},"(route.path).",[79,424,425],{"class":99},"first",[79,427,428],{"class":103},"()\n",[79,430,431],{"class":81,"line":113},[79,432,433],{"class":103},")\n",[10,435,436,437,439],{},"Вот и всё. Никакого API-ключа, никакого внешнего сервиса, никакого ",[47,438,49],{}," к стороннему хосту.",[441,442,443],"pros",{},[444,445,446,450,453,456],"ul",{},[447,448,449],"li",{},"Нулевые накладные расходы: нет отдельного сервера, нет лишнего хостинга, нет API-токенов.",[447,451,452],{},"Контент в Git: история изменений, ветки, пул-реквесты, всё привычное.",[447,454,455],{},"Встроенный поиск, навигация, компоненты MDC прямо в markdown.",[447,457,458],{},"Работает в prerender: на сборке Nuxt генерит все страницы в статику, и дальше Caddy или CDN раздают чистый HTML.",[460,461,462],"cons",{},[444,463,464,467,470,473],{},[447,465,466],{},"Контент правит тот, кто умеет в Git и markdown. Нетехническому редактору некомфортно.",[447,468,469],{},"Нет визуального редактора из коробки (есть Nuxt Studio, но это отдельная платная история).",[447,471,472],{},"Не подходит для динамического контента, зависящего от пользователя или внешних данных в реальном времени.",[447,474,475],{},"Масштаб ограничен: тысячи страниц с тяжёлыми активами лучше хранить в нормальной БД.",[10,477,478,479,482],{},"Отдельный плюс @nuxt/content в том, что контент версионируется вместе с кодом. Откат к предыдущей версии статьи делается через ",[47,480,481],{},"git revert",". Ветка для ревью нового материала это обычный pull request. Для небольших команд, где контент и код пишет один человек, это удобнее любой CMS с историей версий внутри базы данных.",[10,484,485,488],{},[200,486,487],{},"Когда брать:"," блог, документация, маркетинговый сайт, личное портфолио, лендинг. Если контент пишет разработчик и не нужен нетехнический редактор.",[17,490,492],{"id":491},"strapi-nuxt-когда-нужна-полноценная-админка","Strapi + Nuxt: когда нужна полноценная админка",[10,494,495],{},"Strapi это open-source headless CMS на Node.js, MIT-лицензия, self-hosted. Ставишь на свой VPS, запускаешь, и получаешь REST и GraphQL API плюс веб-интерфейс для редактора. В 2026 году актуальна версия v5, которая принесла упрощённую структуру API (более плоский JSON), новый Plugin SDK и экспериментальную AI-генерацию типов контента.",[10,497,498],{},"Принцип работы: в Strapi Content Type Builder создаёшь типы данных (статья, страница, товар), определяешь поля. Strapi сам создаёт таблицы в базе (PostgreSQL, MySQL, SQLite) и генерирует REST/GraphQL-эндпоинты. Редактор входит в админку и правит контент через обычный UI.",[10,500,501],{},"Nuxt подключается к Strapi через REST или GraphQL.",[70,503,505],{"className":72,"code":504,"language":74,"meta":75,"style":75},"// composables/useStrapi.ts\nconst config = useRuntimeConfig()\n\nexport const fetchArticles = () =>\n  $fetch(`${config.public.strapiUrl}/api/articles?populate=*`, {\n    headers: { Authorization: `Bearer ${config.public.strapiToken}` },\n  })\n",[47,506,507,512,527,533,550,580,604],{"__ignoreMap":75},[79,508,509],{"class":81,"line":82},[79,510,511],{"class":85},"// composables/useStrapi.ts\n",[79,513,514,516,519,522,525],{"class":81,"line":89},[79,515,371],{"class":92},[79,517,518],{"class":123}," config",[79,520,521],{"class":92}," =",[79,523,524],{"class":99}," useRuntimeConfig",[79,526,428],{"class":103},[79,528,529],{"class":81,"line":107},[79,530,532],{"emptyLinePlaceholder":531},true,"\n",[79,534,535,537,540,543,545,548],{"class":81,"line":113},[79,536,93],{"class":92},[79,538,539],{"class":92}," const",[79,541,542],{"class":99}," fetchArticles",[79,544,521],{"class":92},[79,546,547],{"class":103}," () ",[79,549,402],{"class":92},[79,551,552,555,557,560,563,566,569,571,574,577],{"class":81,"line":130},[79,553,554],{"class":99},"  $fetch",[79,556,410],{"class":103},[79,558,559],{"class":116},"`${",[79,561,562],{"class":103},"config",[79,564,565],{"class":116},".",[79,567,568],{"class":103},"public",[79,570,565],{"class":116},[79,572,573],{"class":103},"strapiUrl",[79,575,576],{"class":116},"}/api/articles?populate=*`",[79,578,579],{"class":103},", {\n",[79,581,582,585,588,590,592,594,596,599,602],{"class":81,"line":143},[79,583,584],{"class":103},"    headers: { Authorization: ",[79,586,587],{"class":116},"`Bearer ${",[79,589,562],{"class":103},[79,591,565],{"class":116},[79,593,568],{"class":103},[79,595,565],{"class":116},[79,597,598],{"class":103},"strapiToken",[79,600,601],{"class":116},"}`",[79,603,127],{"class":103},[79,605,606],{"class":81,"line":149},[79,607,608],{"class":103},"  })\n",[70,610,614],{"className":611,"code":612,"language":613,"meta":75,"style":75},"language-graphql shiki shiki-themes github-light github-dark","# Запрос статей через GraphQL\nquery {\n  articles(sort: \"publishedAt:desc\", pagination: { limit: 10 }) {\n    data {\n      id\n      attributes {\n        title\n        slug\n        excerpt\n        publishedAt\n      }\n    }\n  }\n}\n","graphql",[47,615,616,621,626,631,636,641,646,651,657,663,669,675,681,687],{"__ignoreMap":75},[79,617,618],{"class":81,"line":82},[79,619,620],{},"# Запрос статей через GraphQL\n",[79,622,623],{"class":81,"line":89},[79,624,625],{},"query {\n",[79,627,628],{"class":81,"line":107},[79,629,630],{},"  articles(sort: \"publishedAt:desc\", pagination: { limit: 10 }) {\n",[79,632,633],{"class":81,"line":113},[79,634,635],{},"    data {\n",[79,637,638],{"class":81,"line":130},[79,639,640],{},"      id\n",[79,642,643],{"class":81,"line":143},[79,644,645],{},"      attributes {\n",[79,647,648],{"class":81,"line":149},[79,649,650],{},"        title\n",[79,652,654],{"class":81,"line":653},8,[79,655,656],{},"        slug\n",[79,658,660],{"class":81,"line":659},9,[79,661,662],{},"        excerpt\n",[79,664,666],{"class":81,"line":665},10,[79,667,668],{},"        publishedAt\n",[79,670,672],{"class":81,"line":671},11,[79,673,674],{},"      }\n",[79,676,678],{"class":81,"line":677},12,[79,679,680],{},"    }\n",[79,682,684],{"class":81,"line":683},13,[79,685,686],{},"  }\n",[79,688,690],{"class":81,"line":689},14,[79,691,692],{},"}\n",[10,694,695,696,699],{},"Есть официальный модуль ",[47,697,698],{},"@nuxtjs/strapi",", который упрощает интеграцию до пары строк конфига.",[70,701,703],{"className":72,"code":702,"language":74,"meta":75,"style":75},"// nuxt.config.ts: подключение через официальный модуль\nexport default defineNuxtConfig({\n  modules: ['@nuxtjs/strapi'],\n  strapi: {\n    url: process.env.STRAPI_URL || 'http://localhost:1337',\n    prefix: '/api',\n    version: 'v5',\n  },\n})\n",[47,704,705,710,720,731,736,753,763,773,777],{"__ignoreMap":75},[79,706,707],{"class":81,"line":82},[79,708,709],{"class":85},"// nuxt.config.ts: подключение через официальный модуль\n",[79,711,712,714,716,718],{"class":81,"line":89},[79,713,93],{"class":92},[79,715,96],{"class":92},[79,717,100],{"class":99},[79,719,104],{"class":103},[79,721,722,725,728],{"class":81,"line":107},[79,723,724],{"class":103},"  modules: [",[79,726,727],{"class":116},"'@nuxtjs/strapi'",[79,729,730],{"class":103},"],\n",[79,732,733],{"class":81,"line":113},[79,734,735],{"class":103},"  strapi: {\n",[79,737,738,741,744,747,750],{"class":81,"line":130},[79,739,740],{"class":103},"    url: process.env.",[79,742,743],{"class":123},"STRAPI_URL",[79,745,746],{"class":92}," ||",[79,748,749],{"class":116}," 'http://localhost:1337'",[79,751,752],{"class":103},",\n",[79,754,755,758,761],{"class":81,"line":143},[79,756,757],{"class":103},"    prefix: ",[79,759,760],{"class":116},"'/api'",[79,762,752],{"class":103},[79,764,765,768,771],{"class":81,"line":149},[79,766,767],{"class":103},"    version: ",[79,769,770],{"class":116},"'v5'",[79,772,752],{"class":103},[79,774,775],{"class":81,"line":653},[79,776,146],{"class":103},[79,778,779],{"class":81,"line":659},[79,780,152],{"class":103},[10,782,783,784,787,788,791],{},"Strapi запускается рядом с Nuxt на одном VPS или на отдельном сервере. Для небольших проектов удобен вариант «всё на одной машине»: Caddy проксирует ",[47,785,786],{},"api.example.com"," на порт 1337 (Strapi) и ",[47,789,790],{},"example.com"," на порт 3000 (Nuxt). При росте трафика Strapi выносится на отдельный инстанс, а Nuxt масштабируется независимо.",[441,793,794],{},[444,795,796,799,802,805,808],{},[447,797,798],{},"Полноценный визуальный редактор: нетехнический менеджер справится сам.",[447,800,801],{},"Гибкая модель данных: создаёшь любые типы, любые связи между ними.",[447,803,804],{},"Полный контроль над данными: своя база, свой сервер, никакого vendor lock-in.",[447,806,807],{},"REST и GraphQL из коробки, роли и права доступа, i18n для мультиязычности.",[447,809,810],{},"Активное сообщество, хорошая документация, официальный Nuxt-модуль.",[460,812,813],{},[444,814,815,818,821,824],{},[447,816,817],{},"Нужен отдельный Node.js-сервер. Это лишний хостинг, лишний деплой, лишние обновления.",[447,819,820],{},"Strapi 5 поломал совместимость со Strapi 4. Если делаешь новый проект, сразу на 5, но при миграции готовься к ручной работе.",[447,822,823],{},"При большой нагрузке потребуется настройка кеша и масштабирование.",[447,825,826],{},"Enterprise-фичи (SSO, аудит-лог) платные.",[10,828,829,831],{},[200,830,487],{}," проект с нетехническим редактором, сложная модель данных (несколько типов контента со связями), нужны роли и права. Типичный кейс: корпоративный сайт, блог с несколькими авторами, каталог.",[17,833,835],{"id":834},"wordpress-headless-nuxt-когда-клиент-уже-на-wordpress","WordPress headless + Nuxt: когда клиент уже на WordPress",[10,837,838],{},"WordPress headless: WordPress в роли CMS-бэкенда, Nuxt в роли фронтенда. Никаких тем, никаких PHP-шаблонов. WordPress хранит контент и отдаёт его через REST API (встроен в WP 4.7+) или GraphQL (через плагин WPGraphQL). Nuxt делает запрос и рендерит страницу.",[10,840,841],{},"В 2026 году это рабочая и даже mainstream-архитектура. WPGraphQL 2.x принёс автоматические persisted queries и кеширующие директивы, WordPress 6.7 имеет зрелый REST API. Если у клиента уже есть работающий WP-сайт с накопленным контентом, мигрировать его в Strapi сложнее, чем кажется: нужно перегнать все посты, категории, медиафайлы и пересобрать типы данных вручную. Иногда проще оставить WP как бэкенд и просто поменять фронтенд.",[70,843,845],{"className":72,"code":844,"language":74,"meta":75,"style":75},"// Пример: получение постов через WP REST API\nconst { data: posts } = await useAsyncData('posts', () =>\n  $fetch('https://backend.example.com/wp-json/wp/v2/posts?_embed&per_page=10')\n)\n",[47,846,847,852,883,894],{"__ignoreMap":75},[79,848,849],{"class":81,"line":82},[79,850,851],{"class":85},"// Пример: получение постов через WP REST API\n",[79,853,854,856,858,860,862,865,867,869,871,873,875,878,881],{"class":81,"line":89},[79,855,371],{"class":92},[79,857,374],{"class":103},[79,859,378],{"class":377},[79,861,381],{"class":103},[79,863,864],{"class":123},"posts",[79,866,387],{"class":103},[79,868,390],{"class":92},[79,870,393],{"class":92},[79,872,396],{"class":99},[79,874,410],{"class":103},[79,876,877],{"class":116},"'posts'",[79,879,880],{"class":103},", () ",[79,882,402],{"class":92},[79,884,885,887,889,892],{"class":81,"line":107},[79,886,554],{"class":99},[79,888,410],{"class":103},[79,890,891],{"class":116},"'https://backend.example.com/wp-json/wp/v2/posts?_embed&per_page=10'",[79,893,433],{"class":103},[79,895,896],{"class":81,"line":113},[79,897,433],{"class":103},[70,899,901],{"className":611,"code":900,"language":613,"meta":75,"style":75},"# Через WPGraphQL\nquery GetPosts {\n  posts(first: 10) {\n    nodes {\n      id\n      title\n      slug\n      date\n      excerpt\n      featuredImage {\n        node {\n          sourceUrl\n        }\n      }\n    }\n  }\n}\n",[47,902,903,908,913,918,923,927,932,937,942,947,952,957,962,967,971,976,981],{"__ignoreMap":75},[79,904,905],{"class":81,"line":82},[79,906,907],{},"# Через WPGraphQL\n",[79,909,910],{"class":81,"line":89},[79,911,912],{},"query GetPosts {\n",[79,914,915],{"class":81,"line":107},[79,916,917],{},"  posts(first: 10) {\n",[79,919,920],{"class":81,"line":113},[79,921,922],{},"    nodes {\n",[79,924,925],{"class":81,"line":130},[79,926,640],{},[79,928,929],{"class":81,"line":143},[79,930,931],{},"      title\n",[79,933,934],{"class":81,"line":149},[79,935,936],{},"      slug\n",[79,938,939],{"class":81,"line":653},[79,940,941],{},"      date\n",[79,943,944],{"class":81,"line":659},[79,945,946],{},"      excerpt\n",[79,948,949],{"class":81,"line":665},[79,950,951],{},"      featuredImage {\n",[79,953,954],{"class":81,"line":671},[79,955,956],{},"        node {\n",[79,958,959],{"class":81,"line":677},[79,960,961],{},"          sourceUrl\n",[79,963,964],{"class":81,"line":683},[79,965,966],{},"        }\n",[79,968,969],{"class":81,"line":689},[79,970,674],{},[79,972,974],{"class":81,"line":973},15,[79,975,680],{},[79,977,979],{"class":81,"line":978},16,[79,980,686],{},[79,982,984],{"class":81,"line":983},17,[79,985,692],{},[10,987,988],{},"Подводные камни три, и они реальные. Первый: превью черновиков. В обычном WP нажал «Предпросмотр» и увидел черновик. В headless нужна отдельная схема с аутентификацией и спецэндпоинтом. Второй: некоторые WP-плагины (формы, SEO-подсказки внутри редактора) работают только в связке со стандартным WP-фронтом. Третий: производительность REST API под нагрузкой требует настройки кеша на уровне WP (object cache) и уровне Nuxt.",[441,990,991],{},[444,992,993,996,999,1002],{},[447,994,995],{},"Редактор уже знает WP: Gutenberg, категории, теги, медиатека. Переучивать не нужно.",[447,997,998],{},"Богатая экосистема плагинов: SEO (Yoast), формы (Gravity Forms), ACF для кастомных полей.",[447,1000,1001],{},"Накопленный контент переезжает без перегона в новую схему.",[447,1003,1004],{},"WP-хостинг дёшев и знаком системным администраторам.",[460,1006,1007],{},[444,1008,1009,1012,1015,1018,1021],{},[447,1010,1011],{},"PHP-стек рядом с Node.js-фронтом: два разных языка, два деплоя, две среды.",[447,1013,1014],{},"Превью черновиков и аутентификация требуют дополнительной работы на фронте.",[447,1016,1017],{},"WordPress несёт весь плагиновый балласт даже когда фронт отделён.",[447,1019,1020],{},"Производительность REST API хуже нативного GraphQL у Strapi на сложных запросах.",[447,1022,1023],{},"Базовый WPGraphQL бесплатен, расширенные пакеты (WPGraphQL for ACF и др.) платные.",[10,1025,1026,1028],{},[200,1027,487],{}," клиент уже ведёт сайт на WP и не хочет переучиваться. Контент накоплен. Нужна скорость Nuxt-фронта без смены привычной админки. Или важны конкретные WP-плагины, которых нет в Strapi.",[17,1030,1032],{"id":1031},"strapi-или-wordpress-headless-прямое-сравнение","Strapi или WordPress headless: прямое сравнение",[10,1034,1035],{},"Это самый частый вопрос, который я получаю. Поэтому дам прямой ответ.",[161,1037,1038,1049],{},[164,1039,1040],{},[167,1041,1042,1045,1047],{},[170,1043,1044],{},"Критерий",[170,1046,226],{},[170,1048,251],{},[192,1050,1051,1062,1073,1084,1095,1106,1117,1128],{},[167,1052,1053,1056,1059],{},[197,1054,1055],{},"Старт с нуля",[197,1057,1058],{},"Лучше. Чистая модель данных, нет плагинного мусора",[197,1060,1061],{},"Хуже. Тащишь весь WP даже без фронта",[167,1063,1064,1067,1070],{},[197,1065,1066],{},"Редактор уже на WP",[197,1068,1069],{},"Не применимо",[197,1071,1072],{},"Лучше. Не нужно переучивать",[167,1074,1075,1078,1081],{},[197,1076,1077],{},"Производительность API",[197,1079,1080],{},"Лучше для GraphQL, нативный дизайн",[197,1082,1083],{},"REST API нужен кеш, GraphQL через WPGraphQL",[167,1085,1086,1089,1092],{},[197,1087,1088],{},"Экосистема плагинов",[197,1090,1091],{},"Меньше",[197,1093,1094],{},"Богаче (25 000+ плагинов)",[167,1096,1097,1100,1103],{},[197,1098,1099],{},"i18n из коробки",[197,1101,1102],{},"Встроен",[197,1104,1105],{},"Нужен WPML или Polylang (платные)",[167,1107,1108,1111,1114],{},[197,1109,1110],{},"DevOps нагрузка",[197,1112,1113],{},"Node.js + своя БД",[197,1115,1116],{},"PHP + MySQL + WordPress updates",[167,1118,1119,1122,1125],{},[197,1120,1121],{},"Vendor lock-in",[197,1123,1124],{},"Нет (MIT, self-hosted)",[197,1126,1127],{},"Нет (open-source), но плагины могут создавать",[167,1129,1130,1133,1136],{},[197,1131,1132],{},"Сложность превью черновиков",[197,1134,1135],{},"Средняя",[197,1137,1138],{},"Высокая",[10,1140,1141],{},"Мой вывод после нескольких проектов с обоими: Strapi выбираю на новых проектах с нуля, когда нужна чистая архитектура. WordPress headless выбираю, когда клиент уже сидит в WP-admin и переезд потребует больше времени, чем решит проблем. Это не вопрос качества, это вопрос контекста.",[17,1143,1145],{"id":1144},"как-я-подхожу-к-выбору-cms-под-конкретный-проект","Как я подхожу к выбору CMS под конкретный проект",[10,1147,1148],{},"Первый вопрос всегда один: кто будет править контент? Если разработчик, берём @nuxt/content и не тратим время на отдельный сервер. Если нетехнический человек, нужна нормальная админка.",[10,1150,1151],{},"Второй вопрос: есть ли уже накопленный контент или работающая система? Если клиент ведёт сайт на WordPress три года, там 500 статей и редактор обучен, headless WordPress с Nuxt-фронтом может быть лучшим решением, чем полный переезд на Strapi.",[10,1153,1154],{},"Третий вопрос: какой масштаб и бюджет на DevOps? Strapi и WordPress требуют собственного хостинга, обновлений, бэкапов. Sanity и Contentful снимают эту нагрузку, но берут деньги за объём. Для небольших проектов managed-облако может оказаться дешевле своего сервера, если считать время разработчика.",[10,1156,1157],{},"Четвёртый вопрос: нужны ли специфические возможности? Directus незаменим, если уже есть готовая БД и нужно просто обернуть её в API. Sanity берут за реальный-тайм редактор и GROQ. Payload берут, когда хочется code-first CMS на TypeScript без admin-UI, встроенного как черный ящик.",[10,1159,1160],{},"Пример из практики: для собственного сайта (evolkov.tech) я выбрал @nuxt/content, потому что контент пишу сам, markdown удобен, и тащить отдельный Strapi ради личного блога было бы инженерным оверкиллом. Для клиентского интернет-магазина ASYADROP выбрал Strapi 5: там редактор добавлял дропы в каталог сам через UI без участия разработчика. Разные задачи, разные инструменты.",[10,1162,1163,1164,1169,1170,1174],{},"Если строите сайт или веб-приложение на Nuxt и не уверены, какая архитектура подойдёт, я помогу разобраться. Моя работа в сфере ",[1165,1166,1168],"a",{"href":1167},"/uslugi/razrabotka-veb-prilozhenij","разработки веб-приложений"," включает и выбор стека, и реализацию под ключ. Для более простых задач есть ",[1165,1171,1173],{"href":1172},"/uslugi/sozdanie-sajtov","создание сайта",", где иногда хватает @nuxt/content без внешних сервисов.",[10,1176,1177,1178,1182,1183,1187,1188,565],{},"Подробнее про то, как вообще выглядит разработка на Nuxt, читайте в ",[1165,1179,1181],{"href":1180},"/blog/razrabotka-sajta-na-nuxt","статье про стек",". Про то, что вообще такое веб-приложение и чем оно отличается от сайта, я разложил в ",[1165,1184,1186],{"href":1185},"/blog/chto-takoe-veb-prilozhenie","отдельном материале",". А SEO-специфика под Nuxt (sitemap, canonical, hreflang) подробно разобрана в ",[1165,1189,1191],{"href":1190},"/blog/seo-dlya-nuxt","гайде про SEO для Nuxt",[17,1193,1195],{"id":1194},"faq","FAQ",[10,1197,1198,1201],{},[200,1199,1200],{},"Что такое headless CMS?","\nHeadless CMS это система управления контентом без встроенного фронтенда. Она хранит и отдаёт контент через API (REST или GraphQL), а фронтенд на Nuxt, Next или любом другом стеке забирает данные и рисует страницу сам. В отличие от WordPress-монолита, где бэкенд и шаблоны живут вместе, здесь фронт и бэкенд полностью разделены.",[10,1203,1204,1207],{},[200,1205,1206],{},"Strapi или WordPress headless: что лучше?","\nЗависит от контекста. Strapi лучше на новых проектах с чистого листа и нетехническим редактором. WordPress headless лучше, когда редактор уже умеет работать в WP-админке, контент накоплен или нужны WP-плагины. Strapi даёт чистоту, WordPress даёт готовность и знакомую среду.",[10,1209,1210,1213],{},[200,1211,1212],{},"Нужна ли CMS для сайта на Nuxt?","\nНе обязательно. @nuxt/content с markdown в репозитории закрывает задачу без отдельного сервиса, когда контент небольшой и пишет его разработчик. CMS нужна, когда контент правит нетехнический редактор или страниц много.",[10,1215,1216,1219],{},[200,1217,1218],{},"Можно ли использовать WordPress как бэкенд для Nuxt?","\nДа. WordPress в режиме headless отдаёт контент через REST API или GraphQL (WPGraphQL). Nuxt забирает данные и рендерит страницы. Основные сложности: превью черновиков и аутентификация требуют дополнительной настройки.",[10,1221,1222,1225],{},[200,1223,1224],{},"@nuxt/content vs Strapi: в чём разница?","\n@nuxt/content это локальный движок внутри Nuxt (файлы в репозитории, без сервера). Strapi это отдельное Node.js-приложение с собственной БД, REST/GraphQL API и веб-интерфейсом для редактора. @nuxt/content для разработчиков, Strapi для нетехнических редакторов.",[10,1227,1228,1231],{},[200,1229,1230],{},"Сколько стоит разработка headless-сайта на Nuxt?","\nСайт на @nuxt/content стартует от 30 000 ₽. Полноценный сайт со Strapi или WordPress headless от 60 000 ₽ и выше, в зависимости от сложности. Точную цену называю после брифа.",[10,1233,1234,1237],{},[200,1235,1236],{},"Directus vs Strapi: что выбрать?","\nDirectus для надстройки над существующей SQL-базой. Strapi для проектирования модели с нуля. На новом проекте Strapi удобнее.",[10,1239,1240,1243],{},[200,1241,1242],{},"Когда стоит взять Sanity или Contentful?","\nКогда не хочется заниматься инфраструктурой бэкенда и есть бюджет на SaaS. Sanity за гибкость и real-time редактор, Contentful за enterprise-зрелость и большие команды.",[1245,1246,1247],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":75,"searchDepth":89,"depth":89,"links":1249},[1250,1251,1252,1253,1254,1255,1256,1257,1258],{"id":19,"depth":89,"text":20},{"id":35,"depth":89,"text":36},{"id":158,"depth":89,"text":159},{"id":339,"depth":89,"text":340},{"id":491,"depth":89,"text":492},{"id":834,"depth":89,"text":835},{"id":1031,"depth":89,"text":1032},{"id":1144,"depth":89,"text":1145},{"id":1194,"depth":89,"text":1195},"frontend","/images/blog/headless-cms-dlya-nuxt.webp","2026-07-26",null,"md",[1265,1267,1269,1271,1273,1275,1277,1279],{"q":1200,"a":1266},"Headless CMS это система управления контентом без встроенного фронтенда. Она хранит и отдаёт контент через API (REST или GraphQL), а фронтенд на Nuxt, Next или любом другом стеке забирает данные и рисует страницу сам. В отличие от WordPress-монолита, где бэкенд и шаблоны живут вместе, здесь фронт и бэкенд полностью разделены. Это даёт контроль над скоростью, SEO и дизайном, но требует больше инженерной работы.",{"q":1206,"a":1268},"Зависит от контекста. Strapi лучше, когда проект начинается с чистого листа: вы сами проектируете модель данных, не тащите плагиновый балласт, хостите где удобно. WordPress headless лучше, когда редактор уже умеет работать в WP-админке, сайт накопил контент, или нужна богатая экосистема плагинов для форм, SEO-подсказок и многоязычности. Strapi даёт чистоту, WordPress даёт готовность.",{"q":1212,"a":1270},"Не обязательно. Если контент небольшой и меняется редко, @nuxt/content с markdown-файлами в репозитории закрывает задачу без отдельного сервиса. CMS нужна, когда контент правит нетехнический редактор, страниц много, или контент нужно менять часто без деплоя. Для блога из 20 статей @nuxt/content избыточно тащить Strapi.",{"q":1218,"a":1272},"Да, и это рабочая схема. WordPress в режиме headless отдаёт контент через REST API (встроен из коробки) или GraphQL (через плагин WPGraphQL). Nuxt на фронтенде забирает данные через useFetch или apollo-client и рендерит страницы. Сложности: превью черновиков, аутентификация для закрытых страниц и синхронизация редиректов. Если редактор уже в WP, это осмысленный выбор.",{"q":1224,"a":1274},"@nuxt/content это локальный движок внутри самого Nuxt: контент в markdown/yaml/json-файлах в репозитории, без отдельного сервера, без API, без базы данных. Strapi это отдельное Node.js-приложение с собственной БД, REST/GraphQL API и веб-интерфейсом администратора. @nuxt/content идеален для разработчиков, которые сами пишут контент. Strapi нужен, когда контент правит другой человек через удобный интерфейс.",{"q":1230,"a":1276},"Диапазон широкий. Простой сайт на @nuxt/content (только фронтенд, без отдельного CMS-сервера) стартует от 30 000 ₽. Полноценный сайт со Strapi или WordPress headless дороже: нужен бэкенд, его настройка, хостинг и связка с фронтендом. Итог от 60 000 ₽ и выше в зависимости от объёма контента, числа типов страниц и интеграций. Точную цену называю после брифа.",{"q":1236,"a":1278},"Оба self-hosted, оба open-source, оба с REST и GraphQL. Directus берут, когда уже есть своя база данных (PostgreSQL, MySQL) и нужно обернуть её в API с admin-панелью. Он не создаёт схему с нуля, а работает поверх существующих таблиц. Strapi, наоборот, строит схему сам через визуальный Content Type Builder. Для нового проекта Strapi удобнее. Для надстройки над легаси-базой Directus незаменим.",{"q":1242,"a":1280},"Sanity и Contentful это облачные headless CMS с managed-хостингом. Sanity берут за гибкий язык запросов GROQ, удобный real-time редактор и богатые возможности кастомизации. Contentful предпочитают крупные команды: он mature, стабилен, с enterprise-поддержкой. Оба платные при росте. Выбирают их, когда не хочется заниматься инфраструктурой бэкенда самому и есть бюджет на SaaS.",false,{},"Headless CMS для Nuxt: сравниваю @nuxt/content, Strapi, WordPress headless, Directus и Sanity. Код, таблица, плюсы и минусы. Помогу выбрать под задачу.","Headless CMS для Nuxt: Strapi или WordPress headless?","/headless-cms-dlya-nuxt",{"title":5,"description":12},"headless-cms-dlya-nuxt","D4tTscqQ39NmykPjvWgyYb88wCh_xuwj_Nn4yZ86NIU",[1290,1294,1300,1305,1310,1311,1315,1319,1323,1327,1331,1335,1339,1343,1347,1351,1355,1360,1366,1370,1375,1381,1386,1391],{"slug":1291,"title":1292,"excerpt":1262,"category":1259,"cover":1293,"date":1261,"updated":1261,"readingMinutes":983,"featured":1281},"3d-konfigurator-tovara-dlya-sajta","3D-конфигуратор товара для сайта: как устроен, сколько стоит и когда окупается","/images/blog/3d-konfigurator-tovara-dlya-sajta.webp",{"slug":1295,"title":1296,"excerpt":1262,"category":1297,"cover":1298,"date":1261,"updated":1261,"readingMinutes":1299,"featured":1281},"avtomatizaciya-tenderov-na-zakaz","Автоматизация тендеров: когда агрегатора мало и нужна своя система","backend","/images/blog/avtomatizaciya-tenderov-na-zakaz.webp",18,{"slug":1301,"title":1302,"excerpt":1262,"category":1303,"cover":1304,"date":1261,"updated":1261,"readingMinutes":689,"featured":1281},"chto-vhodit-v-tehnicheskoe-seo","Что входит в техническое SEO: разбор глазами разработчика","seo","/images/blog/chto-vhodit-v-tehnicheskoe-seo.webp",{"slug":1306,"title":1307,"excerpt":1262,"category":1259,"cover":1308,"date":1261,"updated":1261,"readingMinutes":1309,"featured":531},"fullstack-razrabotchik","Кто такой fullstack-разработчик и когда бизнесу выгоднее нанять одного, а не команду","/images/blog/fullstack-razrabotchik.webp",20,{"slug":1287,"title":5,"excerpt":1262,"category":1259,"cover":1260,"date":1261,"updated":1261,"readingMinutes":973,"featured":1281},{"slug":1312,"title":1313,"excerpt":1262,"category":1259,"cover":1314,"date":1261,"updated":1261,"readingMinutes":978,"featured":1281},"kak-nanyat-vue-nuxt-razrabotchika","Как нанять Vue/Nuxt-разработчика: гид практика на 2026 год","/images/blog/kak-nanyat-vue-nuxt-razrabotchika.webp",{"slug":1316,"title":1317,"excerpt":1262,"category":1303,"cover":1318,"date":1261,"updated":1261,"readingMinutes":978,"featured":1281},"kak-vybrat-podryadchika-dlya-razrabotki-sajta","Как выбрать подрядчика для разработки сайта: фрилансер, студия или solo-разработчик","/images/blog/kak-vybrat-podryadchika-dlya-razrabotki-sajta.webp",{"slug":1320,"title":1321,"excerpt":1262,"category":1259,"cover":1322,"date":1261,"updated":1261,"readingMinutes":1299,"featured":1281},"nuxt-ili-next-chto-vybrat","Nuxt или Next: что выбрать для проекта в 2026","/images/blog/nuxt-ili-next-chto-vybrat.webp",{"slug":1324,"title":1325,"excerpt":1262,"category":1297,"cover":1326,"date":1261,"updated":1261,"readingMinutes":689,"featured":1281},"programma-dlya-rascheta-tenderov","Программа для расчёта тендеров: как считать себестоимость заявки и когда нужна своя система","/images/blog/programma-dlya-rascheta-tenderov.webp",{"slug":1328,"title":1329,"excerpt":1262,"category":1297,"cover":1330,"date":1261,"updated":1261,"readingMinutes":1309,"featured":1281},"razrabotka-crm-na-zakaz","Разработка CRM на заказ: когда своя система выгоднее коробочной","/images/blog/razrabotka-crm-na-zakaz.webp",{"slug":1332,"title":1333,"excerpt":1262,"category":1259,"cover":1334,"date":1261,"updated":1261,"readingMinutes":978,"featured":1281},"razrabotka-sajta-na-nuxt","Разработка сайта на Nuxt: когда фреймворк, а не Тильда","/images/blog/razrabotka-sajta-na-nuxt.webp",{"slug":1336,"title":1337,"excerpt":1262,"category":1297,"cover":1338,"date":1261,"updated":1261,"readingMinutes":1299,"featured":1281},"razrabotka-veb-prilozheniya-na-zakaz","Разработка веб-приложения на заказ: этапы, стек, сроки и цена","/images/blog/razrabotka-veb-prilozheniya-na-zakaz.webp",{"slug":1340,"title":1341,"excerpt":1262,"category":1303,"cover":1342,"date":1261,"updated":1261,"readingMinutes":1299,"featured":1281},"seo-dlya-nuxt","SEO для Nuxt: полный гайд по индексации и метатегам","/images/blog/seo-dlya-nuxt.webp",{"slug":1344,"title":1345,"excerpt":1262,"category":1303,"cover":1346,"date":1261,"updated":1261,"readingMinutes":978,"featured":1281},"skolko-stoit-korporativnyj-sajt","Сколько стоит корпоративный сайт в 2026 году","/images/blog/skolko-stoit-korporativnyj-sajt.webp",{"slug":1348,"title":1349,"excerpt":1262,"category":1303,"cover":1350,"date":1261,"updated":1261,"readingMinutes":689,"featured":1281},"skolko-stoit-lending","Сколько стоит разработка лендинга в 2026 году: честные цены","/images/blog/skolko-stoit-lending.webp",{"slug":1352,"title":1353,"excerpt":1262,"category":1297,"cover":1354,"date":1261,"updated":1261,"readingMinutes":1309,"featured":1281},"skolko-stoit-razrabotat-saas","Разработка SaaS: сколько стоит и с чего начать фаундеру","/images/blog/skolko-stoit-razrabotat-saas.webp",{"slug":1356,"title":1357,"excerpt":1262,"category":1358,"cover":1359,"date":1261,"updated":1261,"readingMinutes":973,"featured":1281},"zakazat-razrabotku-internet-magazina","Заказать разработку интернет-магазина: что входит, как проходит работа и как принять результат","ecommerce","/images/blog/zakazat-razrabotku-internet-magazina.webp",{"slug":1361,"title":1362,"excerpt":1262,"category":1259,"cover":1363,"date":1364,"updated":1364,"readingMinutes":1365,"featured":1281},"chto-takoe-veb-prilozhenie","Что такое веб-приложение: как устроено, виды и на чём делают","/images/blog/chto-takoe-veb-prilozhenie.webp","2026-07-04",26,{"slug":1367,"title":1368,"excerpt":1262,"category":1303,"cover":1369,"date":1364,"updated":1364,"readingMinutes":973,"featured":1281},"kak-proverit-skorost-sajta","Как проверить скорость сайта и как читать отчёт","/images/blog/kak-proverit-skorost-sajta.webp",{"slug":1371,"title":1372,"excerpt":1262,"category":1303,"cover":1373,"date":1364,"updated":1364,"readingMinutes":1374,"featured":1281},"skolko-stoit-sdelat-sajt","Сколько стоит сделать сайт под ключ в 2026 году","/images/blog/skolko-stoit-sdelat-sajt.webp",22,{"slug":1376,"title":1377,"excerpt":1262,"category":1358,"cover":1378,"date":1379,"updated":1379,"readingMinutes":1380,"featured":1281},"kak-sdelat-internet-magazin","Как сделать интернет-магазин с нуля: полный разбор от разработчика","/images/blog/kak-sdelat-internet-magazin.webp","2026-07-03",33,{"slug":1382,"title":1383,"excerpt":1262,"category":1303,"cover":1384,"date":1379,"updated":1379,"readingMinutes":1385,"featured":1281},"kak-uskorit-sajt","Как ускорить сайт: от замера в DevTools до архитектуры","/images/blog/kak-uskorit-sajt.webp",34,{"slug":1387,"title":1388,"excerpt":1262,"category":1358,"cover":1389,"date":1379,"updated":1379,"readingMinutes":1390,"featured":1281},"platforma-dlya-internet-magazina","На чём сделать интернет-магазин: конструктор, CMS или кастом","/images/blog/platforma-dlya-internet-magazina.webp",24,{"slug":1392,"title":1393,"excerpt":1262,"category":1358,"cover":1394,"date":1379,"updated":1379,"readingMinutes":677,"featured":1281},"skolko-stoit-internet-magazin","Сколько стоит интернет-магазин в 2026 году","/images/blog/skolko-stoit-internet-magazin.webp",1785483852346]