Каталог, которого не было для поиска: перенос антикварной галереи «Дарьян» на WordPress
Галерея работает в Минске больше тридцати лет, на сайте — 655 предметов. Вот только для поисковых роботов этого каталога почти не существовало: товары подгружались скриптом и в код страницы не попадали. Показываем, что нашёл аудит, как переносили каталог на WordPress с WooCommerce и какие решения принимали там, где данные расходились с желаемым.
- Сайт галереи работал и выглядел прилично, но разделы каталога отдавали поисковому роботу HTML без товаров — карточки подгружались скриптом;
- В теге
titleвсех разделов стояло служебное имя класса .NET, и на всех страницах одинаковое; - Перенесли каталог на WordPress + WooCommerce: 655 предметов, 654 изображения, 33 категории, 61 художник;
- Характеристики вынесли в атрибуты-таксономии — появились фильтры и около 120 новых посадочных страниц;
- Форму с загрузкой фото и вкладки в каталоге собрали без единого плагина — на родном модуле темы и CSS.
Клиент и задача
Антикварно-художественная галерея «Дарьян» работает в Минске больше 30 лет: свыше 3000 предметов в обороте, на сайте на момент обращения — 655. Действующий сайт был самописным проектом на ASP.NET MVC.
Из брифа, по приоритету:
- Продвижение в поиске — приоритет номер один, дословно: «важно быть в топе поисковой системы»;
- имиджевое представительство в интернете;
- больше обращений от новых клиентов;
- удобный каталог, который не стыдно показать постоянным клиентам.
Отдельно клиент показал конкурента, у которого нравился «отличный поиск по клеймам и заводам», — этот пункт позже определил всю работу с характеристиками.
Три особенности бизнеса, которые определили архитектуру: цены на сайте не публикуются (только «уточняйте по телефону»), проданные предметы остаются в каталоге как история галереи, а администрировать сайт будет сотрудник без технических знаний.
Аудит: каталог был, а для поиска его не существовало
Это самая показательная часть кейса. Для посетителя сайт выглядел нормально: разделы открывались, предметы показывались, фотографии грузились. Проблема была в том, что поисковый робот видел совсем другую страницу.
Разделы каталога отдавали пустой HTML
Товары подгружались скриптом уже после загрузки страницы. Мы запросили разделы так, как это делает краулер — без выполнения JavaScript:
| Страница раздела | Размер HTML | Ссылок на товары в HTML |
|---|---|---|
Картины /Antique/Type/1 | 10 866 байт | 1 |
Часы /Antique/Type/2 | 10 844 байта | 1 |
Мебель /Antique/Type/5 | 10 860 байт | 1 |
Живопись /Painting/Index | 11 915 байт | 0 |
То есть 655 предметов были недоступны роботам через навигацию каталога. Проиндексироваться могли только карточки, до которых робот добрался иными путями.


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

Здесь же видно две сопутствующие проблемы: meta description нет ни на одной странице, а размер HTML — 10–14 КБ на весь раздел. Бонусом в заголовке верхнего раздела обнаружилась опечатка: «Атиквариат».
Главных страниц было как минимум шесть
Отдельный сюжет — дубли главной. Маршрутизация ASP.NET MVC отдавала одну и ту же страницу по любому написанию адреса. Мы запросили варианты подряд: все ответили 200 и вернули документ, совпадающий байт в байт (одинаковый размер и одинаковая контрольная сумма).
| Адрес | Что отдаёт сервер |
|---|---|
/ | 200, 14 194 байта |
/Home | 200, тот же документ байт в байт |
/Home/Index | 200, тот же документ |
/home, /HOME, /HoMe | 200 — регистр не имеет значения |
/Home/, /Home/Index/ | 200 — слеш в конце тоже |
/Home/Index?x=1 | 200 — и любой параметр в адресе |
Ни на одном из этих адресов не было тега 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) |
| Мануфактура | 35 | Meissen (22), ЛФЗ (20), Кузнецов (10), Sèvres (7) |
| Происхождение | 18 | Россия (103), Западная Европа (86), Франция (82) |
| Период | 9 | XIX век (261), XX век (153), XVIII век (25) |
Характеристики получили 606 предметов из 655. Отдельная работа — нормализация: исходники писали люди и вразнобой («19 век», «конец 19 века», «1893 г.», «1910–1920-е»). Привели к единой шкале веков для фильтра, а точную датировку сохранили отдельным полем: в карточке посетитель видит «конец XIX века», а фильтр при этом работает по векам. Заодно склеили синонимы вроде «Позолота» и «Золочение».
Тексты и метатеги
655 карточек получили уникальные описания, написанные по схеме «ключевые слова → LSI → сущности → текст». Факты брали только из исходных описаний клиента: атрибуция, датировка и материал не выдумывались. К каждой карточке — SEO-заголовок, мета-описание, фокус-ключ, картинки для соцсетей и микроразметка Product с наличием и характеристиками.
Дальше 33 описания категорий с перелинковкой и 87 текстов на страницах атрибутов — это новые посадочные под запросы вида «бронзовые статуэтки» или «фарфор Мейсен». 17 значений мануфактур из брифа, для которых предметов пока нет, закрыли от показа, чтобы не плодить пустые страницы: в админке они остались, клиент их наполнит.

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

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

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

Вкладки в каталоге — на CSS, без JavaScript
Три раздела на странице каталога занимали много места простынёй, и клиент попросил вкладки. В Гутенберге блока «Табы» нет ни в ядре, ни в теме, обычный путь — плагин. Мы собрали свои: разметка в блоке HTML, переключение на скрытых radio и :checked, ни строки JavaScript.
Принципиальный момент: текст всех вкладок остаётся в HTML страницы. Ничего не догружается по клику — то есть мы не повторили ровно ту ошибку, из-за которой старый сайт был пуст для поисковиков. Разница между «спрятано оформлением» и «отсутствует в коде» для SEO огромная.
Мелочь, которая стоила отдельной отладки: WordPress вырезает атрибут checked из блока HTML при сохранении, поэтому открытую вкладку нельзя задать в разметке — первая открывается правилом на :not(:has(...)).

Мост к штатной настройке «Товаров в строке»
Тема игнорировала настройку WooCommerce, отвечающую за число колонок в каталоге. Можно было захардкодить нужное число и забыть — вместо этого мы связали тему со штатной настройкой. Разница принципиальная: в первом случае мы делаем за клиента, во втором — даём ему рычаг, которым он управляет сам.
Архив выставок: актив, который лежал мёртвым грузом
На старом сайте был раздел «Выставки», устроенный так, что фактически не существовал ни для людей, ни для поиска:
| Что | Как было |
|---|---|
| Страница-хаб раздела | пустая: 9 КБ HTML, 503 знака видимого текста — только меню и подвал |
| Сами выставки | доступны только по прямым адресам, на которые ничего не ссылалось |
| Заголовок страницы | битый: двойное экранирование вместо слова «Выставки» |
| Мета-описание | отсутствует |
| Текст | простыня в одном блоке, местами разорванная посреди фразы |
| Афиша | 3508 × 4961, 3 МБ одним файлом |
А содержимое оказалось ценным. Материал о выставке «Витебский техникум» — это не анонс, а статья на 5200 знаков про витебскую художественную школу: Юдель Пэн, Шагал, Малевич, Лисицкий, Ермолаева, вся хронология от народного училища 1918 года. Такого текста нет ни у одного конкурента-магазина, и он отвечает на информационные запросы вроде «витебская художественная школа».
Главная находка — готовая перелинковка. В тексте перечислены художники, чьи работы показывали на выставке. Четверо из семи есть в каталоге галереи: Корженевский (6 работ), Маслеников (4), Явич (3), Жолток (2). Получилась двусторонняя связка: статья → страница художника → его работы, и обратно со страницы художника на выставку с указанием конкретных работ. Эту перелинковку не пришлось выдумывать — она уже была в тексте, который никто не читал.
Что сделали: завели рубрику «Выставки» внутри раздела новостей, разбили простыню на абзацы и подзаголовки, сжали афиши (одна весила 3 МБ — стала 288 КБ), прописали метатеги и добавили честную пометку, что выставка прошла и страница сохранена как архив — чтобы посетитель не принял материал 2019 года за анонс. Там, где данные в исходниках расходились между собой, мы не «причёсывали» текст, а выписали вопросы клиенту: для антиквариата достоверность важнее гладкости.


Честность как часть работы
В антикварной нише достоверность атрибуции — это буквально деньги клиента и его репутация. Поэтому три решения приняли сознательно:
- Биографии не выдумывали. Из 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 категории, четыре таксономии атрибутов, раздел новостей — быстро вскрыло дефекты. По каждому мы описали суть, шаги воспроизведения, разбор причины в коде темы и предлагаемое исправление:
| № | Дефект темы | Серьёзность |
|---|---|---|
| 1 | WooCommerce сбрасывает высоту логотипа в шапке и подвале | средняя |
| 2 | Единственный товар в сетке растягивается на всю ширину | высокая |
| 3 | Тема игнорирует настройку WooCommerce «Товаров в строке» | средняя |
| 4 | Нет настройки подчёркивания ссылок в контенте | пожелание |
| 5 | Хлебные крошки не выводятся ни на одной странице WooCommerce | высокая |
| 6 | CSS-сетка темы конфликтует с разметкой ядра WooCommerce | высокая |
| 7 | На странице записей нет крошек — ни элемента, ни настройки | средняя |
| 8 | Заголовок архива не выводится, если в рубрике нет записей | средняя |
Семь из восьми пунктов мы обошли у себя (CSS или код), восьмой ждёт правки в теме. Все обходы помечены как временные — снимем, когда исправления войдут в релиз.
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 на старом сайте?+
Почему WordPress и WooCommerce, а не доработка самописного сайта?+
Как каталог без цен уживается с интернет-магазином?+
Что происходит с проданными предметами?+
Зачем характеристики выносить в атрибуты, а не писать текстом в описании?+
Зачем галерее раздел с архивом выставок?+
Перенесём каталог так, чтобы его увидел поиск
Разберём, что мешает вашему сайту попадать в выдачу, соберём структуру каталога под реальный спрос и перенесём его без потери данных. Начинаем с бесплатной оценки задачи.
