SEO: RU-мета под запросы + FAQ (видимый блок + FAQPage-разметка); фикс отчества в оферте
- RU title/description/keywords переписаны под реальные запросы («эффект сканирования», «как отсканированный», «добавить эффект скана», «без сканера», Word) - FAQ (ru/en): server-rendered видимый блок (<!--SEO_FAQ-->, <details>) + FAQPage JSON-LD в head — контент под запросы и заявка на rich snippet - Оферта: ИП Букреев Александр Иванович (было Игоревич) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
81
app/main.py
81
app/main.py
@@ -596,11 +596,11 @@ SEO_LOCALE = {
|
||||
}
|
||||
SEO = {
|
||||
"ru": {
|
||||
"title": "pdf2scan — сделать скан из PDF онлайн бесплатно",
|
||||
"desc": "Сделайте скан из PDF онлайн — бесплатно, без регистрации. Эффект сканирования, сшивка (нитка, ленточка, пружинка, уголок, дырокол), нумерация страниц и лист «прошито-пронумеровано».",
|
||||
"og_desc": "Сделайте скан из PDF онлайн — бесплатно, без регистрации. Сшивка, нумерация, эффект сканирования в один клик.",
|
||||
"keywords": "сделать скан из pdf онлайн, pdf в скан онлайн, сканирование pdf бесплатно, pdf с эффектом сканирования, прошить документ онлайн, сшивка документов онлайн, растровый pdf онлайн, pdf2scan",
|
||||
"ld_desc": "Бесплатный онлайн-инструмент для создания PDF с эффектом сканирования. Сшивка нитками, ленточкой, уголком, пружинкой и дыроколом. Нумерация страниц, титульный лист, PDF/A.",
|
||||
"title": "Эффект сканирования PDF онлайн — сделать скан из PDF | pdf2scan",
|
||||
"desc": "Добавьте эффект сканирования к PDF онлайн — документ будет выглядеть как отсканированный, без принтера и сканера. Бесплатно и без регистрации. Сшивка (нитка, ленточка, пружинка, уголок, дырокол), нумерация страниц, титульный лист, PDF/A. Работает и с Word.",
|
||||
"og_desc": "Добавьте эффект сканирования к PDF — как отсканированный документ, без сканера. Бесплатно, без регистрации, сшивка и нумерация в один клик.",
|
||||
"keywords": "эффект сканирования pdf, добавить эффект сканирования, сделать скан из pdf онлайн, pdf в скан, pdf как отсканированный, сделать pdf похожим на скан, имитация сканера, сканирование pdf бесплатно, прошить документ онлайн, сшивка документов онлайн, word в скан, pdf2scan",
|
||||
"ld_desc": "Бесплатный онлайн-инструмент, чтобы добавить эффект сканирования к PDF: документ выглядит как отсканированный. Сшивка нитками, ленточкой, уголком, пружинкой и дыроколом. Нумерация страниц, титульный лист, PDF/A. Работает и с Word.",
|
||||
},
|
||||
"en": {
|
||||
"title": "pdf2scan — add a scan effect to PDF online, free",
|
||||
@@ -646,6 +646,54 @@ SEO = {
|
||||
},
|
||||
}
|
||||
|
||||
# FAQ для приоритетных языков: видимый блок на странице + FAQPage-разметка (rich snippets).
|
||||
SEO_FAQ = {
|
||||
"ru": [
|
||||
("Как добавить эффект сканирования к PDF?",
|
||||
"Загрузите PDF на pdf2scan.online, выберите тип сшивки и настройки (цвет, качество, нумерация) и нажмите «Обработать». Сервис превращает электронный PDF в растровый документ с реалистичным эффектом сканирования — как будто его напечатали и отсканировали."),
|
||||
("Как сделать PDF похожим на отсканированный документ?",
|
||||
"pdf2scan растрирует каждую страницу и добавляет эффект сканирования: лёгкий наклон, шум и оттенок бумаги. Результат выглядит как скан с настоящего сканера — без принтера, МФУ и приложения."),
|
||||
("Это бесплатно и нужна ли регистрация?",
|
||||
"Файлы до 50 МБ и до 100 страниц обрабатываются бесплатно и без регистрации. Для файлов больше лимита — разовая оплата 99 ₽ за файл или подписка 299 ₽ в месяц."),
|
||||
("Можно ли сделать скан из Word (DOC/DOCX) или изображения?",
|
||||
"Да. Загрузите DOC, DOCX, JPG или PNG — файл сначала автоматически конвертируется в PDF, а затем получает эффект сканирования."),
|
||||
("Что такое сшивка и какие варианты доступны?",
|
||||
"Сшивка имитирует переплёт документа. Доступны нитка, ленточка, пружинка, уголок и дырокол, а также лист «прошито-пронумеровано» и титульный лист."),
|
||||
("Безопасно ли загружать документы?",
|
||||
"Файлы обрабатываются автоматически и удаляются с сервера в течение 24 часов, а содержимое не передаётся третьим лицам."),
|
||||
],
|
||||
"en": [
|
||||
("How do I add a scan effect to a PDF?",
|
||||
"Upload your PDF to pdf2scan.online, choose a binding and settings (color, quality, numbering) and click Process. The tool turns your digital PDF into a raster document with a realistic scan effect — as if it were printed and scanned again."),
|
||||
("How to make a PDF look like a scanned document?",
|
||||
"pdf2scan rasterizes every page and adds a scan effect: slight skew, noise and a paper tint, so it looks like output from a real scanner — no printer, MFP or app needed."),
|
||||
("Is it free and do I need to sign up?",
|
||||
"Files up to 50 MB and 100 pages are processed for free without signup. For larger files, pay 99 ₽ per file or subscribe for 299 ₽ per month."),
|
||||
("Can I make a scan from Word (DOC/DOCX) or an image?",
|
||||
"Yes. Upload DOC, DOCX, JPG or PNG — the file is converted to PDF first and then gets the scan effect."),
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
def _seo_faq_html(lang: str) -> str:
|
||||
"""Видимый FAQ-блок (server-rendered) для краулеров, на языке страницы."""
|
||||
faq = SEO_FAQ.get(lang)
|
||||
if not faq:
|
||||
return ""
|
||||
heading = "Частые вопросы" if lang == "ru" else "FAQ"
|
||||
items = "".join(
|
||||
f'<details class="faq-item"><summary>{_esc_html(q)}</summary>'
|
||||
f'<div class="faq-a">{_esc_html(a)}</div></details>'
|
||||
for q, a in faq
|
||||
)
|
||||
return (f'<section id="faq-section" aria-label="{heading}">'
|
||||
f'<h2 class="faq-h">{heading}</h2>{items}</section>')
|
||||
|
||||
|
||||
def _esc_html(s: str) -> str:
|
||||
return s.replace("&", "&").replace("<", "<").replace(">", ">")
|
||||
|
||||
|
||||
_INDEX_RAW: str | None = None
|
||||
|
||||
|
||||
@@ -691,6 +739,22 @@ def _build_seo_head(lang: str) -> str:
|
||||
import json as _json
|
||||
ld_json = _json.dumps(ld, ensure_ascii=False, indent=2)
|
||||
|
||||
faq_script = ""
|
||||
_faq = SEO_FAQ.get(lang)
|
||||
if _faq:
|
||||
faq_ld = {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "FAQPage",
|
||||
"mainEntity": [
|
||||
{"@type": "Question", "name": q,
|
||||
"acceptedAnswer": {"@type": "Answer", "text": a}}
|
||||
for q, a in _faq
|
||||
],
|
||||
}
|
||||
faq_script = ('\n<script type="application/ld+json">\n'
|
||||
+ _json.dumps(faq_ld, ensure_ascii=False, indent=2)
|
||||
+ "\n</script>")
|
||||
|
||||
return (
|
||||
f"<title>{title}</title>\n"
|
||||
f'<meta name="description" content="{desc}">\n'
|
||||
@@ -713,6 +777,7 @@ def _build_seo_head(lang: str) -> str:
|
||||
f'<link rel="icon" type="image/x-icon" href="/favicon.ico">\n'
|
||||
f'<link rel="shortcut icon" href="/favicon.ico">\n'
|
||||
f'<script type="application/ld+json">\n{ld_json}\n</script>'
|
||||
f'{faq_script}'
|
||||
)
|
||||
|
||||
|
||||
@@ -733,6 +798,8 @@ def _render_index_html(lang: str) -> str:
|
||||
if start != -1 and end != -1:
|
||||
head = _build_seo_head(lang)
|
||||
html = html[:start] + "<!--SEO_HEAD-->\n" + head + "\n" + html[end:]
|
||||
# Видимый FAQ-блок (server-rendered, для краулеров) — на языке страницы
|
||||
html = html.replace("<!--SEO_FAQ-->", _seo_faq_html(lang), 1)
|
||||
return html
|
||||
|
||||
|
||||
@@ -2871,7 +2938,7 @@ _OFFER_HTML = """<!doctype html>
|
||||
<div class="upd">Редакция от 7 июля 2026 г.</div>
|
||||
|
||||
<p>Настоящий документ является публичной офертой (ст. 437 ГК РФ) — предложением
|
||||
ИП Букреева Александра Игоревича (ИНН 575208141840, далее — «Исполнитель»)
|
||||
ИП Букреева Александра Ивановича (ИНН 575208141840, далее — «Исполнитель»)
|
||||
заключить договор об оказании услуг сервиса pdf2scan (сайт pdf2scan.online и
|
||||
Telegram-бот @pdf2scan_bot, далее — «Сервис») на условиях ниже.
|
||||
Оплата услуг или использование Сервиса означает полное принятие условий (акцепт).</p>
|
||||
@@ -2931,7 +2998,7 @@ _OFFER_HTML = """<!doctype html>
|
||||
применяется право Российской Федерации.</p>
|
||||
|
||||
<h2>9. Исполнитель и контакты</h2>
|
||||
<p>ИП Букреев Александр Игоревич, ИНН 575208141840<br>
|
||||
<p>ИП Букреев Александр Иванович, ИНН 575208141840<br>
|
||||
Telegram: <a href="https://t.me/berkio">@berkio</a> · E-mail: <a href="mailto:b3rkut@yandex.ru">b3rkut@yandex.ru</a></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user