mod: Улучшены SEO-атрибуты, и добавлена разметка shema.org

This commit is contained in:
2026-04-25 15:18:59 +03:00
parent c37a3ab097
commit 1660e76810
11 changed files with 565 additions and 163 deletions

View File

@@ -10,15 +10,15 @@
* Проект получает настройки и секреты через переменные окружения (`.env`) вместо `my_secret*.py`. * Проект получает настройки и секреты через переменные окружения (`.env`) вместо `my_secret*.py`.
* Рефакторинг создания `sitemap.xml`: raw ⟶ ORM, создание через Django-команду `generate_sitemaps` в медиа-файлы. * Рефакторинг создания `sitemap.xml`: raw ⟶ ORM, создание через Django-команду `generate_sitemaps` в медиа-файлы.
* Рефакторинг URL `/catalog/profil/`: raw SQL ⟶ ORM, убран `last_update`, измененs SEO `description` и `keywords`. * Рефакторинг 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. * Распилен `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`, сохранена совместимость шаблонов. * Рефакторинг `catalog_profile_model` (`/catalog/profile/...`): raw SQL ⟶ ORM, упрощена логика, вынесены helper-функции, сокращено дублирование расчёта цветов рейтинга, нормализована подготовка `LIST_OTHER`/`MERCHANTS`/`PROFILES`/`PROFILE_DETAIL`, сохранена совместимость шаблонов. Улучшены SEO-атрибуты, и добавлена разметка shema.org.
* Рефакторинг `catalog_profile_manufacture` (`/catalog/profile/<id>-<manufacturer>`): упрощена валидация URL, убран дублирующий код маппинга для `PROFILES` и `MERCHANTS` через общие хелперы, стандартизирован хвост контекста (`LAST_VISIT`, `LOG_VISIT`, `ticks`) через `_append_visit_context`. * Рефакторинг `catalog_profile_manufacture` (`/catalog/profile/<id>-<manufacturer>`): упрощена валидация 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`. * Рефакторинг `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 шаблонов, гео+статистика серии). * Рефакторинг `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). * Добавлена 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_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.
* *
#### Планы, задачи, маркеры и идеи на будущее: #### Планы, задачи, маркеры и идеи на будущее:

View File

@@ -16,7 +16,6 @@
<meta name="document-state" content="{{ META_DOCUMENT_STATE|default:"Dynamic" }}" /> <meta name="document-state" content="{{ META_DOCUMENT_STATE|default:"Dynamic" }}" />
<meta name="generator" content="OKNARDIA 0.3β by Python/Django" /> <meta name="generator" content="OKNARDIA 0.3β by Python/Django" />
<title>{% block Title %}{% endblock %} : ОКНАРДИЯ</title> <title>{% block Title %}{% endblock %} : ОКНАРДИЯ</title>
<link rel="alternate" href="https://oknardia.ru" hreflang="ru-ru" />
<link rel="icon" href="https://oknardia.ru/favicon.svg" type="image/svg+xml "> <link rel="icon" href="https://oknardia.ru/favicon.svg" type="image/svg+xml ">
<link rel="icon" href="https://oknardia.ru/favicon.png" type="image/png"> <link rel="icon" href="https://oknardia.ru/favicon.png" type="image/png">
<link rel="icon" href="https://oknardia.ru/favicon.gif" type="image/gif"> <link rel="icon" href="https://oknardia.ru/favicon.gif" type="image/gif">

View File

@@ -13,6 +13,62 @@
{% block CopyrightAuthor4Meta %}: Каталог{% endblock %} {% block CopyrightAuthor4Meta %}: Каталог{% endblock %}
{% block Top_Meta1 %}{# <!-- BEGIN Дополнительные Metatags --> #}
<meta name="news_keywords" content="каталог оконных профилей, производители профилей, марки профилей" />
<link rel="canonical" href="{{ request.scheme }}://{{ request.get_host }}/catalog/profile/" />
<meta property="og:locale" content="ru_RU" />
<meta property="og:site_name" content="oknardia.ru" />
<meta property="og:url" content="{{ request.scheme }}://{{ request.get_host }}/catalog/profile/" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Каталог оконных профилей | oknardia.ru" />
<meta property="og:description" content="Производители и модели оконных профилей с характеристиками и рейтингом в каталоге Окнардии." />
<meta property="og:image" content="{{ request.scheme }}://{{ request.get_host }}/static/img/MerDY3gpU0w.jpg" />
<link rel="image_src" href="{{ request.scheme }}://{{ request.get_host }}/static/img/MerDY3gpU0w.jpg" />
<meta name="twitter:title" content="Каталог оконных профилей | oknardia.ru" />
<meta name="twitter:description" content="Производители и модели оконных профилей с характеристиками и рейтингом в каталоге Окнардии." />
<meta name="twitter:card" content="summary" />
<meta name="twitter:site" content="@oknardia" />
<meta property="twitter:url" content="{{ request.scheme }}://{{ request.get_host }}/catalog/profile/" />
<meta name="twitter:image" content="{{ request.scheme }}://{{ request.get_host }}/static/img/MerDY3gpU0w.jpg" />
{# <!-- END Дополнительные Metатags --> #}{% endblock %}
{% block ADD_TO_HEAD %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "Каталог оконных профилей",
"description": "Список производителей и моделей оконных профилей с переходом на карточки и характеристики.",
"url": "{{ request.scheme }}://{{ request.get_host }}/catalog/profile/"
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Главная",
"item": "{{ request.scheme }}://{{ request.get_host }}/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Каталог",
"item": "{{ request.scheme }}://{{ request.get_host }}/catalog/"
},
{
"@type": "ListItem",
"position": 3,
"name": "Оконные профили",
"item": "{{ request.scheme }}://{{ request.get_host }}/catalog/profile/"
}
]
}
</script>{% endblock %}
{% block Main_Content %} {% block Main_Content %}
<div class="container-fluid"> <div class="container-fluid">
{# <!--- Хлебные крошки: НАЧАЛО --> #}<div class="row"> {# <!--- Хлебные крошки: НАЧАЛО --> #}<div class="row">
@@ -57,4 +113,3 @@
{# ОТЛАДКА, ГАСИМ ВЕРХНЕЕ МЕНЮ #} {# ОТЛАДКА, ГАСИМ ВЕРХНЕЕ МЕНЮ #}
{% endblock %} {% endblock %}
{% endcomment %} {% endcomment %}

View File

@@ -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 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 Author4Meta %}: Каталог{% endblock %}
{% block CopyrightAuthor4Meta %}: Каталог{% endblock %} {% block CopyrightAuthor4Meta %}: Каталог{% endblock %}
{% block Top_Meta1 %} {% block Top_Meta1 %}{# <!-- BEGIN Дополнительные Metатеги --> #}
<!-- Дополнительные Metatags --> {# Удалить: itemprop microdata и rel=standout в head (устаревшее), используем JSON-LD ниже #}
<meta itemprop="author" content="Каталог «Окнардия»" />{% if IMG_FOR_BLOG %} {# Удалить: twitter:domain (устаревшее поле) #}
<meta itemprop="image" content="https://oknardia.ru/media/{{ IMG_FOR_BLOG }}" />{% else %} <meta name="news_keywords" content="{{ HEADER|striptags|default:CATALOG_MANUFACT }}" />
<meta itemprop="image" content="https://oknardia.ru/static/img/MerDY3gpU0w.jpg" />{% endif %} <link rel="canonical" href="{{ request.scheme }}://{{ request.get_host }}/catalog/profile/{{ CATALOG_URL }}/" />
<meta itemprop="datePublished" content="{{ PUB_DAT|date:"Y-m-d" }}" />
<span itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="Каталог «Окнардия»: оконные профили" /></span>
<span itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="name" content="Каталог «Окнардия»" /></span>
<meta itemprop="articleSection" content="Каталог «Окнардия»: оконные профили {{ CATALOG_MANUFACT }}" />
<meta itemprop="headline" content="{{ TIZER|striptags|truncatewords_html:25 }}" />
<meta name="news_keywords" content="{{ HEADER|striptags }}" />
<link rel="canonical" href="https://oknardia.ru//catalog/profile/{{ CATALOG_URL }}" />
<link rel="standout" href="https://oknardia.ru//catalog/profile/{{ CATALOG_URL }}" />
<!-- Разметка для соц-сетей Facebook Open Graph -->
<meta property="fb:admins" name="admins" content="100000084781830" /> <meta property="fb:admins" name="admins" content="100000084781830" />
<meta property="fb:pages" content="276108456054163" /> <meta property="fb:pages" content="276108456054163" />
<meta property="fb:app_id" content="258354027974262" /> <meta property="fb:app_id" content="258354027974262" />
<meta property="fb:profile_id" name="profile_id" content="https://www.facebook.com/oknardia/" /> <meta property="fb:profile_id" name="profile_id" content="https://www.facebook.com/oknardia/" />
<meta property="og:locale" content="ru_RU" /> <meta property="og:locale" content="ru_RU" />
<meta property="og:site_name" content="oknardia.ru" /> <meta property="og:site_name" content="oknardia.ru" />
<meta property="og:url" content="https://oknardia.ru//catalog/profile/{{ CATALOG_URL }}" /> <meta property="og:url" content="{{ request.scheme }}://{{ request.get_host }}/catalog/profile/{{ CATALOG_URL }}/" />
<meta property="og:type" content="article" /> <meta property="og:type" content="article" />
<meta property="og:title" content="{{ HEADER|striptags }} | oknardia.ru" /> <meta property="og:title" content="{{ HEADER|striptags|default:CATALOG_MANUFACT }} | oknardia.ru" />
<meta property="og:description" content="{{ TIZER|striptags|truncatewords_html:25 }}" /> <meta property="og:description" content="{{ TIZER|striptags|truncatewords_html:25|default:'Оконные профили производителя в каталоге Окнардии.' }}" />
<meta property="og:image" content="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:"https://oknardia.ru/static/img/MerDY3gpU0w.jpg" }}" /> <meta property="og:image" content="{% if IMG_FOR_BLOG %}{{ request.scheme }}://{{ request.get_host }}/media/{{ IMG_FOR_BLOG }}{% else %}{{ request.scheme }}://{{ request.get_host }}/static/img/MerDY3gpU0w.jpg{% endif %}" />
<link rel="image_src" href="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:"https://oknardia.ru/static/img/MerDY3gpU0w.jpg" }}" /> <link rel="image_src" href="{% if IMG_FOR_BLOG %}{{ request.scheme }}://{{ request.get_host }}/media/{{ IMG_FOR_BLOG }}{% else %}{{ request.scheme }}://{{ request.get_host }}/static/img/MerDY3gpU0w.jpg{% endif %}" />
<!-- Разметка для соц-сетей Twitter Card --> <meta name="twitter:title" content="{{ HEADER|striptags|default:CATALOG_MANUFACT }} | oknardia.ru" />
<meta name="twitter:title" content="{{ HEADER|striptags }} | oknardia.ru" /> <meta name="twitter:description" content="{{ TIZER|striptags|truncatewords_html:25|default:'Оконные профили производителя в каталоге Окнардии.' }}" />
<meta name="twitter:description" content="{{ TIZER|striptags|truncatewords_html:25 }}" /> <meta name="twitter:card" content="summary" />
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@oknardia" /> <meta name="twitter:site" content="@oknardia" />
<meta name="twitter:domain" content="oknardia.ru" /> <meta property="twitter:url" content="{{ request.scheme }}://{{ request.get_host }}/catalog/profile/{{ CATALOG_URL }}/" />
<meta property="twitter:url" content="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:"https://oknardia.ru/static/img/MerDY3gpU0w.jpg" }}" /> <meta name="twitter:image" content="{% if IMG_FOR_BLOG %}{{ request.scheme }}://{{ request.get_host }}/media/{{ IMG_FOR_BLOG }}{% else %}{{ request.scheme }}://{{ request.get_host }}/static/img/MerDY3gpU0w.jpg{% endif %}" />
<meta name="relap-image" content="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:"https://oknardia.ru/static/img/MerDY3gpU0w.jpg" }}">{% endblock %} <meta name="relap-image" content="{% if IMG_FOR_BLOG %}{{ request.scheme }}://{{ request.get_host }}/media/{{ IMG_FOR_BLOG }}{% else %}{{ request.scheme }}://{{ request.get_host }}/static/img/MerDY3gpU0w.jpg{% endif %}">
{# <!-- END Дополнительные Metatags --> #}{% endblock %}
{% block Top_JS4 %} {% block Top_JS4 %}
<script type="text/javascript" src="//www.gstatic.com/charts/loader.js"></script> <script type="text/javascript" src="//www.gstatic.com/charts/loader.js"></script>
@@ -79,6 +66,73 @@
} }
</script>{% endblock %} </script>{% endblock %}
{% block ADD_TO_HEAD %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "Оконные профили производства {{ CATALOG_MANUFACT|escapejs }}",
"description": "Страница производителя {{ CATALOG_MANUFACT|escapejs }}: список профилей, рейтинг и описание производителя в каталоге Окнардии.",
"url": "{{ request.scheme }}://{{ request.get_host }}/catalog/profile/{{ CATALOG_URL }}/",
"about": {
"@type": "Organization",
"name": "{{ CATALOG_MANUFACT|escapejs }}"
},
"subjectOf": {
"@type": "CreativeWork",
"name": "Рейтинг Окнардии и как он устроен",
"url": "{{ request.scheme }}://{{ request.get_host }}/blogpost/13/rejting-oknardii-i-kak-on-ustroen-2"
}
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Главная",
"item": "{{ request.scheme }}://{{ request.get_host }}/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Каталог",
"item": "{{ request.scheme }}://{{ request.get_host }}/catalog/"
},
{
"@type": "ListItem",
"position": 3,
"name": "Оконные профили",
"item": "{{ request.scheme }}://{{ request.get_host }}/catalog/profile/"
},
{
"@type": "ListItem",
"position": 4,
"name": "{{ CATALOG_MANUFACT|escapejs }}",
"item": "{{ request.scheme }}://{{ request.get_host }}/catalog/profile/{{ CATALOG_URL }}/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ItemList",
"name": "Профили {{ CATALOG_MANUFACT|escapejs }}",
"itemListElement": [{% for i in PROFILES %}
{
"@type": "ListItem",
"position": {{ forloop.counter }},
"url": "{{ request.scheme }}://{{ request.get_host }}/catalog/profile/{{ i.PROFILE_ID }}-{{ CATALOG_MAN2URL }}/{{ i.PROFILE_ID }}-{{ i.PROFILE_URL }}/",
"name": "{{ i.PROFILE_NAME|escapejs }}"
}{% if not forloop.last %},{% endif %}{% endfor %}
]
}
</script>{% endblock %}
{% block Main_Content %} {% block Main_Content %}
<div class="container-fluid"> <div class="container-fluid">
{# <!--- Хлебные крошки: НАЧАЛО --> #}<div class="row"> {# <!--- Хлебные крошки: НАЧАЛО --> #}<div class="row">
@@ -105,7 +159,9 @@
</tr>{% endfor %} </tr>{% endfor %}
</tbody> </tbody>
</table> </table>
<p class="small-note">Сравнить компонеты рейтинга профилей можно в разделе <a href="/stat/rating/profiles_rank/">Ретинги</a>.</p>{% if not OFFERS_BY_MAUFACTURE == 0 %} <p class="small-note">Сравнить компонеты рейтинга профилей можно в разделе <a href="/stat/rating/profiles_rank/">Ретинги</a>.<br />
Методика расчёта: <a href="/blogpost/13/rejting-oknardii-i-kak-on-ustroen-2" target="_blank"
rel="nofollow">«Рейтинг Окнардии и как он устроен»</a>.</p>{% if not OFFERS_BY_MAUFACTURE == 0 %}
<h4>Доля предложений окон на&nbsp;основе профилей {{ CATALOG_MANUFACT }} в&nbsp;базе &laquo;Окнардия&raquo;</h4> <h4>Доля предложений окон на&nbsp;основе профилей {{ CATALOG_MANUFACT }} в&nbsp;базе &laquo;Окнардия&raquo;</h4>
<div id="donutchart"></div> <div id="donutchart"></div>
<h5>Партнёры &laquo;Окнардия&raquo; использующие профили производства {{ CATALOG_MANUFACT }} в&nbsp;своих предложениях:</h5> <h5>Партнёры &laquo;Окнардия&raquo; использующие профили производства {{ CATALOG_MANUFACT }} в&nbsp;своих предложениях:</h5>

View File

@@ -5,31 +5,17 @@
{% block Add_Body_Attribute %} style="padding-top:70px;"{% endblock %} {% 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 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 Author4Meta %}: Каталог{% endblock %}
{% block CopyrightAuthor4Meta %}: Каталог{% endblock %} {% block CopyrightAuthor4Meta %}: Каталог{% endblock %}
{% block Top_Meta1 %} {% block Top_Meta1 %}{# <!-- BEGIN Дополнительные Metatags --> #}
<!-- Дополнительные Metatags --> <meta name="news_keywords" content="{{ CATALOG_MODEL.sProfileName }}, {{ CATALOG_MODEL.sProfileManufacturer }}, каталог оконных профилей, оконные профили" />
<meta itemprop="author" content="Каталог «Окнардия»" />{% if IMG_FOR_BLOG %} <link rel="canonical" href="{{ request.scheme }}://{{ request.get_host }}/catalog/profile/{{ CATALOG_URL2 }}" />
<meta itemprop="image" content="https://oknardia.ru/media/{{ IMG_FOR_BLOG }}" />{% else %}
<meta itemprop="image" content="https://oknardia.ru/static/img/MerDY3gpU0w.jpg" />{% endif %}
<meta itemprop="datePublished" content="{{ PUB_DAT|date:"Y-m-d" }}" />
<span itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="Каталог «Окнардия»: оконные профили" /></span>
<span itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="name" content="Каталог «Окнардия»" /></span>
<meta itemprop="articleSection" content="Каталог «Окнардия»: оконные профили {{ CATALOG_MODEL.sProfileName }}" />
<meta itemprop="headline" content="Описание и характеристики оконных профилей {{ CATALOG_MODEL.sProfileName }} производства {{ CATALOG_MODEL.sProfileManufacturer }}" />
<meta name="news_keywords" content="{{ CATALOG_MODEL.sProfileName }}, характеристики {{ CATALOG_MODEL.sProfileName }}, описание {{ CATALOG_MODEL.sProfileName }}, оконные профили {{ CATALOG_MODEL.sProfileName }}, {{ CATALOG_MODEL.sProfileManufacturer }}, производитель {{ CATALOG_MODEL.sProfileManufacturer }}, каталог оконных профилей, каталог производителей оконных профилей, каталог профилей, оконные профили, oknardia, окнардия" />
<link rel="canonical" href="https://oknardia.ru//catalog/profile/{{ CATALOG_URL2 }}/" />
<link rel="standout" href="https://oknardia.ru//catalog/profile/{{ CATALOG_URL2 }}/" />
<!-- Разметка для соц-сетей Facebook Open Graph --> <!-- Разметка для соц-сетей Facebook Open Graph -->
<meta property="fb:admins" name="admins" content="100000084781830" /> <meta property="fb:admins" name="admins" content="100000084781830" />
<meta property="fb:pages" content="276108456054163" /> <meta property="fb:pages" content="276108456054163" />
@@ -37,20 +23,100 @@
<meta property="fb:profile_id" name="profile_id" content="https://www.facebook.com/oknardia/" /> <meta property="fb:profile_id" name="profile_id" content="https://www.facebook.com/oknardia/" />
<meta property="og:locale" content="ru_RU" /> <meta property="og:locale" content="ru_RU" />
<meta property="og:site_name" content="oknardia.ru" /> <meta property="og:site_name" content="oknardia.ru" />
<meta property="og:url" content="https://oknardia.ru//catalog/profile/{{ CATALOG_URL2 }}" /> <meta property="og:url" content="{{ request.scheme }}://{{ request.get_host }}/catalog/profile/{{ CATALOG_URL2 }}" />
<meta property="og:type" content="article" /> <meta property="og:type" content="product" />
<meta property="og:title" content="Оконные профили {{ CATALOG_MODEL.sProfileName }} | oknardia.ru" /> <meta property="og:title" content="Оконный профиль {{ CATALOG_MODEL.sProfileName }} | oknardia.ru" />
<meta property="og:description" content="Описание и характеристики оконных профилей {{ CATALOG_MODEL.sProfileName }} производства {{ CATALOG_MODEL.sProfileManufacturer }}" /> <meta property="og:description" content="Оконный профиль {{ CATALOG_MODEL.sProfileName }} от {{ CATALOG_MODEL.sProfileManufacturer }}: характеристики, рейтинг и описание в каталоге Окнардии." />
<meta property="og:image" content="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:"https://oknardia.ru/static/img/MerDY3gpU0w.jpg" }}" /> <meta property="og:image" content="{% if IMG_FOR_BLOG %}{{ request.scheme }}://{{ request.get_host }}/media/{{ IMG_FOR_BLOG }}{% else %}{{ request.scheme }}://{{ request.get_host }}/static/img/MerDY3gpU0w.jpg{% endif %}" />
<link rel="image_src" href="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:"https://oknardia.ru/static/img/MerDY3gpU0w.jpg" }}" /> <link rel="image_src" href="{% if IMG_FOR_BLOG %}{{ request.scheme }}://{{ request.get_host }}/media/{{ IMG_FOR_BLOG }}{% else %}{{ request.scheme }}://{{ request.get_host }}/static/img/MerDY3gpU0w.jpg{% endif %}" />
<!-- Разметка для соц-сетей Twitter Card --> <!-- Разметка для соц-сетей Twitter Card -->
<meta name="twitter:title" content="Оконные профили {{ CATALOG_MODEL.sProfileName }} | oknardia.ru" /> <meta name="twitter:title" content="Оконный профиль {{ CATALOG_MODEL.sProfileName }} | oknardia.ru" />
<meta name="twitter:description" content="Описание и характеристики оконных профилей {{ CATALOG_MODEL.sProfileName }} производства {{ CATALOG_MODEL.sProfileManufacturer }}" /> <meta name="twitter:description" content="Характеристики, рейтинг и описание профиля {{ CATALOG_MODEL.sProfileName }} производства {{ CATALOG_MODEL.sProfileManufacturer }}." />
<meta name="twitter:card" content="summary"> <meta name="twitter:card" content="summary" />
<meta name="twitter:site" content="@oknardia" /> <meta name="twitter:site" content="@oknardia" />
<meta name="twitter:domain" content="oknardia.ru" /> <meta property="twitter:url" content="{{ request.scheme }}://{{ request.get_host }}/catalog/profile/{{ CATALOG_URL2 }}" />
<meta property="twitter:url" content="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:"https://oknardia.ru/static/img/MerDY3gpU0w.jpg" }}" /> <meta name="twitter:image" content="{% if IMG_FOR_BLOG %}{{ request.scheme }}://{{ request.get_host }}/media/{{ IMG_FOR_BLOG }}{% else %}{{ request.scheme }}://{{ request.get_host }}/static/img/MerDY3gpU0w.jpg{% endif %}" />
<meta name="relap-image" content="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:"https://oknardia.ru/static/img/MerDY3gpU0w.jpg" }}">{% endblock %} <meta name="relap-image" content="{% if IMG_FOR_BLOG %}{{ request.scheme }}://{{ request.get_host }}/media/{{ IMG_FOR_BLOG }}{% else %}{{ request.scheme }}://{{ request.get_host }}/static/img/MerDY3gpU0w.jpg{% endif %}">
{# <!-- END Дополнительные Metатags --> #}{% endblock %}
{% block ADD_TO_HEAD %}
{# JSON-LD для карточки оконного профиля и хлебных крошек #}<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "{{ CATALOG_MODEL.sProfileName|escapejs }}",
"description": "Оконный профиль {{ CATALOG_MODEL.sProfileName|escapejs }} производства {{ CATALOG_MODEL.sProfileManufacturer|escapejs }}. Характеристики, рейтинг и применение в наборах партнёров Окнардии.",
"url": "{{ request.scheme }}://{{ request.get_host }}/catalog/profile/{{ CATALOG_URL2 }}",
"image": "{% if IMG_FOR_BLOG %}{{ request.scheme }}://{{ request.get_host }}/media/{{ IMG_FOR_BLOG }}{% else %}{{ request.scheme }}://{{ request.get_host }}/static/img/MerDY3gpU0w.jpg{% endif %}",
"brand": {
"@type": "Brand",
"name": "{{ CATALOG_MODEL.sProfileManufacturer|escapejs }}"
},
"manufacturer": {
"@type": "Organization",
"name": "{{ CATALOG_MODEL.sProfileManufacturer|escapejs }}"
},
"category": "Оконные профили",
"subjectOf": {
"@type": "CreativeWork",
"name": "Рейтинг Окнардии и как он устроен",
"url": "{{ request.scheme }}://{{ request.get_host }}/blogpost/13/rejting-oknardii-i-kak-on-ustroen-2"
},
"additionalProperty": [
{
"@type": "PropertyValue",
"name": "Метод ранжирования",
"value": "Mann-Whitney (Манна-Уитни)"
}
]{% if CATALOG_MODEL.fProfileRating > -0.1 %},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "{{ CATALOG_MODEL.fProfileRating|stringformat:'.2f' }}",
"bestRating": "5",
"worstRating": "0"{% if PROFILE_RATING_SAMPLE_SIZE > 0 %},
"ratingCount": "{{ PROFILE_RATING_SAMPLE_SIZE }}"{% endif %}
}{% endif %}
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Главная",
"item": "{{ request.scheme }}://{{ request.get_host }}/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Каталог",
"item": "{{ request.scheme }}://{{ request.get_host }}/catalog"
},
{
"@type": "ListItem",
"position": 3,
"name": "Оконные профили",
"item": "{{ request.scheme }}://{{ request.get_host }}/catalog/profile"
},
{
"@type": "ListItem",
"position": 4,
"name": "{{ CATALOG_MODEL.sProfileManufacturer|escapejs }}",
"item": "{{ request.scheme }}://{{ request.get_host }}/catalog/profile/{{ CATALOG_URL }}"
},
{
"@type": "ListItem",
"position": 5,
"name": "Профиль {{ CATALOG_MODEL.sProfileName|escapejs }}",
"item": "{{ request.scheme }}://{{ request.get_host }}/catalog/profile/{{ CATALOG_URL2 }}"
}
]
}
</script>
{% endblock %}
{% block Main_Content %}<div class="container-fluid"> {% block Main_Content %}<div class="container-fluid">
@@ -125,7 +191,12 @@
<td colspan="3" {% if not CATALOG_MODEL.sProfileColor == "" %} title="Цвет оконного профиля: {{ CATALOG_MODEL.sProfileColor|capfirst }}"{% endif %}>{% if CATALOG_MODEL.sProfileColor == "" %}—{% else %}<small>{{ CATALOG_MODEL.sProfileColor|capfirst }}{% endif %}</small></td> <td colspan="3" {% if not CATALOG_MODEL.sProfileColor == "" %} title="Цвет оконного профиля: {{ CATALOG_MODEL.sProfileColor|capfirst }}"{% endif %}>{% if CATALOG_MODEL.sProfileColor == "" %}—{% else %}<small>{{ CATALOG_MODEL.sProfileColor|capfirst }}{% endif %}</small></td>
</tr> </tr>
</tbody> </tbody>
</table>{% if LIST_OTHER|length > 1 %} </table>{% if CATALOG_MODEL.fProfileRating > -0.1 %}
<p class="small-note">Рейтинг модели рассчитан алгоритмом «Окнардии» по статистическому ранжированию
характеристик (метод Манна-Уитни){% if PROFILE_RATING_SAMPLE_SIZE > 0 %} на выборке из
{{ PROFILE_RATING_SAMPLE_SIZE }} моделей профилей{% endif %}. Методика расчёта:
<a href="/blogpost/13/rejting-oknardii-i-kak-on-ustroen-2" target="_blank"
rel="nofollow">«Рейтинг Окнардии и как он устроен»</a>.</p>{% endif %}{% if LIST_OTHER|length > 1 %}
<h4>Прочие характеристики профиля:</h4> <h4>Прочие характеристики профиля:</h4>
<ul>{% for LI_BULL in LIST_OTHER %} <ul>{% for LI_BULL in LIST_OTHER %}
<li>{{ LI_BULL|safe }}</li>{% endfor %} <li>{{ LI_BULL|safe }}</li>{% endfor %}

View File

@@ -5,30 +5,18 @@
{% block Add_Body_Attribute %} style="padding-top:70px;"{% endblock %} {% block Add_Body_Attribute %} style="padding-top:70px;"{% endblock %}
{% block Description %}Каталог «Окнардия»{% endblock %} {% block Description %}Каталог «Окнардия»: оконные и дверные профили, стеклопакеты, фурнитура, типовые серии домов, стандартные проёмы и партнёры-поставщики окон.{% endblock %}
{% block Keywords %}Каталог, каталог оконных профилей, каталог стеклопакетов, каталог фурнитуры, каталог серий домов, каталог оконных проёмов, oknardia, окнардия {{ META_KEYWORDS|default:"" }} {% 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 Author4Meta %}: Каталог «Окнардия»{% endblock %}
{% block CopyrightAuthor4Meta %}: Каталог «Окнардия»{% endblock %} {% block CopyrightAuthor4Meta %}: Каталог «Окнардия»{% endblock %}
{% block Top_Meta1 %}{# <!-- BEGIN Дополнительные Metatags --> #} {% block Top_Meta1 %}{# <!-- BEGIN Дополнительные Metatags --> #}
<meta itemprop="author" content="Каталог «Окнардия»" />{% if IMG_FOR_BLOG %} {# Удалить: itemprop microdata, rel=standout, twitter:domain — устаревшие теги #}
<meta itemprop="image" content="https://oknardia.ru/media/{{ IMG_FOR_BLOG }}" />{% else %} <meta name="news_keywords" content="каталог окон, каталог оконных профилей, серии домов, стандартные проёмы" />
<meta itemprop="image" content="https://oknardia.ru/static/img/MerDY3gpU0w.jpg" />{% endif %} <link rel="canonical" href="{{ request.scheme }}://{{ request.get_host }}/catalog/" />
<meta itemprop="datePublished" content="{% if PUB_DAT %}{{ PUB_DAT|date:"Y-m-d" }}{% else %}{% now "c" %}{% endif %}" />
<span itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="Каталог «Окнардия»" /></span>
<span itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="name" content="Каталог «Окнардия»" /></span>
<meta itemprop="articleSection" content="Каталог «Окнардия»" />
<meta itemprop="headline" content="Главная страница каталога «Окнардия»: оконные и дверные профили, стеклопакеты, фурнитуов, типовые серии домов, стандартные проемы, партнёры..." />
<meta name="news_keywords" content="{{ HEADER }}" />
<link rel="canonical" href="https://oknardia.ru//catalog/" />
<link rel="standout" href="https://oknardia.ru//catalog/" />
<!-- Разметка для соц-сетей Facebook Open Graph --> <!-- Разметка для соц-сетей Facebook Open Graph -->
<meta property="fb:admins" name="admins" content="100000084781830" /> <meta property="fb:admins" name="admins" content="100000084781830" />
<meta property="fb:pages" content="276108456054163" /> <meta property="fb:pages" content="276108456054163" />
@@ -36,21 +24,76 @@
<meta property="fb:profile_id" name="profile_id" content="https://www.facebook.com/oknardia/" /> <meta property="fb:profile_id" name="profile_id" content="https://www.facebook.com/oknardia/" />
<meta property="og:locale" content="ru_RU" /> <meta property="og:locale" content="ru_RU" />
<meta property="og:site_name" content="oknardia.ru" /> <meta property="og:site_name" content="oknardia.ru" />
<meta property="og:url" content="https://oknardia.ru//catalog/" /> <meta property="og:url" content="{{ request.scheme }}://{{ request.get_host }}/catalog/" />
<meta property="og:type" content="article" /> <meta property="og:type" content="website" />
<meta property="og:title" content="Каталог «Окнардия» | oknardia.ru" /> <meta property="og:title" content="Каталог «Окнардия» | oknardia.ru" />
<meta property="og:description" content="Главная страница каталога «Окнардия»: оконные и дверные профили, стеклопакеты, фурнитуов, типовые серии домов, стандартные проемы, партнёры..." /> <meta property="og:description" content="Оконные и дверные профили, стеклопакеты, типовые серии домов, стандартные проёмы и партнёры-поставщики окон." />
<meta property="og:image" content="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:"https://oknardia.ru/static/img/MerDY3gpU0w.jpg" }}" /> <meta property="og:image" content="{{ request.scheme }}://{{ request.get_host }}/static/img/MerDY3gpU0w.jpg" />
<link rel="image_src" href="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:"https://oknardia.ru/static/img/MerDY3gpU0w.jpg" }}" /> <link rel="image_src" href="{{ request.scheme }}://{{ request.get_host }}/static/img/MerDY3gpU0w.jpg" />
<!-- Разметка для соц-сетей Twitter Card --> <!-- Разметка для соц-сетей Twitter Card -->
<meta name="twitter:title" content="{{ HEADER }}"/> <meta name="twitter:title" content="Каталог «Окнардия» | oknardia.ru" />
<meta name="twitter:description" content="Главная страница каталога «Окнардия»: оконные и дверные профили, стеклопакеты, фурнитуов, типовые серии домов, стандартные проемы, партнёры..." /> <meta name="twitter:description" content="Оконные и дверные профили, стеклопакеты, типовые серии домов, стандартные проёмы и партнёры-поставщики окон." />
<meta name="twitter:card" content="summary"> <meta name="twitter:card" content="summary" />
<meta name="twitter:site" content="@oknardia" /> <meta name="twitter:site" content="@oknardia" />
<meta name="twitter:domain" content="oknardia.ru" /> <meta property="twitter:url" content="{{ request.scheme }}://{{ request.get_host }}/catalog/" />
<meta property="twitter:url" content="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:'https://oknardia.ru/static/img/MerDY3gpU0w.jpg' }}" /> <meta name="twitter:image" content="{{ request.scheme }}://{{ request.get_host }}/static/img/MerDY3gpU0w.jpg" />
<meta name="relap-image" content="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:'https://oknardia.ru/static/img/MerDY3gpU0w.jpg' }}" /> <meta name="relap-image" content="{{ request.scheme }}://{{ request.get_host }}/static/img/MerDY3gpU0w.jpg" />
{# <!-- END Дополнительные Metatags --> #}{% endblock %} {# <!-- END Дополнительные Metатags --> #}{% endblock %}
{% block ADD_TO_HEAD %}
{# JSON-LD: корневая страница каталога — CollectionPage + BreadcrumbList + структура разделов #}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "Каталог «Окнардия»",
"description": "Оконные и дверные профили, стеклопакеты, типовые серии домов, стандартные проёмы и партнёры-поставщики окон.",
"url": "{{ request.scheme }}://{{ request.get_host }}/catalog/",
"hasPart": [
{
"@type": "CollectionPage",
"name": "Оконные и дверные профили",
"url": "{{ request.scheme }}://{{ request.get_host }}/catalog/profile/"
},
{
"@type": "CollectionPage",
"name": "Каталог серий домов",
"url": "{{ request.scheme }}://{{ request.get_host }}/catalog/seria/"
},
{
"@type": "CollectionPage",
"name": "Стандартные оконные проёмы и балконные блоки",
"url": "{{ request.scheme }}://{{ request.get_host }}/catalog/standard_opening/"
},
{
"@type": "CollectionPage",
"name": "Производители и поставщики окон",
"url": "{{ request.scheme }}://{{ request.get_host }}/catalog/company/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Главная",
"item": "{{ request.scheme }}://{{ request.get_host }}/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Каталог",
"item": "{{ request.scheme }}://{{ request.get_host }}/catalog/"
}
]
}
</script>
{% endblock %}
{% block Main_Content %} {% block Main_Content %}
<div class="container-fluid"> <div class="container-fluid">
@@ -66,7 +109,7 @@
<dIv class="row -catalog2-"> <dIv class="row -catalog2-">
{# ПЕРВЫЙ РАЗДЕЛ С РЕКЛАМОЙ СБОКУ #}<div class="col-md-9 col-xs-8"> {# ПЕРВЫЙ РАЗДЕЛ С РЕКЛАМОЙ СБОКУ #}<div class="col-md-9 col-xs-8">
{# И ЕЩЁ ОДИН РАЗДЕЛ #}<h2 class="header"><a href="/catalog/profile">Оконные и&nbsp;дверные профили</a></h2> {# И ЕЩЁ ОДИН РАЗДЕЛ #}<h2 class="header"><a href="/catalog/profile">Оконные и&nbsp;дверные профили</a></h2>
<p class="col-md-offset-1 col-xs-offset-1">Каталог систем оконных и&nbsp;дверных профилей и&nbsp;описание <nobr>компаний-производителей</nobr>. Каталог содержит детальные характеристики профилей: сопротивление теплопередаче <nobr><i>Ro</i>&nbsp;(<i>м&sup2;&times;&deg;C/Вт</i>)</nobr>, коэффициент звукоизоляции (<i>дБ</i>), число камер рамы и&nbsp;створки, тип и&nbsp;армирования, монтажная ширина и&nbsp;другие. Пластиковые (ПВХ), деревянные, комбинированные и&nbsp;другие системы профилей.</p> <p class="col-md-offset-1 col-xs-offset-1">Каталог систем оконных и&nbsp;дверных профилей и&nbsp;описание <nobr>компаний-производителей</nobr>. Каталог содержит детальные характеристики профилей: сопротивление теплопередаче <nobr><i>Ro</i>&nbsp;(<i>м&sup2;&times;&deg;C/Вт</i>)</nobr>, коэффициент звукоизоляции (<i>дБ</i>), число камер рамы и&nbsp;створки, тип и&nbsp;армирование, монтажная ширина и&nbsp;другие. Пластиковые (ПВХ), деревянные, комбинированные и&nbsp;другие системы профилей.</p>
{# И ЕЩЁ ОДИН РАЗДЕЛ #}<h2 class="header"><a href="/catalog/seria">Каталог серий домов</a></h2> {# И ЕЩЁ ОДИН РАЗДЕЛ #}<h2 class="header"><a href="/catalog/seria">Каталог серий домов</a></h2>
<p class="col-md-offset-1 col-xs-offset-1">Типовые проекты жилого строительства, вхождение стандартных оконных проёмов и&nbsp;балконных блоков в&nbsp;планировки типовых квартир серии, графики ввода в&nbsp;эксплуатацию зданий серии, география строительства, износ жилого фонда&hellip;</p> <p class="col-md-offset-1 col-xs-offset-1">Типовые проекты жилого строительства, вхождение стандартных оконных проёмов и&nbsp;балконных блоков в&nbsp;планировки типовых квартир серии, графики ввода в&nbsp;эксплуатацию зданий серии, география строительства, износ жилого фонда&hellip;</p>
</div> </div>
@@ -77,7 +120,7 @@
</div> </div>
{# И ОПЯТЬ РАЗДЕЛ С РЕКЛАМОЙ СБОКУ #}<div class="col-md-9 col-xs-8"> {# И ОПЯТЬ РАЗДЕЛ С РЕКЛАМОЙ СБОКУ #}<div class="col-md-9 col-xs-8">
{# И ЕЩЁ ОДИН РАЗДЕЛ #}<h2 class="header"><a href="/catalog/company">Производители и&nbsp;поставщики окон</a> <small style="font-size:xx-small;">&nbsp;разработке)</small></h2> {# И ЕЩЁ ОДИН РАЗДЕЛ #}<h2 class="header"><a href="/catalog/company">Производители и&nbsp;поставщики окон</a> <small style="font-size:xx-small;">&nbsp;разработке)</small></h2>
<p class="col-md-offset-1 col-xs-offset-1">Компании-партнеры &laquo;Окнардии&raquo;, контатная информация, условия и скидки, конфигурации и рейтинги их оконных предложений.</p> <p class="col-md-offset-1 col-xs-offset-1">Компании-партнеры &laquo;Окнардии&raquo;, контактная информация, условия и скидки, конфигурации и рейтинги их оконных предложений.</p>
{# ВТОРОЙ РАЗДЕЛ #} {# ВТОРОЙ РАЗДЕЛ #}
{# И ЕЩЁ ОДИН РАЗДЕЛ #}<h2 class="header"><a href="javascript://" class="not-ready">Каталог стеклопакетов</a> <small style="font-size:xx-small;">&nbsp;разработке)</small></h2> {# И ЕЩЁ ОДИН РАЗДЕЛ #}<h2 class="header"><a href="javascript://" class="not-ready">Каталог стеклопакетов</a> <small style="font-size:xx-small;">&nbsp;разработке)</small></h2>
<p class="col-md-offset-1 col-xs-offset-1">Стеклопакеты и&nbsp;описание <nobr>компаний-производителей</nobr> стекла. Каталог содержит детальные характеристики: схемы стеклопакетов, наличие напыления k- и&nbsp;<nobr>i-микропленок</nobr>, тип <nobr>газа-заполнителя</nobr>, сопротивление теплопередаче <nobr><i>Ro</i>&nbsp;(<i>м&sup2;&times;&deg;C/Вт</i>)</nobr>, коэффициент звукоизоляции (<i>дБ</i>), число камер, тонирование&hellip;</p> <p class="col-md-offset-1 col-xs-offset-1">Стеклопакеты и&nbsp;описание <nobr>компаний-производителей</nobr> стекла. Каталог содержит детальные характеристики: схемы стеклопакетов, наличие напыления k- и&nbsp;<nobr>i-микропленок</nobr>, тип <nobr>газа-заполнителя</nobr>, сопротивление теплопередаче <nobr><i>Ro</i>&nbsp;(<i>м&sup2;&times;&deg;C/Вт</i>)</nobr>, коэффициент звукоизоляции (<i>дБ</i>), число камер, тонирование&hellip;</p>
@@ -98,5 +141,3 @@
{% include "report/report_log_user_visit.html" %} {% include "report/report_log_user_visit.html" %}
</div> </div>
</div>{% endblock %} </div>{% endblock %}

View File

@@ -5,30 +5,17 @@
{% block Add_Body_Attribute %} style="padding-top:70px;"{% endblock %} {% block Add_Body_Attribute %} style="padding-top:70px;"{% endblock %}
{% block Description %}Каталог серий зданий и типовое панельное строительство оконного агрегатора Окнардия{% endblock %} {% block Description %}Каталог типовых серий домов России: панельные и блочные серии, ссылки на подробные страницы серий, их планировки и стандартные оконные проёмы.{% endblock %}
{% block Keywords %}типовое строительство, панельные серии, серии домов, серии зданий, типовые дома, типовые здания, каталог серий типового строительства, oknardia, окнардия {{ META_KEYWORDS|default:"" }} {% endblock %} {% block Keywords %}типовое строительство, панельные серии, серии домов, серии зданий, типовые дома, типовые здания, каталог серий типового строительства, oknardia, окнардия{% 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 Author4Meta %}Серии домов : {% endblock %}
{% block CopyrightAuthor4Meta %}Cерии домов : {% endblock %} {% block CopyrightAuthor4Meta %}Cерии домов : {% endblock %}
{% block Top_Meta1 %}{# <!-- BEGIN Дополнительные Metatags --> #} {% block Top_Meta1 %}{# <!-- BEGIN Дополнительные Metatags --> #}
<meta itemprop="author" content="Каталог «Окнардия»" />{% if IMG_FOR_BLOG %} {# Legacy microdata (itemprop/itemscope) удалена: используем JSON-LD в ADD_TO_HEAD #}
<meta itemprop="image" content="https://oknardia.ru/media/{{ IMG_FOR_BLOG }}" />{% else %} <link rel="canonical" href="https://oknardia.ru/catalog/seria/" />
<meta itemprop="image" content="https://oknardia.ru/static/img/MerDY3gpU0w.jpg" />{% endif %}
<meta itemprop="datePublished" content="{{ PUB_DAT|date:"Y-m-d" }}" />
<span itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="Каталог «Окнардия»" /></span>
<span itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="name" content="Каталог «Окнардия»" /></span>
<meta itemprop="articleSection" content="Каталог «Окнардия»" />
<meta itemprop="headline" content="Серии типового строительства | oknardia.ru" />
<meta name="news_keywords" content="{{ HEADER|striptags }}" />
<link rel="canonical" href="https://oknardia.ru//catalog/seria/" />
<link rel="standout" href="https://oknardia.ru//catalog/seria/" />
<!-- Разметка для соц-сетей Facebook Open Graph --> <!-- Разметка для соц-сетей Facebook Open Graph -->
<meta property="fb:admins" name="admins" content="100000084781830" /> <meta property="fb:admins" name="admins" content="100000084781830" />
<meta property="fb:pages" content="276108456054163" /> <meta property="fb:pages" content="276108456054163" />
@@ -36,23 +23,64 @@
<meta property="fb:profile_id" name="profile_id" content="https://www.facebook.com/oknardia/" /> <meta property="fb:profile_id" name="profile_id" content="https://www.facebook.com/oknardia/" />
<meta property="og:locale" content="ru_RU" /> <meta property="og:locale" content="ru_RU" />
<meta property="og:site_name" content="oknardia.ru" /> <meta property="og:site_name" content="oknardia.ru" />
<meta property="og:url" content="https://oknardia.ru//catalog/seria/" /> <meta property="og:url" content="https://oknardia.ru/catalog/seria/" />
<meta property="og:type" content="article" /> <meta property="og:type" content="article" />
<meta property="og:title" content="Каталог «Окнардия» | oknardia.ru" /> <meta property="og:title" content="Каталог типовых серий домов | oknardia.ru" />
<meta property="og:description" content="Серии типового строительства, типовые проекты жилого строительства, вхождение стандартных оконных проёмов и балконных блоков в планировки типовых квартир серии, графики ввода в эксплуатацию зданий серии, география строительства, износ жилого фонда..." /> <meta property="og:description" content="Серии типового строительства, планировки и ссылки на подробные страницы серий домов с данными по стандартным оконным проёмам." />
<meta property="og:image" content="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:'https://oknardia.ru/static/img/MerDY3gpU0w.jpg' }}" /> <meta property="og:image" content="https://oknardia.ru/static/img/MerDY3gpU0w.jpg" />
<link rel="image_src" href="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:'https://oknardia.ru/static/img/MerDY3gpU0w.jpg' }}" /> <link rel="image_src" href="https://oknardia.ru/static/img/MerDY3gpU0w.jpg" />
<!-- Разметка для соц-сетей Twitter Card --> <!-- Разметка для соц-сетей Twitter Card -->
<meta name="twitter:title" content="Каталог типовых серий домов | oknardia.ru" /> <meta name="twitter:title" content="Каталог типовых серий домов | oknardia.ru" />
<meta name="twitter:description" content="Серии типового строительства, типовые проекты жилого строительства, вхождение стандартных оконных проёмов и балконных блоков в планировки типовых квартир серии, графики ввода в эксплуатацию зданий серии, география строительства, износ жилого фонда..." /> <meta name="twitter:description" content="Каталог типовых серий домов России: список серий и переходы на подробные страницы с планировками и окнами." />
<meta name="twitter:card" content="summary"> <meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@oknardia" /> <meta name="twitter:site" content="@oknardia" />
<meta name="twitter:domain" content="oknardia.ru" /> <meta property="twitter:url" content="https://oknardia.ru/catalog/seria/" />
<meta property="twitter:url" content="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:'https://oknardia.ru/static/img/MerDY3gpU0w.jpg' }}" /> <meta name="twitter:image" content="https://oknardia.ru/static/img/MerDY3gpU0w.jpg" />
<meta name="relap-image" content="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:'https://oknardia.ru/static/img/MerDY3gpU0w.jpg' }}"> <meta name="relap-image" content="https://oknardia.ru/static/img/MerDY3gpU0w.jpg">
{# <!-- END Дополнительные Metatags --> #}{% endblock %} {# <!-- END Дополнительные Metatags --> #}{% endblock %}
{% block ADD_TO_HEAD %}{% comment %}
JSON-LD для страницы списка типовых серий домов.
CollectionPage + ItemList помогают поисковику трактовать страницу как каталог сущностей.
{% endcomment %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "Каталог серий типового строительства",
"description": "Список типовых серий домов России с переходом на подробные страницы серий.",
"url": "https://oknardia.ru/catalog/seria/",
"inLanguage": "ru-RU",
"isPartOf": {
"@type": "WebSite",
"name": "Окнардия",
"url": "https://oknardia.ru"
},
"mainEntity": {
"@type": "ItemList",
"name": "Типовые серии домов",
"numberOfItems": {{ SERIAS|length }},
"itemListElement": [
{% for i in SERIAS %}
{
"@type": "ListItem",
"position": {{ forloop.counter }},
"item": {
"@type": "Thing",
"name": "Серия {{ i.NAME|escapejs }}",
"url": "https://oknardia.ru/catalog/seria/{{ i.NAME_T }}/all{{ i.ID }}",
"image": "https://oknardia.ru/media/{{ i.URL }}"
}
}{% if not forloop.last %},{% endif %}
{% endfor %}
]
}
}
</script>
{% endblock %}
{% block Main_Content %} {% block Main_Content %}
<div class="container-fluid"> <div class="container-fluid">
{# <!--- Хлебные крошки: НАЧАЛО --> #}<div class="row"> {# <!--- Хлебные крошки: НАЧАЛО --> #}<div class="row">

View File

@@ -8,26 +8,16 @@
{% block Keywords %}типовые окна, размеры окон, оконные проемы, балконный блок, стандартные окна, размеры окон в панельном доме, серия дома, каталог окон, схемы открывания окон, П-44, II-49, 1-515, oknardia, окнардия{% endblock %} {% block Keywords %}типовые окна, размеры окон, оконные проемы, балконный блок, стандартные окна, размеры окон в панельном доме, серия дома, каталог окон, схемы открывания окон, П-44, II-49, 1-515, oknardia, окнардия{% endblock %}
{% block Date4Meta %}{{ PUB_DAT|date:"Y-m-d" }}{% endblock %} {# Date4Meta/Last4Meta не переопределяем: используем дефолт из base.html #}
{% block Last4Meta %}{{ PUB_DAT|date:"Y-m-d" }}{% endblock %}
{% block Author4Meta %}: Каталог «Окнардия»{% endblock %} {% block Author4Meta %}: Каталог «Окнардия»{% endblock %}
{% block CopyrightAuthor4Meta %}: Каталог «Окнардия»{% endblock %} {% block CopyrightAuthor4Meta %}: Каталог «Окнардия»{% endblock %}
{% block Top_Meta1 %}{# <!-- BEGIN Дополнительные Metatags --> #} {% block Top_Meta1 %}{# <!-- BEGIN Дополнительные Metatags --> #}
<meta itemprop="author" content="Каталог «Окнардия»" />{% if IMG_FOR_BLOG %} {# Legacy microdata (itemprop/itemscope) удалена: используем JSON-LD в ADD_TO_HEAD #}
<meta itemprop="image" content="https://oknardia.ru/media/{{ IMG_FOR_BLOG }}" />{% else %}
<meta itemprop="image" content="https://oknardia.ru/static/img/MerDY3gpU0w.jpg" />{% endif %}
<meta itemprop="datePublished" content="{{ PUB_DAT|date:"Y-m-d" }}" />
<span itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="Каталог «Окнардия»" /></span>
<span itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="name" content="Каталог «Окнардия»" /></span>
<meta itemprop="articleSection" content="Каталог «Окнардия»" />
<meta itemprop="headline" content="Каталог «Окнардия»: стандартные оконные проёмы типовых серий домов..." />
<meta name="news_keywords" content="{{ HEADER|striptags }}" /> <meta name="news_keywords" content="{{ HEADER|striptags }}" />
<link rel="canonical" href="https://oknardia.ru//catalog/" /> <link rel="canonical" href="https://oknardia.ru/catalog/standard_opening" />
<link rel="standout" href="https://oknardia.ru//catalog/" />
<!-- Разметка для соц-сетей Facebook Open Graph --> <!-- Разметка для соц-сетей Facebook Open Graph -->
<meta property="fb:admins" name="admins" content="100000084781830" /> <meta property="fb:admins" name="admins" content="100000084781830" />
<meta property="fb:pages" content="276108456054163" /> <meta property="fb:pages" content="276108456054163" />
@@ -35,21 +25,67 @@
<meta property="fb:profile_id" name="profile_id" content="https://www.facebook.com/oknardia/" /> <meta property="fb:profile_id" name="profile_id" content="https://www.facebook.com/oknardia/" />
<meta property="og:locale" content="ru_RU" /> <meta property="og:locale" content="ru_RU" />
<meta property="og:site_name" content="oknardia.ru" /> <meta property="og:site_name" content="oknardia.ru" />
<meta property="og:url" content="https://oknardia.ru//catalog/" /> <meta property="og:url" content="https://oknardia.ru/catalog/standard_opening" />
<meta property="og:type" content="article" /> <meta property="og:type" content="article" />
<meta property="og:title" content="Каталог «Окнардия» | oknardia.ru" /> <meta property="og:title" content="Каталог «Окнардия»: стандартные оконные проёмы типовых серий домов | oknardia.ru" />
<meta property="og:description" content="Каталог «Окнардия»: стандартные оконные проёмы типовых серий домов..." /> <meta property="og:description" content="Каталог стандартных оконных проёмов и балконных блоков: размеры, схемы открывания и серии домов, в которых они встречаются." />
<meta property="og:image" content="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:"https://oknardia.ru/static/img/MerDY3gpU0w.jpg" }}" /> <meta property="og:image" content="https://oknardia.ru/static/img/MerDY3gpU0w.jpg" />
<link rel="image_src" href="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:"https://oknardia.ru/static/img/MerDY3gpU0w.jpg" }}" /> <link rel="image_src" href="https://oknardia.ru/static/img/MerDY3gpU0w.jpg" />
<!-- Разметка для соц-сетей Twitter Card --> <!-- Разметка для соц-сетей Twitter Card -->
<meta name="twitter:title" content="Каталог «Окнардия»: стандартные оконные проёмы типовых серий домов... | oknardia.ru"/> <meta name="twitter:title" content="Стандартные оконные проёмы и балконные блоки | oknardia.ru"/>
<meta name="twitter:description" content="Каталог «Окнардия»: стандартные оконные проёмы типовых серий домов..." /> <meta name="twitter:description" content="Размеры, схемы открывания и типовые серии домов для стандартных оконных проёмов в каталоге Окнардии." />
<meta name="twitter:card" content="summary"> <meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@oknardia" /> <meta name="twitter:site" content="@oknardia" />
<meta name="twitter:domain" content="oknardia.ru" /> <meta name="twitter:image" content="https://oknardia.ru/static/img/MerDY3gpU0w.jpg" />
<meta property="twitter:url" content="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:'https://oknardia.ru/static/img/MerDY3gpU0w.jpg' }}" /> <meta name="relap-image" content="https://oknardia.ru/static/img/MerDY3gpU0w.jpg" />
<meta name="relap-image" content="{% if IMG_FOR_BLOG %}https://oknardia.ru/media/{% endif %}{{ IMG_FOR_BLOG|default:'https://oknardia.ru/static/img/MerDY3gpU0w.jpg' }}" /> {# <!-- END Дополнительные Metатags --> #}{% endblock %}
{# <!-- END Дополнительные Metatags --> #}{% endblock %}
{% block ADD_TO_HEAD %}{% comment %}
JSON-LD для страницы-списка типовых оконных проемов.
CollectionPage + ItemList помогают поисковику понять структуру каталога.
{% endcomment %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "Стандартные оконные проёмы и балконные блоки",
"description": "Каталог стандартных оконных проёмов и балконных блоков с размерами, схемами открывания и привязкой к типовым сериям домов.",
"url": "https://oknardia.ru/catalog/standard_opening",
"inLanguage": "ru-RU",
"isPartOf": {
"@type": "WebSite",
"name": "Окнардия",
"url": "https://oknardia.ru"
},
"mainEntity": {
"@type": "ItemList",
"name": "Типовые оконные проёмы",
"numberOfItems": {{ LIST_WIN_OPENING|length }},
"itemListElement": [
{% for i in LIST_WIN_OPENING %}
{
"@type": "ListItem",
"position": {{ forloop.counter }},
"item": {
"@type": "Thing",
"name": "{{ i.DESCRIPTION|escapejs }}",
"description": "{{ i.DESCRIPTION_L|escapejs }}",
"url": "https://oknardia.ru/tsena-odnogo-okna/{{ i.W|stringformat:'.0f' }}x{{ i.H|stringformat:'.0f' }}mm/tip{{ i.ID }}",
"image": "https://oknardia.ru{% static i.URL2IMG %}",
"additionalProperty": [
{"@type": "PropertyValue", "name": "Ширина", "value": "{{ i.W|stringformat:'.0f' }} мм"},
{"@type": "PropertyValue", "name": "Высота", "value": "{{ i.H|stringformat:'.0f' }} мм"},
{"@type": "PropertyValue", "name": "Балконный блок: окно", "value": "{% if i.IS_NEAR_DOOR %}да{% else %}нет{% endif %}"},
{"@type": "PropertyValue", "name": "Балконный блок: дверь", "value": "{% if i.IS_DOOR %}да{% else %}нет{% endif %}"}
]
}
}{% if not forloop.last %},{% endif %}
{% endfor %}
]
}
}
</script>
{% endblock %}
{% block Main_Content %} {% block Main_Content %}
<div class="container-fluid"> <div class="container-fluid">

View File

@@ -7,10 +7,108 @@
{% block Add_Body_Attribute %} style="padding-top:70px;"{% endblock %} {% 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-параметрах #}<link rel="canonical" href="https://oknardia.ru/catalog/seria/{{ THIS_SERIA_NAME_T }}/all{{ THIS_SERIA_ID }}/" />
<!-- Разметка для соц-сетей Facebook Open Graph -->
<meta property="fb:admins" name="admins" content="100000084781830" />
<meta property="fb:pages" content="276108456054163" />
<meta property="fb:app_id" content="258354027974262" />
<meta property="fb:profile_id" name="profile_id" content="https://www.facebook.com/oknardia/" />
<meta property="og:type" content="article" />
<meta property="og:site_name" content="oknardia.ru" />
<meta property="og:locale" content="ru_RU" />
<meta property="og:url" content="https://oknardia.ru/catalog/seria/{{ THIS_SERIA_NAME_T }}/all{{ THIS_SERIA_ID }}/" />
<meta property="og:title" content="Серия {{ THIS_SERIA_NAME }}: размеры окон, планировки и карта домов | oknardia.ru" />
<meta property="og:description" content="Типовые размеры и схемы открывания оконных проёмов в домах серии {{ THIS_SERIA_NAME }}. Карта зданий, статистика ввода в эксплуатацию по годам и цены на замену окон." />{% if THIS_SERIA_IMAGE_URL and THIS_SERIA_IMAGE_URL != "null.gif" %}
<meta property="og:image" content="https://oknardia.ru/media/{{ THIS_SERIA_IMAGE_URL }}" />
<link rel="image_src" href="https://oknardia.ru/media/{{ THIS_SERIA_IMAGE_URL }}" />{% else %}
<meta property="og:image" content="https://oknardia.ru/static/img/MerDY3gpU0w.jpg" />
<link rel="image_src" href="https://oknardia.ru/static/img/MerDY3gpU0w.jpg" />{% endif %}
<!-- Разметка для соц-сетей Twitter Card -->
<meta name="twitter:card" content="summary" />
<meta name="twitter:site" content="@oknardia" />
<meta name="twitter:title" content="Серия {{ THIS_SERIA_NAME }}: размеры окон, планировки и карта домов | oknardia.ru" />
<meta name="twitter:description" content="Типовые оконные проёмы, схемы открывания и цены на замену окон в домах серии {{ THIS_SERIA_NAME }}." />{% if THIS_SERIA_IMAGE_URL and THIS_SERIA_IMAGE_URL != "null.gif" %}
<meta name="twitter:image" content="https://oknardia.ru/media/{{ THIS_SERIA_IMAGE_URL }}" />{% else %}
<meta name="twitter:image" content="https://oknardia.ru/static/img/MerDY3gpU0w.jpg" />{% endif %}
<meta property="twitter:url" content="https://oknardia.ru/catalog/seria/{{ THIS_SERIA_NAME_T }}/all{{ THIS_SERIA_ID }}/" />
{% endblock %}
{% block ADD_TO_HEAD %}{% comment %}
JSON-LD для страницы серии типового строительства.
BreadcrumbList: Google показывает хлебные крошки в сниппете вместо сырого URL — это важно,
т.к. URL вида /catalog/seria/p-44/all7 выглядит некрасиво без расшифровки.
TechArticle: описывает страницу как технический справочный материал по серии домов.
{% endcomment %}
{# JSON-LD: BreadcrumbList #}<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Главная",
"item": "https://oknardia.ru/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Каталог",
"item": "https://oknardia.ru/catalog/"
},
{
"@type": "ListItem",
"position": 3,
"name": "Типовые серии домов",
"item": "https://oknardia.ru/catalog/seria/"
},
{
"@type": "ListItem",
"position": 4,
"name": "Серия {{ THIS_SERIA_NAME|escapejs }}",
"item": "https://oknardia.ru/catalog/seria/{{ THIS_SERIA_NAME_T }}/all{{ THIS_SERIA_ID }}/"
}
]
}
</script>
{# JSON-LD: TechArticle — технический справочный материал о серии типового строительства #}<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "TechArticle",
"inLanguage": "ru-RU",
"headline": "Серия {{ THIS_SERIA_NAME|escapejs }}: типовые размеры оконных проёмов, схемы открывания и карта зданий",
"description": "Технические характеристики оконных проёмов в домах типовой серии {{ THIS_SERIA_NAME|escapejs }}: размеры, схемы открывания, планировки квартир, карта зданий на территории России. Статистика ввода зданий в эксплуатацию по годам.",
"url": "https://oknardia.ru/catalog/seria/{{ THIS_SERIA_NAME_T }}/all{{ THIS_SERIA_ID }}/", {% if THIS_SERIA_IMAGE_URL and THIS_SERIA_IMAGE_URL != "null.gif" %}
"image": "https://oknardia.ru/media/{{ THIS_SERIA_IMAGE_URL }}",{% else %}
"image": "https://oknardia.ru/static/img/MerDY3gpU0w.jpg",{% endif %}
"about": {
"@type": "Thing",
"name": "Серия типового строительства {{ THIS_SERIA_NAME|escapejs }}",
"description": "Типовой проект жилых зданий серии {{ THIS_SERIA_NAME|escapejs }} в России"
},
"publisher": {
"@type": "Organization",
"name": "Окнардия",
"url": "https://oknardia.ru",
"logo": {
"@type": "ImageObject",
"url": "https://oknardia.ru/static/img/MerDY3gpU0w.jpg"
}
},
"isPartOf": {
"@type": "WebSite",
"name": "Окнардия — агрегатор цен на замену окон",
"url": "https://oknardia.ru"
}
}
</script>
{% endblock %}
{% block Top_JS1 %} {% block Top_JS1 %}
<script type="text/javascript"> <script type="text/javascript">
$(window).load(function () { $(window).load(function () {
@@ -39,7 +137,7 @@
<div class="row"> <div class="row">
<div class="col-lg-10"> <div class="col-lg-10">
<h2 class="header">Дома серии {{ THIS_SERIA_NAME }}: типовые размеры и схемы открывания</h2> <h2 class="header">Дома серии {{ THIS_SERIA_NAME }}: типовые размеры и&nbsp;схемы открывания</h2>
</div> </div>
<div class="col-lg-12" style="padding:1em 0 0 0;margin-left:-1em"> <div class="col-lg-12" style="padding:1em 0 0 0;margin-left:-1em">
{% include 'report/show_big_flap_pictures.html' %} {% include 'report/show_big_flap_pictures.html' %}
@@ -48,7 +146,7 @@
<div class="row"> <div class="row">
<div class="col-lg-8 col-xs-12 col-md-offset-1"> <div class="col-lg-8 col-xs-12 col-md-offset-1">
<h3 class="header">Оконные проёмы в типовых квартирах <nobr>серии {{ THIS_SERIA_NAME }}</nobr></h3> <h3 class="header">Оконные проёмы в&nbsp;типовых квартирах <nobr>серии {{ THIS_SERIA_NAME }}</nobr></h3>
</div> </div>
<div class="col-lg-8 col-xs-12 col-md-offset-1"> <div class="col-lg-8 col-xs-12 col-md-offset-1">
<!--- прешаблон начало ---><table style="padding:2px;">{% templatetag openblock %} for row in TABLE_OF_WINDOWS {% templatetag closeblock %} <!--- прешаблон начало ---><table style="padding:2px;">{% templatetag openblock %} for row in TABLE_OF_WINDOWS {% templatetag closeblock %}

View File

@@ -183,6 +183,9 @@ def catalog_profile_model(request: HttpRequest, manufacture_id: int, manufacture
"CATALOG_URL": f"{manufacture_id}-{manufacture_name}", "CATALOG_URL": f"{manufacture_id}-{manufacture_name}",
"CATALOG_URL2": f"{manufacture_id}-{manufacture_name}/{model_id}-{model_name}", "CATALOG_URL2": f"{manufacture_id}-{manufacture_name}/{model_id}-{model_name}",
"PROFILE_RATING_STARS": get_rating_set_for_stars(q_pvc_by_id.fProfileRating)} "PROFILE_RATING_STARS": get_rating_set_for_stars(q_pvc_by_id.fProfileRating)}
# Размер выборки для алгоритмического рейтинга: количество моделей профилей в каталоге.
# Используется в JSON-LD (ratingCount) и поясняющем тексте на странице.
to_template["PROFILE_RATING_SAMPLE_SIZE"] = PVCprofiles.objects.count()
try: try:
got_json = json.loads(q_pvc_by_id.sProfileDescription) got_json = json.loads(q_pvc_by_id.sProfileDescription)
# раскрашиваем кружочки рейтинга напротив характеристик профиля # раскрашиваем кружочки рейтинга напротив характеристик профиля
@@ -299,7 +302,8 @@ def catalog_profile_manufacture(request: HttpRequest, manufacture_id: int, manuf
if catalog_entry is None or catalog_entry.kBlogCatalog is None: if catalog_entry is None or catalog_entry.kBlogCatalog is None:
raise ObjectDoesNotExist raise ObjectDoesNotExist
manufacture_description = catalog_entry.kBlogCatalog manufacture_description = catalog_entry.kBlogCatalog
to_template.update({'PUB_DAT': manufacture_description.dPostDataModify}) # PUB_DAT убран: на странице производителя дата меняется и от рейтинга, и от статьи,
# поэтому Date4Meta/Last4Meta удалены из шаблона — base.html использует {% now %} по умолчанию.
if PATH_FOR_IMG_BLOG in (manufacture_description.sImgForBlogSocial or ""): if PATH_FOR_IMG_BLOG in (manufacture_description.sImgForBlogSocial or ""):
to_template.update({'IMG_FOR_BLOG': manufacture_description.sImgForBlogSocial}) to_template.update({'IMG_FOR_BLOG': manufacture_description.sImgForBlogSocial})
content = re.sub(r'<cut[\s\S]*>', '', manufacture_description.sPostContent, 0, re.IGNORECASE) content = re.sub(r'<cut[\s\S]*>', '', manufacture_description.sPostContent, 0, re.IGNORECASE)

View File

@@ -235,7 +235,8 @@ def seria_nav(seria_id: int = DEFAULT_SERIA_ID_FOR_CATALOG) -> tuple[int, dict]:
""" """
q_seria = list( q_seria = list(
Seria_Info.objects.filter(id=F("kRoot_id")) Seria_Info.objects.filter(id=F("kRoot_id"))
.only("id", "sName", "sSeriaDescription", "kRoot_id", "kParent_id") # sURL2IMG нужен для OG-image в шаблоне seria_info
.only("id", "sName", "sSeriaDescription", "kRoot_id", "kParent_id", "sURL2IMG")
.order_by("sName") .order_by("sName")
) )
if not q_seria: if not q_seria:
@@ -292,8 +293,21 @@ def all_seria_nav(seria_id: int, q_seria) -> tuple[int, dict]:
"SERIA_L": pytils.translit.slugify(seria_name), "SERIA_L": pytils.translit.slugify(seria_name),
} }
if seria_id_value == seria_id: if seria_id_value == seria_id:
this_return.update({"THIS_SERIA_NAME": seria_name, # Изображение серии: используется в OG-image в шаблоне seria_info
"THIS_SERIA_DESCRIPTION": seria_description}) seria_image = (
count_seria.get("sURL2IMG")
if isinstance(count_seria, dict)
else count_seria.sURL2IMG
)
this_return.update({
"THIS_SERIA_NAME": seria_name,
"THIS_SERIA_DESCRIPTION": seria_description,
# ID и slug серии нужны для canonical URL и JSON-LD в шаблоне
"THIS_SERIA_ID": seria_id_value,
"THIS_SERIA_NAME_T": pytils.translit.slugify(seria_name),
# URL изображения серии для OG-тегов (путь относительно /media/)
"THIS_SERIA_IMAGE_URL": str(seria_image) if seria_image else "",
})
seria_nav_dim.append(one_seria) seria_nav_dim.append(one_seria)
this_return.update({"SERIA_NAV_DIM": seria_nav_dim}) this_return.update({"SERIA_NAV_DIM": seria_nav_dim})
return seria_id, this_return return seria_id, this_return