diff --git a/README.md b/README.md index 9463d08..5cf7199 100644 --- a/README.md +++ b/README.md @@ -10,15 +10,15 @@ * Проект получает настройки и секреты через переменные окружения (`.env`) вместо `my_secret*.py`. * Рефакторинг создания `sitemap.xml`: raw ⟶ ORM, создание через Django-команду `generate_sitemaps` в медиа-файлы. * Рефакторинг URL `/catalog/profil/`: raw SQL ⟶ ORM, убран `last_update`, измененs SEO `description` и `keywords`. -* Распилен `oknardia/web/catalog.py` на тематические модули (`catalog_companies.py`, `catalog_profiles.py`, `catalog_series.py`, `catalog_openings.py`) с вынесением общей логики в `catalog_utils.py`; маршруты обновлены без изменения внешних URL. -* Рефакторинг `catalog_profile_model` (`/catalog/profile/...`): raw SQL ⟶ ORM, упрощена логика, вынесены helper-функции, сокращено дублирование расчёта цветов рейтинга, нормализована подготовка `LIST_OTHER`/`MERCHANTS`/`PROFILES`/`PROFILE_DETAIL`, сохранена совместимость шаблонов. -* Рефакторинг `catalog_profile_manufacture` (`/catalog/profile/-`): упрощена валидация URL, убран дублирующий код маппинга для `PROFILES` и `MERCHANTS` через общие хелперы, стандартизирован хвост контекста (`LAST_VISIT`, `LOG_VISIT`, `ticks`) через `_append_visit_context`. -* Рефакторинг `catalog_seria` (`/catalog/seria/`): raw SQL ⟶ ORM для списка корневых серий, подготовка данных упрощена, хвост контекста с визитами и `ticks` вынесен в общий helper внутри `catalog_series.py`. -* Рефакторинг `catalog_seria_info` и связанных функций в `catalog_series.py`: raw SQL ⟶ ORM (`catalog_seria_info`, `seria_nav`, `seria_info_year`, `seria_info_geo_code`), снижена нагрузка на БД за счёт предвыборки и переиспользования агрегатов (`quantities_by_pair`, `offers_by_window`), добавлены безопасные fallback-значения для пустых выборок, включена потоковая обработка `iterator(chunk_size=500)` для гео-данных, обновлены комментарии и docstring под фактическую логику (таблица окон, pre-render light/heavy шаблонов, гео+статистика серии). +* Распилен `oknardia/web/catalog.py` на тематические модули (`catalog_companies.py`, `catalog_profiles.py`, `catalog_series.py`, `catalog_openings.py`) с вынесением общей логики в `catalog_utils.py`; маршруты обновлены без изменения внешних URL. Улучшены SEO-атрибуты, и добавлена разметка shema.org. +* Рефакторинг `catalog_profile_model` (`/catalog/profile/...`): raw SQL ⟶ ORM, упрощена логика, вынесены helper-функции, сокращено дублирование расчёта цветов рейтинга, нормализована подготовка `LIST_OTHER`/`MERCHANTS`/`PROFILES`/`PROFILE_DETAIL`, сохранена совместимость шаблонов. Улучшены SEO-атрибуты, и добавлена разметка shema.org. +* Рефакторинг `catalog_profile_manufacture` (`/catalog/profile/-`): упрощена валидация URL, убран дублирующий код маппинга для `PROFILES` и `MERCHANTS` через общие хелперы, стандартизирован хвост контекста (`LAST_VISIT`, `LOG_VISIT`, `ticks`) через `_append_visit_context`. Улучшены SEO-атрибуты, и добавлена разметка shema.org. +* Рефакторинг `catalog_seria` (`/catalog/seria/`): raw SQL ⟶ ORM для списка корневых серий, подготовка данных упрощена, хвост контекста с визитами и `ticks` вынесен в общий helper внутри `catalog_series.py`. Улучшены SEO-атрибуты, и добавлена разметка shema.org. +* Рефакторинг `catalog_seria_info` и связанных функций в `catalog_series.py`: raw SQL ⟶ ORM (`catalog_seria_info`, `seria_nav`, `seria_info_year`, `seria_info_geo_code`), снижена нагрузка на БД за счёт предвыборки и переиспользования агрегатов (`quantities_by_pair`, `offers_by_window`), добавлены безопасные fallback-значения для пустых выборок, включена потоковая обработка `iterator(chunk_size=500)` для гео-данных, обновлены комментарии и docstring под фактическую логику (таблица окон, pre-render light/heavy шаблонов, гео+статистика серии). Улучшены SEO-атрибуты, и добавлена разметка shema.org. * Добавлена management-команда `regenerate_seria_prerender` для оффлайн-пересборки pre-render шаблонов `catalog_seria_info` (все или выбранные root-серии), с режимами `--dry-run` и `--force`; серверный reload (Gunicon? uWSGI или что там еще будет) должен быть вынесен из кода приложения в оркестрацию (cron/systemd/deploy step). -* Рефакторинг `standard_opening`: raw SQL -> ORM, упрощена дедублекация, убраны лишние запросы и переменные контекста, добавлены комментарии, SEO-описание и keywords, стандартизирован хвост контекста с визитами и `ticks` через общий helper внутри `catalog_openings.py`. +* Рефакторинг `standard_opening`: raw SQL -> ORM, упрощена дедублекация, убраны лишние запросы и переменные контекста, добавлены комментарии, SEO-описание и keywords, стандартизирован хвост контекста с визитами и `ticks` через общий helper внутри `catalog_openings.py`. Улучшены SEO-атрибуты и добавлена разметка shema.org. * Рефакторинг `catalog_company` и `catalog_company_detail` (`/catalog/company`): raw SQL → ORM для получения списка компаний и их наборов, вынесены вспомогательные функции (`_get_company_statistics`, `_get_company_sets_detail`, `_format_company_for_template`, `_format_set_for_template`, `_clean_text_field`, `_lowercase_first_char`), упрощена логика форматирования данных, добавлены подробные комментарии и docstring для каждой функции, использованы `select_related` и `annotate` для оптимизации запросов, добавлена защита от `Http404` при неправильных slugs. Улучшены SEO-атрибуты, и добавлена разметка shema.org. -* +* Рефакторирнг главной стртаницы каталога (`/catalog/`): Улучшены SEO-атрибуты, и добавлена разметка shema.org. * #### Планы, задачи, маркеры и идеи на будущее: diff --git a/oknardia/templates/base.html b/oknardia/templates/base.html index d328074..14ecd33 100755 --- a/oknardia/templates/base.html +++ b/oknardia/templates/base.html @@ -16,7 +16,6 @@ {% block Title %}{% endblock %} : ОКНАРДИЯ - @@ -26,7 +25,7 @@ {% block Top_CSS1 %}{% endblock %}{% block Top_CSS2 %}{% endblock %}{% block Top_CSS3 %}{% endblock %} {# #} {# #}{% block Top_JS1 %}{% endblock %}{% block Top_JS2 %}{% endblock %}{% block Top_JS3 %}{% endblock %}{% block Top_JS4 %}{% endblock %}{% block Top_JS5 %}{% endblock %}{% block Top_Meta1 %}{% endblock %} - {% block ADD_TO_HEAD %}{% endblock %} + {% block ADD_TO_HEAD %}{% endblock %} diff --git a/oknardia/templates/catalog/catalog_of_profiles.html b/oknardia/templates/catalog/catalog_of_profiles.html index 152d9af..e187032 100755 --- a/oknardia/templates/catalog/catalog_of_profiles.html +++ b/oknardia/templates/catalog/catalog_of_profiles.html @@ -13,6 +13,62 @@ {% block CopyrightAuthor4Meta %}: Каталог{% endblock %} +{% block Top_Meta1 %}{# #} + + + + + + + + + + + + + + + + +{# #}{% endblock %} + +{% block ADD_TO_HEAD %} + + {% endblock %} + {% block Main_Content %}
{# #}
@@ -57,4 +113,3 @@ {# ОТЛАДКА, ГАСИМ ВЕРХНЕЕ МЕНЮ #} {% endblock %} {% endcomment %} - diff --git a/oknardia/templates/catalog/catalog_of_profiles_manufacture.html b/oknardia/templates/catalog/catalog_of_profiles_manufacture.html index 9b7017c..a276ef8 100755 --- a/oknardia/templates/catalog/catalog_of_profiles_manufacture.html +++ b/oknardia/templates/catalog/catalog_of_profiles_manufacture.html @@ -9,48 +9,35 @@ {% block Keywords %}{{ CATALOG_MANUFACT }}, оконные профили {{ CATALOG_MANUFACT }}, производитель {{ CATALOG_MANUFACT }}, {% for i in PROFILES %}{{ i.PROFILE_NAME }}, {% endfor %}каталог оконных профилей, каталог производителей оконных профилей, каталог профилей, оконные профили, oknardia, окнардия {{ META_KEYWORDS|default:"" }} {% endblock %} -{% block Date4Meta %}{{ PUB_DAT|date:"Y-m-d" }}{% endblock %} - -{% block Last4Meta %}{{ PUB_DAT|date:"Y-m-d" }}{% endblock %} - {% block Author4Meta %}: Каталог{% endblock %} {% block CopyrightAuthor4Meta %}: Каталог{% endblock %} -{% block Top_Meta1 %} - - {% if IMG_FOR_BLOG %} - {% else %} - {% endif %} - - - - - - - - - +{% block Top_Meta1 %}{# #} + {# Удалить: itemprop microdata и rel=standout в head (устаревшее), используем JSON-LD ниже #} + {# Удалить: twitter:domain (устаревшее поле) #} + + - + - - - - - - - - + + + + + + + - - - {% endblock %} + + + +{# #}{% endblock %} {% block Top_JS4 %} @@ -79,6 +66,73 @@ } {% endblock %} +{% block ADD_TO_HEAD %} + + + {% endblock %} + {% block Main_Content %}
{# #}
@@ -105,7 +159,9 @@ {% endfor %} -

Сравнить компонеты рейтинга профилей можно в разделе Ретинги.

{% if not OFFERS_BY_MAUFACTURE == 0 %} +

Сравнить компонеты рейтинга профилей можно в разделе Ретинги.
+ Методика расчёта: «Рейтинг Окнардии и как он устроен».

{% if not OFFERS_BY_MAUFACTURE == 0 %}

Доля предложений окон на основе профилей {{ CATALOG_MANUFACT }} в базе «Окнардия»

Партнёры «Окнардия» использующие профили производства {{ CATALOG_MANUFACT }} в своих предложениях:
diff --git a/oknardia/templates/catalog/catalog_of_profiles_model.html b/oknardia/templates/catalog/catalog_of_profiles_model.html index 11f5912..9cc3614 100755 --- a/oknardia/templates/catalog/catalog_of_profiles_model.html +++ b/oknardia/templates/catalog/catalog_of_profiles_model.html @@ -5,31 +5,17 @@ {% block Add_Body_Attribute %} style="padding-top:70px;"{% endblock %} -{% block Description %}Характеристики оконного профиля {{ CATALOG_MODEL.sProfileName }} производства {{ CATALOG_MODEL.sProfileManufacturer }}{% endblock %} +{% block Description %}Оконный профиль {{ CATALOG_MODEL.sProfileName }} от {{ CATALOG_MODEL.sProfileManufacturer }}: характеристики, рейтинг, комплектация и применение в оконных предложениях партнёров Окнардии.{% endblock %} {% block Keywords %}оконный профиль {{ CATALOG_MODEL.sProfileName }}, характеристики профиля {{ CATALOG_MODEL.sProfileName }}, описание профиля {{ CATALOG_MODEL.sProfileName }}, производитель оконный профилей {{ CATALOG_MODEL.sProfileManufacturer }}, каталог оконных профилей, каталог производителей оконных профилей, каталог профилей, оконные профили, oknardia, окнардия {{ META_KEYWORDS|default:"" }} {% endblock %} -{% block Date4Meta %}{{ PUB_DAT|date:"Y-m-d" }}{% endblock %} - -{% block Last4Meta %}{{ PUB_DAT|date:"Y-m-d" }}{% endblock %} - {% block Author4Meta %}: Каталог{% endblock %} {% block CopyrightAuthor4Meta %}: Каталог{% endblock %} -{% block Top_Meta1 %} - - {% if IMG_FOR_BLOG %} - {% else %} - {% endif %} - - - - - - - - +{% block Top_Meta1 %}{# #} + + @@ -37,20 +23,100 @@ - - - - - - + + + + + + - - - + + + - - - {% endblock %} + + + +{# #}{% endblock %} + +{% block ADD_TO_HEAD %} + {# JSON-LD для карточки оконного профиля и хлебных крошек #} + +{% endblock %} {% block Main_Content %}
@@ -125,7 +191,12 @@ {% if CATALOG_MODEL.sProfileColor == "" %}—{% else %}{{ CATALOG_MODEL.sProfileColor|capfirst }}{% endif %} - {% if LIST_OTHER|length > 1 %} + {% if CATALOG_MODEL.fProfileRating > -0.1 %} +

Рейтинг модели рассчитан алгоритмом «Окнардии» по статистическому ранжированию + характеристик (метод Манна-Уитни){% if PROFILE_RATING_SAMPLE_SIZE > 0 %} на выборке из + {{ PROFILE_RATING_SAMPLE_SIZE }} моделей профилей{% endif %}. Методика расчёта: + «Рейтинг Окнардии и как он устроен».

{% endif %}{% if LIST_OTHER|length > 1 %}

Прочие характеристики профиля:

    {% for LI_BULL in LIST_OTHER %}
  • {{ LI_BULL|safe }}
  • {% endfor %} diff --git a/oknardia/templates/catalog/catalog_root.html b/oknardia/templates/catalog/catalog_root.html index 04fdb2c..26984b0 100755 --- a/oknardia/templates/catalog/catalog_root.html +++ b/oknardia/templates/catalog/catalog_root.html @@ -5,30 +5,18 @@ {% block Add_Body_Attribute %} style="padding-top:70px;"{% endblock %} -{% block Description %}Каталог «Окнардия»{% endblock %} +{% block Description %}Каталог «Окнардия»: оконные и дверные профили, стеклопакеты, фурнитура, типовые серии домов, стандартные проёмы и партнёры-поставщики окон.{% endblock %} {% block Keywords %}Каталог, каталог оконных профилей, каталог стеклопакетов, каталог фурнитуры, каталог серий домов, каталог оконных проёмов, oknardia, окнардия {{ META_KEYWORDS|default:"" }} {% endblock %} -{% block Date4Meta %}{% if PUB_DAT %}{{ PUB_DAT|date:"Y-m-d" }}{% else %}{% now "c" %}{% endif %}{% endblock %} - -{% block Last4Meta %}{% if PUB_DAT %}{{ PUB_DAT|date:"Y-m-d" }}{% else %}{% now "c" %}{% endif %}{% endblock %} - {% block Author4Meta %}: Каталог «Окнардия»{% endblock %} {% block CopyrightAuthor4Meta %}: Каталог «Окнардия»{% endblock %} -{% block Top_Meta1 %}{# #} - {% if IMG_FOR_BLOG %} - {% else %} - {% endif %} - - - - - - - - +{% block Top_Meta1 %}{# #} + {# Удалить: itemprop microdata, rel=standout, twitter:domain — устаревшие теги #} + + @@ -36,21 +24,76 @@ - - + + - - - + + + - - - + + + - - - -{# #}{% endblock %} + + + +{# #}{% endblock %} + +{% block ADD_TO_HEAD %} + {# JSON-LD: корневая страница каталога — CollectionPage + BreadcrumbList + структура разделов #} + + +{% endblock %} {% block Main_Content %}
    @@ -66,7 +109,7 @@
    {# ПЕРВЫЙ РАЗДЕЛ С РЕКЛАМОЙ СБОКУ #}
    {# И ЕЩЁ ОДИН РАЗДЕЛ #}

    Оконные и дверные профили

    -

    Каталог систем оконных и дверных профилей и описание компаний-производителей. Каталог содержит детальные характеристики профилей: сопротивление теплопередаче Ro (м²×°C/Вт), коэффициент звукоизоляции (дБ), число камер рамы и створки, тип и армирования, монтажная ширина и другие. Пластиковые (ПВХ), деревянные, комбинированные и другие системы профилей.

    +

    Каталог систем оконных и дверных профилей и описание компаний-производителей. Каталог содержит детальные характеристики профилей: сопротивление теплопередаче Ro (м²×°C/Вт), коэффициент звукоизоляции (дБ), число камер рамы и створки, тип и армирование, монтажная ширина и другие. Пластиковые (ПВХ), деревянные, комбинированные и другие системы профилей.

    {# И ЕЩЁ ОДИН РАЗДЕЛ #}

    Каталог серий домов

    Типовые проекты жилого строительства, вхождение стандартных оконных проёмов и балконных блоков в планировки типовых квартир серии, графики ввода в эксплуатацию зданий серии, география строительства, износ жилого фонда…

    @@ -77,7 +120,7 @@
    {# И ОПЯТЬ РАЗДЕЛ С РЕКЛАМОЙ СБОКУ #}
    {# И ЕЩЁ ОДИН РАЗДЕЛ #}

    Производители и поставщики окон (в разработке)

    -

    Компании-партнеры «Окнардии», контатная информация, условия и скидки, конфигурации и рейтинги их оконных предложений.

    +

    Компании-партнеры «Окнардии», контактная информация, условия и скидки, конфигурации и рейтинги их оконных предложений.

    {# ВТОРОЙ РАЗДЕЛ #} {# И ЕЩЁ ОДИН РАЗДЕЛ #}

    Каталог стеклопакетов (в разработке)

    Стеклопакеты и описание компаний-производителей стекла. Каталог содержит детальные характеристики: схемы стеклопакетов, наличие напыления k- и i-микропленок, тип газа-заполнителя, сопротивление теплопередаче Ro (м²×°C/Вт), коэффициент звукоизоляции (дБ), число камер, тонирование…

    @@ -98,5 +141,3 @@ {% include "report/report_log_user_visit.html" %}
    {% endblock %} - - diff --git a/oknardia/templates/catalog/catalog_seria.html b/oknardia/templates/catalog/catalog_seria.html index 3bcb469..5edb583 100755 --- a/oknardia/templates/catalog/catalog_seria.html +++ b/oknardia/templates/catalog/catalog_seria.html @@ -5,30 +5,17 @@ {% block Add_Body_Attribute %} style="padding-top:70px;"{% endblock %} -{% block Description %}Каталог серий зданий и типовое панельное строительство оконного агрегатора Окнардия{% endblock %} +{% block Description %}Каталог типовых серий домов России: панельные и блочные серии, ссылки на подробные страницы серий, их планировки и стандартные оконные проёмы.{% endblock %} -{% block Keywords %}типовое строительство, панельные серии, серии домов, серии зданий, типовые дома, типовые здания, каталог серий типового строительства, oknardia, окнардия {{ META_KEYWORDS|default:"" }} {% endblock %} - -{% block Date4Meta %}{% if PUB_DAT %}{{ PUB_DAT|date:"Y-m-d" }}{% else %}{% now "c" %}{% endif %}{% endblock %} - -{% block Last4Meta %}{% if PUB_DAT %}{{ PUB_DAT|date:"Y-m-d" }}{% else %}{% now "c" %}{% endif %}{% endblock %} +{% block Keywords %}типовое строительство, панельные серии, серии домов, серии зданий, типовые дома, типовые здания, каталог серий типового строительства, oknardia, окнардия{% endblock %} {% block Author4Meta %}Серии домов : {% endblock %} {% block CopyrightAuthor4Meta %}Cерии домов : {% endblock %} {% block Top_Meta1 %}{# #} - {% if IMG_FOR_BLOG %} - {% else %} - {% endif %} - - - - - - - - + {# Legacy microdata (itemprop/itemscope) удалена: используем JSON-LD в ADD_TO_HEAD #} + @@ -36,23 +23,64 @@ - + - - - - + + + + - + - - - + + + {# #}{% endblock %} +{% block ADD_TO_HEAD %}{% comment %} +JSON-LD для страницы списка типовых серий домов. +CollectionPage + ItemList помогают поисковику трактовать страницу как каталог сущностей. +{% endcomment %} + +{% endblock %} + + {% block Main_Content %}
    {# #}
    diff --git a/oknardia/templates/catalog/catalog_standard_opening.html b/oknardia/templates/catalog/catalog_standard_opening.html index b793c30..d93652d 100755 --- a/oknardia/templates/catalog/catalog_standard_opening.html +++ b/oknardia/templates/catalog/catalog_standard_opening.html @@ -8,26 +8,16 @@ {% block Keywords %}типовые окна, размеры окон, оконные проемы, балконный блок, стандартные окна, размеры окон в панельном доме, серия дома, каталог окон, схемы открывания окон, П-44, II-49, 1-515, oknardia, окнардия{% endblock %} -{% block Date4Meta %}{{ PUB_DAT|date:"Y-m-d" }}{% endblock %} - -{% block Last4Meta %}{{ PUB_DAT|date:"Y-m-d" }}{% endblock %} +{# Date4Meta/Last4Meta не переопределяем: используем дефолт из base.html #} {% block Author4Meta %}: Каталог «Окнардия»{% endblock %} {% block CopyrightAuthor4Meta %}: Каталог «Окнардия»{% endblock %} {% block Top_Meta1 %}{# #} - {% if IMG_FOR_BLOG %} - {% else %} - {% endif %} - - - - - + {# Legacy microdata (itemprop/itemscope) удалена: используем JSON-LD в ADD_TO_HEAD #} - - + @@ -35,21 +25,67 @@ - + - - - - + + + + - - + + - - - -{# #}{% endblock %} + + +{# #}{% endblock %} + +{% block ADD_TO_HEAD %}{% comment %} +JSON-LD для страницы-списка типовых оконных проемов. +CollectionPage + ItemList помогают поисковику понять структуру каталога. +{% endcomment %} + +{% endblock %} {% block Main_Content %}
    diff --git a/oknardia/templates/seria_info/all_seria_info_pre_light.html b/oknardia/templates/seria_info/all_seria_info_pre_light.html index 98c0b58..6e43988 100755 --- a/oknardia/templates/seria_info/all_seria_info_pre_light.html +++ b/oknardia/templates/seria_info/all_seria_info_pre_light.html @@ -7,9 +7,107 @@ {% block Add_Body_Attribute %} style="padding-top:70px;"{% endblock %} -{% block Description %}Дома серии {{ THIS_SERIA_NAME }}: детальная информация{% endblock %} +{% block Description %}Серия {{ THIS_SERIA_NAME }}: типовые размеры оконных проёмов, схемы открывания, планировки квартир, карта зданий, статистика и цены на замену окон в домах этой серии.{% endblock %} -{% block Keywords %} {{ THIS_SERIA_NAME }}, серия {{ THIS_SERIA_NAME }}, проект {{ THIS_SERIA_NAME }}, года постройки зданий серии {{ THIS_SERIA_NAME }}, размеры окон в домах серии {{ THIS_SERIA_NAME }}, оконные проемы зданий серии {{ THIS_SERIA_NAME }}, дома серии {{ THIS_SERIA_NAME }} на карте, установка окон, цены на пластиковые окна{% endblock %} +{% block Keywords %}{{ THIS_SERIA_NAME }}, серия {{ THIS_SERIA_NAME }}, проект {{ THIS_SERIA_NAME }}, года постройки зданий серии {{ THIS_SERIA_NAME }}, размеры окон в домах серии {{ THIS_SERIA_NAME }}, оконные проемы зданий серии {{ THIS_SERIA_NAME }}, дома серии {{ THIS_SERIA_NAME }} на карте, установка окон, цены на пластиковые окна{% endblock %} + +{% block Top_Meta1 %} + {# Canonical — предотвращает дубли при возможных GET-параметрах #} + + + + + + + + + + + {% if THIS_SERIA_IMAGE_URL and THIS_SERIA_IMAGE_URL != "null.gif" %} + + {% else %} + + {% endif %} + + + + + {% if THIS_SERIA_IMAGE_URL and THIS_SERIA_IMAGE_URL != "null.gif" %} + {% else %} + {% endif %} + +{% endblock %} + +{% block ADD_TO_HEAD %}{% comment %} +JSON-LD для страницы серии типового строительства. +BreadcrumbList: Google показывает хлебные крошки в сниппете вместо сырого URL — это важно, + т.к. URL вида /catalog/seria/p-44/all7 выглядит некрасиво без расшифровки. +TechArticle: описывает страницу как технический справочный материал по серии домов. +{% endcomment %} + {# JSON-LD: BreadcrumbList #} + {# JSON-LD: TechArticle — технический справочный материал о серии типового строительства #} +{% endblock %} {% block Top_JS1 %}