feat: SEO — meta tags, keywords, SSR vendors, robots.txt, sitemap.xml, Schema.org
This commit is contained in:
+37
-1
@@ -3,7 +3,34 @@
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Корзина МОНТ</title>
|
||||
<title>Вендоры МОНТ — матрица продуктов и категорий дистрибьютора MONT</title>
|
||||
<meta name="description" content="Корзина продуктов МОНТ: актуальная матрица вендоров, категорий и продуктовых линеек дистрибьютора MONT. Инфраструктура и информационная безопасность. МОНТ Казань, Москва." />
|
||||
<meta name="keywords" content="вендоры МОНТ, вендоры MONT, дистрибьютор МОНТ, корзина продуктов МОНТ, матрица МОНТ, МОНТ Казань, партнёры МОНТ, ИБ вендоры, инфраструктура ПО, MONT vendor map" />
|
||||
<meta name="robots" content="index, follow" />
|
||||
<link rel="canonical" href="{{ canonical_url }}" />
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="{{ canonical_url }}" />
|
||||
<meta property="og:title" content="Вендоры МОНТ — матрица продуктов и категорий" />
|
||||
<meta property="og:description" content="Актуальная матрица вендоров и продуктов дистрибьютора МОНТ. Инфраструктура и информационная безопасность." />
|
||||
<meta property="og:image" content="{{ canonical_url }}/static/mont_logo.png" />
|
||||
<meta property="og:locale" content="ru_RU" />
|
||||
|
||||
<!-- Schema.org Organization -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
"name": "МОНТ",
|
||||
"alternateName": "MONT",
|
||||
"description": "Дистрибьютор программного обеспечения. Корзина продуктов: вендоры, категории, продуктовые линейки в сфере инфраструктуры и информационной безопасности.",
|
||||
"url": "{{ canonical_url }}",
|
||||
"logo": "{{ canonical_url }}/static/mont_logo.png",
|
||||
"sameAs": ["https://www.mont.com"]
|
||||
}
|
||||
</script>
|
||||
|
||||
<link rel="icon" type="image/png" href="/static/favicon.png" />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
@@ -34,6 +61,15 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- SSR-контент для поисковых роботов -->
|
||||
<div style="position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;" aria-hidden="true">
|
||||
<h2>Вендоры дистрибьютора МОНТ (MONT)</h2>
|
||||
<p>Матрица вендоров, продуктов и категорий компании МОНТ — ведущего дистрибьютора программного обеспечения в России. Инфраструктура и информационная безопасность.</p>
|
||||
<ul>{% for v in ssr_vendors %}<li>{{ v }}</li>{% endfor %}</ul>
|
||||
<h2>Категории продуктов МОНТ</h2>
|
||||
<ul>{% for c in ssr_categories %}<li>{{ c }}</li>{% endfor %}</ul>
|
||||
</div>
|
||||
|
||||
<section class="board">
|
||||
<article class="card">
|
||||
<div class="card-header"><h2>Вендоры</h2><span class="count-badge" id="vendorBadge">...</span></div>
|
||||
|
||||
+41
-1
@@ -548,7 +548,47 @@ def apply_pending_overlay(
|
||||
|
||||
@bp.get("/")
|
||||
def index():
|
||||
return render_template("index.html")
|
||||
conn = get_db()
|
||||
ssr_vendors = [r[0] for r in conn.execute("SELECT name FROM vendors ORDER BY lower(name)")]
|
||||
ssr_categories = [r[0] for r in conn.execute(
|
||||
"SELECT name FROM (SELECT name FROM categories UNION SELECT name FROM ib_categories) ORDER BY lower(name)"
|
||||
)]
|
||||
conn.close()
|
||||
proto = request.headers.get("X-Forwarded-Proto", "https")
|
||||
canonical_url = f"{proto}://{request.host}"
|
||||
return render_template("index.html",
|
||||
ssr_vendors=ssr_vendors,
|
||||
ssr_categories=ssr_categories,
|
||||
canonical_url=canonical_url,
|
||||
)
|
||||
|
||||
|
||||
@bp.get("/robots.txt")
|
||||
def robots_txt():
|
||||
from flask import Response
|
||||
body = (
|
||||
"User-agent: *\n"
|
||||
"Allow: /\n"
|
||||
f"Disallow: {ADMIN_PATH}\n"
|
||||
"Disallow: /sdjlkfhsjkadahjksdhjgfkhsssssdjkjfljsdfjklsdajfkldsjflksdjfkldsj\n"
|
||||
"\n"
|
||||
f"Sitemap: https://{{host}}/sitemap.xml\n"
|
||||
).replace("{host}", request.host)
|
||||
return Response(body, mimetype="text/plain")
|
||||
|
||||
|
||||
@bp.get("/sitemap.xml")
|
||||
def sitemap_xml():
|
||||
from flask import Response
|
||||
proto = request.headers.get("X-Forwarded-Proto", "https")
|
||||
base = f"{proto}://{request.host}"
|
||||
body = (
|
||||
'<?xml version="1.0" encoding="UTF-8"?>\n'
|
||||
'<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n'
|
||||
f' <url><loc>{base}/</loc><changefreq>weekly</changefreq><priority>1.0</priority></url>\n'
|
||||
'</urlset>'
|
||||
)
|
||||
return Response(body, mimetype="application/xml")
|
||||
|
||||
|
||||
@bp.get("/api/data")
|
||||
|
||||
Reference in New Issue
Block a user