Каталог антикварной галереи «Дарьян» на 655 предметов существовал для посетителей, но не для поисковых роботов: товары подгружались скриптом и в HTML не попадали. Кейс о переносе на WordPress с WooCommerce — аудит, атрибуты, перелинковка и решения без плагинов.
ГлавнаяКейсыАнтикварная галерея «Дарьян»
Кейс · WordPress + WooCommerce

Каталог, которого не было для поиска: перенос антикварной галереи «Дарьян» на WordPress

Галерея работает в Минске больше тридцати лет, на сайте — 655 предметов. Вот только для поисковых роботов этого каталога почти не существовало: товары подгружались скриптом и в код страницы не попадали. Показываем, что нашёл аудит, как переносили каталог на WordPress с WooCommerce и какие решения принимали там, где данные расходились с желаемым.

655предметов перенесено
777уникальных текстов
~120новых посадочных страниц
Кратко
  • Сайт галереи работал и выглядел прилично, но разделы каталога отдавали поисковому роботу HTML без товаров — карточки подгружались скриптом;
  • В теге title всех разделов стояло служебное имя класса .NET, и на всех страницах одинаковое;
  • Перенесли каталог на WordPress + WooCommerce: 655 предметов, 654 изображения, 33 категории, 61 художник;
  • Характеристики вынесли в атрибуты-таксономии — появились фильтры и около 120 новых посадочных страниц;
  • Форму с загрузкой фото и вкладки в каталоге собрали без единого плагина — на родном модуле темы и CSS.

Клиент и задача

Антикварно-художественная галерея «Дарьян» работает в Минске больше 30 лет: свыше 3000 предметов в обороте, на сайте на момент обращения — 655. Действующий сайт был самописным проектом на ASP.NET MVC.

Из брифа, по приоритету:

  • Продвижение в поиске — приоритет номер один, дословно: «важно быть в топе поисковой системы»;
  • имиджевое представительство в интернете;
  • больше обращений от новых клиентов;
  • удобный каталог, который не стыдно показать постоянным клиентам.

Отдельно клиент показал конкурента, у которого нравился «отличный поиск по клеймам и заводам», — этот пункт позже определил всю работу с характеристиками.

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

Аудит: каталог был, а для поиска его не существовало

Это самая показательная часть кейса. Для посетителя сайт выглядел нормально: разделы открывались, предметы показывались, фотографии грузились. Проблема была в том, что поисковый робот видел совсем другую страницу.

Разделы каталога отдавали пустой HTML

Товары подгружались скриптом уже после загрузки страницы. Мы запросили разделы так, как это делает краулер — без выполнения JavaScript:

Страница разделаРазмер HTMLСсылок на товары в HTML
Картины /Antique/Type/110 866 байт1
Часы /Antique/Type/210 844 байта1
Мебель /Antique/Type/510 860 байт1
Живопись /Painting/Index11 915 байт0

То есть 655 предметов были недоступны роботам через навигацию каталога. Проиндексироваться могли только карточки, до которых робот добрался иными путями.

БылоРаздел «Иконы» на старом сайте галереи «Дарьян»: товары видны посетителю, но подгружаются скриптом и отсутствуют в HTML
Раздел «Иконы» на старом сайте: посетитель видит предметы, но в HTML их нет — только каркас страницы.
СталоКатегория «Иконы» на новом сайте: хлебные крошки, H1, описание раздела и 16 товаров в сетке с осмысленными названиями
Та же категория на новом сайте: крошки, H1, описание раздела и 16 товаров прямо в коде страницы.

В заголовке страниц — служебное имя класса

На всех страницах разделов антиквариата в <title> стояло имя внутреннего класса .NET вместо названия раздела. Причём одно и то же — то есть в глазах поисковика это ещё и дубли.

Ответ сервера старого сайта daryan.by: в теге title вместо названия раздела служебное имя класса ASP.NET, meta description отсутствует
Ответ сервера старого сайта — то, что видит поисковый робот. Скриншота выдачи с этой строкой нет: по точной фразе в индексе ничего не находится, страницы, судя по всему, просто не были проиндексированы.

Здесь же видно две сопутствующие проблемы: meta description нет ни на одной странице, а размер HTML — 10–14 КБ на весь раздел. Бонусом в заголовке верхнего раздела обнаружилась опечатка: «Атиквариат».

Главных страниц было как минимум шесть

Отдельный сюжет — дубли главной. Маршрутизация ASP.NET MVC отдавала одну и ту же страницу по любому написанию адреса. Мы запросили варианты подряд: все ответили 200 и вернули документ, совпадающий байт в байт (одинаковый размер и одинаковая контрольная сумма).

АдресЧто отдаёт сервер
/200, 14 194 байта
/Home200, тот же документ байт в байт
/Home/Index200, тот же документ
/home, /HOME, /HoMe200 — регистр не имеет значения
/Home/, /Home/Index/200 — слеш в конце тоже
/Home/Index?x=1200 — и любой параметр в адресе

Ни на одном из этих адресов не было тега canonical, редиректов между ними — тоже. Для поисковой системы это набор разных страниц с одинаковым содержимым: какая из них «главная», она решает сама, а сигналы делятся между копиями. Точное число вариантов посчитать нельзя в принципе — их столько, сколько сможет придумать любой, кто поставит на сайт ссылку.

В WordPress эта проблема закрыта по умолчанию: сайт отдаёт один канонический адрес, лишние варианты редиректит, а Yoast проставляет canonical на каждой странице. Иногда переезд на типовую платформу лечит такие вещи просто фактом переезда.

Что ещё нашли

  • мета-описаний не было ни на одной проверенной странице — сниппет в выдаче поисковик собирал произвольно;
  • на странице контактов отсутствовал H1;
  • карточки товаров содержали одну короткую строку характеристик вроде «Холст, масло, 118 × 88 см» — без описания;
  • robots.txt и sitemap.xml отдавали 404 — карты сайта у каталога на 655 предметов не было вовсе;
  • кириллица отдавалась числовыми сущностями — не критично, но усложняет любой разбор.
!Вывод аудита

Проблема была не в «слабом продвижении», а в том, что продвигать было нечего: каталог для поиска не существовал. Поэтому начали не с метатегов, а с платформы.

Решение: WordPress + WooCommerce и тема в бете

Договорились разворачивать сайт заново. Аргументы для клиента были простые: каталог, который индексируется без ухищрений; знакомая админка для сотрудника без технических знаний; штатные механизмы категорий, атрибутов, фильтров и товарной микроразметки.

Тему взяли новую — WPBox 0.1.4 (beta) от студии WPShop. Нам дали доступ как тестировщикам: параллельно с внедрением мы собирали для разработчиков баг-репорт, о нём ниже. Работали на закрытом поддомене, чтобы не трогать действующий сайт.

Что сделали

Перенесли каталог целиком

Собрали данные со старого сайта обходом карточек: описания, все фотографии, привязку к художникам.

  • 655 предметов перенесено полностью;
  • 654 изображения загружено в медиатеку с человекочитаемыми именами файлов и alt;
  • у 3 предметов фото не оказалось — картинки были битыми и на старом сайте; карточки создали и запросили фотографии у клиента.

Архитектура: три раздела и 33 категории

Каталог спроектировали по брифу, а не «как было»: Антиквариат (481 предмет), Живопись (126) и раздел «ХХ век / Винтаж» (48), которого на старом сайте не существовало вовсе — советский фарфор лежал вперемешку с антиквариатом.

Разложили автоматически по клеймам заводов — ЛФЗ, Дулёво, Вербилки, Полонное, «Нёман». При этом защитили от ошибки дореволюционные предметы: Кузнецов, Гарднер, Попов и ИФЗ остались в антиквариате, даже если завод совпадал. Плюс таксономия «Художники» — 61 персона с биографиями со старого сайта.

Характеристики как инструмент поиска

Тот самый «поиск по клеймам и заводам» из брифа. Исходные описания разобрали на структурированные поля и вынесли в глобальные атрибуты-таксономии, а не в текстовые поля — чтобы работали фильтры и появились посадочные страницы:

АтрибутЗначенийПримеры
Материал и техника42Фарфор (164), Масло (132), Бронза (110), Золочение (129)
Мануфактура35Meissen (22), ЛФЗ (20), Кузнецов (10), Sèvres (7)
Происхождение18Россия (103), Западная Европа (86), Франция (82)
Период9XIX век (261), XX век (153), XVIII век (25)

Характеристики получили 606 предметов из 655. Отдельная работа — нормализация: исходники писали люди и вразнобой («19 век», «конец 19 века», «1893 г.», «1910–1920-е»). Привели к единой шкале веков для фильтра, а точную датировку сохранили отдельным полем: в карточке посетитель видит «конец XIX века», а фильтр при этом работает по векам. Заодно склеили синонимы вроде «Позолота» и «Золочение».

Тексты и метатеги

655 карточек получили уникальные описания, написанные по схеме «ключевые слова → LSI → сущности → текст». Факты брали только из исходных описаний клиента: атрибуция, датировка и материал не выдумывались. К каждой карточке — SEO-заголовок, мета-описание, фокус-ключ, картинки для соцсетей и микроразметка Product с наличием и характеристиками.

Дальше 33 описания категорий с перелинковкой и 87 текстов на страницах атрибутов — это новые посадочные под запросы вида «бронзовые статуэтки» или «фарфор Мейсен». 17 значений мануфактур из брифа, для которых предметов пока нет, закрыли от показа, чтобы не плодить пустые страницы: в админке они остались, клиент их наполнит.

Категория «Иконы» на новом сайте: хлебные крошки, H1, описание раздела и 16 товаров в сетке с осмысленными названиями
Категория «Иконы»: описание с перелинковкой на смежные разделы, счётчик «1–16 из 37» и осмысленные названия карточек вместо коротких «Богоматерь с младенцем».

Перелинковка по фактам, а не по наитию

Связи строили по реальному распределению товаров: вниз — раздел → подкатегории → предметы; вверх — карточка → своя категория → раздел; вбок — карточка → страница художника, атрибут → смежные атрибуты. Страницы атрибутов ведут в те разделы, где их предметы действительно лежат: «Бронза» — в скульптуру, часы и подсвечники, «Нёман» — в белорусский фарфор и стекло.

Каталог без магазина

Бриф требовал каталог без цен и покупок — реализовали на WooCommerce, но покупку отключили, цены скрыли полностью, а вместо кнопки корзины поставили блок «Цена по запросу» с телефоном. Статус «Продано» сделали через штатное «Нет в наличии»: сотруднику достаточно переключить один селектор, появляется пометка и бейдж в каталоге, а в микроразметке корректно отдаётся SoldOut.

Карточка предмета на новом сайте: блок «Цена по запросу», характеристики и атрибуция
Карточка предмета: вместо корзины — «Цена по запросу», ниже характеристики, разобранные на атрибуты.

Дизайн — из палитры действующего сайта

Бриф просил «тёплый, атмосферный, с историей» и гамму текущего сайта. Палитру извлекли из его CSS: сливово-винный #5e3a4e как доминанта, коричневый, кирпичный и оливково-золотой. Логотип клиента был белым на прозрачном фоне — перекрасили в фирменный цвет с сохранением сглаживания. Шрифт старого сайта (Adamina) не поддерживает кириллицу, поэтому подобрали замену с тем же характером антиквенной засечной.

Новая главная страница галереи «Дарьян»: обложка, разделы каталога, тизер консультации
Главная собрана как хаб: разделы каталога с реальными предметами, тизер консультации, новые поступления, которыми клиент управляет сам.

Три вещи, которые сделали без плагинов

Форма консультации с загрузкой фото

Клиент просил форму «пришлите фото своего предмета — оценим». Ключевое требование — загрузка файлов, которой у родного модуля формы в теме нет. Вместо того чтобы ставить очередной плагин, расширили штатный модуль темы через её документированные хуки: добавили поля, включили enctype, проверки веса, типа и количества файлов, ловушку для спама, собственное хранилище заявок (если письмо не дойдёт, заявка останется в админке) и письмо с вложениями и Reply-To на адрес посетителя.

Мораль простая: прежде чем ставить плагин, стоит прочитать документацию темы. Часто там уже есть 90% нужного, а хуки закрывают остальное чище, чем сторонний код.

Форма консультации по фото на новом сайте: загрузка изображений собрана на родном модуле темы, без плагинов
Форма консультации по фото: загрузка файлов, проверки и хранение заявок — на родном модуле темы, без плагинов форм.

Вкладки в каталоге — на CSS, без JavaScript

Три раздела на странице каталога занимали много места простынёй, и клиент попросил вкладки. В Гутенберге блока «Табы» нет ни в ядре, ни в теме, обычный путь — плагин. Мы собрали свои: разметка в блоке HTML, переключение на скрытых radio и :checked, ни строки JavaScript.

Принципиальный момент: текст всех вкладок остаётся в HTML страницы. Ничего не догружается по клику — то есть мы не повторили ровно ту ошибку, из-за которой старый сайт был пуст для поисковиков. Разница между «спрятано оформлением» и «отсутствует в коде» для SEO огромная.

Мелочь, которая стоила отдельной отладки: WordPress вырезает атрибут checked из блока HTML при сохранении, поэтому открытую вкладку нельзя задать в разметке — первая открывается правилом на :not(:has(...)).

Посадочная страница каталога: текст, вкладки по трём разделам и плитки категорий
Страница каталога: три раздела разложены по вкладкам, но текст всех трёх остаётся в HTML.

Мост к штатной настройке «Товаров в строке»

Тема игнорировала настройку WooCommerce, отвечающую за число колонок в каталоге. Можно было захардкодить нужное число и забыть — вместо этого мы связали тему со штатной настройкой. Разница принципиальная: в первом случае мы делаем за клиента, во втором — даём ему рычаг, которым он управляет сам.

Архив выставок: актив, который лежал мёртвым грузом

На старом сайте был раздел «Выставки», устроенный так, что фактически не существовал ни для людей, ни для поиска:

ЧтоКак было
Страница-хаб разделапустая: 9 КБ HTML, 503 знака видимого текста — только меню и подвал
Сами выставкидоступны только по прямым адресам, на которые ничего не ссылалось
Заголовок страницыбитый: двойное экранирование вместо слова «Выставки»
Мета-описаниеотсутствует
Текстпростыня в одном блоке, местами разорванная посреди фразы
Афиша3508 × 4961, 3 МБ одним файлом

А содержимое оказалось ценным. Материал о выставке «Витебский техникум» — это не анонс, а статья на 5200 знаков про витебскую художественную школу: Юдель Пэн, Шагал, Малевич, Лисицкий, Ермолаева, вся хронология от народного училища 1918 года. Такого текста нет ни у одного конкурента-магазина, и он отвечает на информационные запросы вроде «витебская художественная школа».

Главная находка — готовая перелинковка. В тексте перечислены художники, чьи работы показывали на выставке. Четверо из семи есть в каталоге галереи: Корженевский (6 работ), Маслеников (4), Явич (3), Жолток (2). Получилась двусторонняя связка: статья → страница художника → его работы, и обратно со страницы художника на выставку с указанием конкретных работ. Эту перелинковку не пришлось выдумывать — она уже была в тексте, который никто не читал.

Что сделали: завели рубрику «Выставки» внутри раздела новостей, разбили простыню на абзацы и подзаголовки, сжали афиши (одна весила 3 МБ — стала 288 КБ), прописали метатеги и добавили честную пометку, что выставка прошла и страница сохранена как архив — чтобы посетитель не принял материал 2019 года за анонс. Там, где данные в исходниках расходились между собой, мы не «причёсывали» текст, а выписали вопросы клиенту: для антиквариата достоверность важнее гладкости.

БылоРаздел «Выставки» на старом сайте: страница-хаб без единой выставки, только меню и подвал
Раздел «Выставки» на старом сайте: хаб без единой выставки — 503 знака текста.
СталоЗапись о выставке «Витебский техникум» на новом сайте: афиша, подзаголовки и ссылки на художников
Материал о выставке на новом сайте: афиша, подзаголовки и ссылки на художников из каталога.

Честность как часть работы

В антикварной нише достоверность атрибуции — это буквально деньги клиента и его репутация. Поэтому три решения приняли сознательно:

  • Биографии не выдумывали. Из 61 художника тексты были у 50 — их перенесли. Для остальных 11 биографий не было и на старом сайте: мы не стали их сочинять, а запросили у клиента;
  • Формулировку исправили в пользу клиента. На сайте была фраза «каждый предмет проходит профессиональную экспертизу». Галерея экспертизу не делает, поэтому по всему сайту заменили на честное: атрибуцию и состояние указываем так, как они нам известны;
  • Сухой прогон спас данные. Автосортировка советского фарфора на пробном запуске зацепила 59 картин — в описаниях белорусских художников встречалось слово «белорусская». Ужесточили правила: требуется совпадение и по заводу, и по материалу, и по профильному разделу.
Страница художника на новом сайте: биография, ссылка на выставку и работы из каталога
Страница художника: биография, ссылка на выставку и его работы из каталога — связка, собранная по фактическим данным.

Грабли

Хостинг и WordPress

На LiteSpeed постоянные ссылки не менялись через API: flush_rewrite_rules() вне админки не переписывает .htaccess — потребовалась ручная запись правил. Отдельная история — режим «Coming Soon» в свежем WooCommerce: под администратором сайт выглядел нормально, а гости видели заглушку «скоро открытие». Диагностировали не сразу.

Наши собственные ошибки

При создании атрибутов не задали слаги явно, и WordPress сгенерировал их из русских названий — получились адреса вида /material/%d0%b1%d1%80%d0%be%d0%bd%d0%b7%d0%b0/. Переделали на транслит до публикации, поэтому редиректы не понадобились. Ещё поиск по основам слов («вербилк», «дулев») попал в названия терминов — заменили на нормальные из брифа.

Мелочь, которую видно в выдаче

Yoast по умолчанию оставляет в шаблонах заголовков английские слова: рубрики выдавали «Выставки Archives — Галерея «Дарьян»», страница 404 — «Page not found». Почистили 17 шаблонов, включая социальные. Такое стоит проверять на каждом русскоязычном проекте: мелочь, а лезет прямо в выдачу.

Мы были тестировщиками темы и вернули баг-репорт на 8 пунктов

Тема WPBox на момент работы была в бете (0.1.4), и внедрение на живом проекте — 655 товаров, 34 категории, четыре таксономии атрибутов, раздел новостей — быстро вскрыло дефекты. По каждому мы описали суть, шаги воспроизведения, разбор причины в коде темы и предлагаемое исправление:

Дефект темыСерьёзность
1WooCommerce сбрасывает высоту логотипа в шапке и подвалесредняя
2Единственный товар в сетке растягивается на всю ширинувысокая
3Тема игнорирует настройку WooCommerce «Товаров в строке»средняя
4Нет настройки подчёркивания ссылок в контентепожелание
5Хлебные крошки не выводятся ни на одной странице WooCommerceвысокая
6CSS-сетка темы конфликтует с разметкой ядра WooCommerceвысокая
7На странице записей нет крошек — ни элемента, ни настройкисредняя
8Заголовок архива не выводится, если в рубрике нет записейсредняя

Семь из восьми пунктов мы обошли у себя (CSS или код), восьмой ждёт правки в теме. Все обходы помечены как временные — снимем, когда исправления войдут в релиз.

Чем пользуемся сами
Реклама. WPSHOP ® · ИНН 610902589570. Ссылки в этом блоке партнёрские: если вы купите продукт по ним, мы получим комиссию. На цену для вас это не влияет.

WPBox — не единственная разработка студии, с продуктами которой мы работаем. Вот что стоит на сайте, который вы сейчас читаете:

  • тема Reboot — на ней работает seo-akademiya.by;
  • WPRemark — врезки и выделенные блоки в статьях;
  • Expert Review — блоки вопросов и ответов, из которых собирается FAQ-разметка;
  • Clearfy — чистка лишнего в коде WordPress и мелкая оптимизация;
  • каталог остальных тем и плагинов — на wpshop.ru.

Цифры на текущий момент

ПоказательЗначение
Перенесено предметов655
Изображений в медиатеке654
Категорий каталога34 (у 26 — обложки из товаров)
Художников61, из них 50 с биографиями
Значений атрибутов104, наполненных — 87
Уникальных текстов777: 655 карточек + 34 категории + 87 атрибутов + каталог
Новых посадочных страницоколо 120
Спасено из старого раздела «Выставки»2 материала, 7 тыс. знаков
Функционал без плагиновформа с загрузкой фото, вкладки каталога
Найдено и описано дефектов темы8 (баг-репорт разработчикам)

Что дальше

Проект в финальной стадии: осталось наполнение от клиента (фотографии трёх предметов, биографии 11 художников, семь пока пустых категорий), настройка аналитики и Search Console вместе с cookie-баннером, вычитка юридических страниц — и запуск на основном домене. После переезда добавим сюда ссылку на сайт и вернёмся с замерами позиций и трафика.

Вопросы и ответы

Что обычно спрашивают про такой перенос

Почему нельзя было просто настроить SEO на старом сайте?+
Потому что оптимизировать было нечего: разделы каталога отдавали поисковому роботу HTML без товаров — карточки подгружались скриптом уже после загрузки страницы. Никакие метатеги и ссылки не помогут, если 655 предметов физически отсутствуют в коде страницы. Сначала нужно было сделать каталог видимым, и только потом заниматься его продвижением.
Почему WordPress и WooCommerce, а не доработка самописного сайта?+
У галереи не было своей команды разработки, а администрировать сайт должен сотрудник без технических знаний. WordPress даёт знакомую админку, а WooCommerce — готовые механизмы категорий, атрибутов, фильтров и товарной микроразметки, которые индексируются без ухищрений. Дорабатывать закрытый самописный проект под все эти задачи вышло бы дороже переноса.
Как каталог без цен уживается с интернет-магазином?+
Мы оставили WooCommerce как движок каталога, но отключили покупку и полностью скрыли цены: вместо кнопки корзины в карточке стоит блок «Цена по запросу» с телефоном галереи. Для антиквариата это нормальная практика — каждый предмет уникален, и цена обсуждается лично.
Что происходит с проданными предметами?+
Они остаются в каталоге как история галереи. Технически это штатный статус «Нет в наличии»: сотрудник переключает один селектор в карточке, после чего появляется пометка «Продано» и бейдж в списке, а в микроразметке корректно отдаётся статус SoldOut. Отдельный плагин или доработка для этого не понадобились.
Зачем характеристики выносить в атрибуты, а не писать текстом в описании?+
Текстовая строка «Холст, масло, 118×88 см» не даёт ни фильтров, ни новых страниц. Разложенные в таксономии характеристики дают и то, и другое: посетитель фильтрует каталог по материалу, мануфактуре, происхождению и периоду, а у сайта появляются посадочные страницы под запросы вроде «фарфор Мейсен» или «антиквариат XIX века». В этом проекте так получилось около 120 новых страниц.
Зачем галерее раздел с архивом выставок?+
Это одновременно тематический контент, доказательство экспертности для E-E-A-T и источник внутренних ссылок на товарные страницы. У «Дарьяна» такой материал уже был — статья о витебской художественной школе, — но лежал на странице, куда не вело ни одной ссылки. Часто перед тем, как заказывать новые тексты, стоит посмотреть, что у клиента уже написано.
Похожая задача?

Перенесём каталог так, чтобы его увидел поиск

Разберём, что мешает вашему сайту попадать в выдачу, соберём структуру каталога под реальный спрос и перенесём его без потери данных. Начинаем с бесплатной оценки задачи.

SEO Академия