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:
berkio_admin_gitea
2026-07-08 06:42:54 +00:00
parent 05b90f0bf7
commit ed881e19a6
2 changed files with 86 additions and 7 deletions

View File

@@ -596,11 +596,11 @@ SEO_LOCALE = {
} }
SEO = { SEO = {
"ru": { "ru": {
"title": "pdf2scan — сделать скан из PDF онлайн бесплатно", "title": "Эффект сканирования PDF онлайн — сделать скан из PDF | pdf2scan",
"desc": "Сделайте скан из PDF онлайн — бесплатно, без регистрации. Эффект сканирования, сшивка (нитка, ленточка, пружинка, уголок, дырокол), нумерация страниц и лист «прошито-пронумеровано».", "desc": "Добавьте эффект сканирования к PDF онлайн — документ будет выглядеть как отсканированный, без принтера и сканера. Бесплатно и без регистрации. Сшивка (нитка, ленточка, пружинка, уголок, дырокол), нумерация страниц, титульный лист, PDF/A. Работает и с Word.",
"og_desc": "Сделайте скан из PDF онлайн — бесплатно, без регистрации. Сшивка, нумерация, эффект сканирования в один клик.", "og_desc": "Добавьте эффект сканирования к PDF — как отсканированный документ, без сканера. Бесплатно, без регистрации, сшивка и нумерация в один клик.",
"keywords": "сделать скан из pdf онлайн, pdf в скан онлайн, сканирование pdf бесплатно, pdf с эффектом сканирования, прошить документ онлайн, сшивка документов онлайн, растровый pdf онлайн, pdf2scan", "keywords": "эффект сканирования pdf, добавить эффект сканирования, сделать скан из pdf онлайн, pdf в скан, pdf как отсканированный, сделать pdf похожим на скан, имитация сканера, сканирование pdf бесплатно, прошить документ онлайн, сшивка документов онлайн, word в скан, pdf2scan",
"ld_desc": "Бесплатный онлайн-инструмент для создания PDF с эффектом сканирования. Сшивка нитками, ленточкой, уголком, пружинкой и дыроколом. Нумерация страниц, титульный лист, PDF/A.", "ld_desc": "Бесплатный онлайн-инструмент, чтобы добавить эффект сканирования к PDF: документ выглядит как отсканированный. Сшивка нитками, ленточкой, уголком, пружинкой и дыроколом. Нумерация страниц, титульный лист, PDF/A. Работает и с Word.",
}, },
"en": { "en": {
"title": "pdf2scan — add a scan effect to PDF online, free", "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("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
_INDEX_RAW: str | None = None _INDEX_RAW: str | None = None
@@ -691,6 +739,22 @@ def _build_seo_head(lang: str) -> str:
import json as _json import json as _json
ld_json = _json.dumps(ld, ensure_ascii=False, indent=2) 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 ( return (
f"<title>{title}</title>\n" f"<title>{title}</title>\n"
f'<meta name="description" content="{desc}">\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="icon" type="image/x-icon" href="/favicon.ico">\n'
f'<link rel="shortcut 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'<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: if start != -1 and end != -1:
head = _build_seo_head(lang) head = _build_seo_head(lang)
html = html[:start] + "<!--SEO_HEAD-->\n" + head + "\n" + html[end:] 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 return html
@@ -2871,7 +2938,7 @@ _OFFER_HTML = """<!doctype html>
<div class="upd">Редакция от 7 июля 2026 г.</div> <div class="upd">Редакция от 7 июля 2026 г.</div>
<p>Настоящий документ является публичной офертой (ст. 437 ГК РФ) — предложением <p>Настоящий документ является публичной офертой (ст. 437 ГК РФ) — предложением
ИП Букреева Александра Игоревича (ИНН 575208141840, далее — «Исполнитель») ИП Букреева Александра Ивановича (ИНН 575208141840, далее — «Исполнитель»)
заключить договор об оказании услуг сервиса pdf2scan (сайт pdf2scan.online и заключить договор об оказании услуг сервиса pdf2scan (сайт pdf2scan.online и
Telegram-бот @pdf2scan_bot, далее — «Сервис») на условиях ниже. Telegram-бот @pdf2scan_bot, далее — «Сервис») на условиях ниже.
Оплата услуг или использование Сервиса означает полное принятие условий (акцепт).</p> Оплата услуг или использование Сервиса означает полное принятие условий (акцепт).</p>
@@ -2931,7 +2998,7 @@ _OFFER_HTML = """<!doctype html>
применяется право Российской Федерации.</p> применяется право Российской Федерации.</p>
<h2>9. Исполнитель и контакты</h2> <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> Telegram: <a href="https://t.me/berkio">@berkio</a> · E-mail: <a href="mailto:b3rkut@yandex.ru">b3rkut@yandex.ru</a></p>
</div> </div>
</div> </div>

View File

@@ -771,6 +771,16 @@
padding: 0 16px 8px; padding: 0 16px 8px;
} }
/* FAQ (server-rendered, SEO) */
#faq-section { width: 100%; max-width: 640px; padding: 4px 16px 8px; }
.faq-h { font-size: 17px; font-weight: 700; color: var(--text); margin: 8px 0 12px; text-align: center; }
.faq-item { background: #fff; border-radius: var(--radius-sm, 10px); box-shadow: var(--shadow-sm); margin-bottom: 8px; padding: 12px 14px; }
.faq-item > summary { cursor: pointer; font-weight: 600; font-size: 14px; color: var(--text); list-style: none; position: relative; padding-right: 22px; }
.faq-item > summary::-webkit-details-marker { display: none; }
.faq-item > summary::after { content: '+'; position: absolute; right: 2px; top: -1px; font-size: 18px; color: var(--text-secondary); }
.faq-item[open] > summary::after { content: ''; }
.faq-a { font-size: 13.5px; line-height: 1.5; color: var(--text-secondary); margin-top: 8px; }
.seo-heading { .seo-heading {
font-size: 17px; font-size: 17px;
font-weight: 700; font-weight: 700;
@@ -1224,6 +1234,8 @@
<p class="seo-about" data-i18n="seo_about">pdf2scan — бесплатный онлайн-инструмент для создания растрового PDF с эффектом сканирования. Поддерживает сшивку нитками, ленточкой, уголком, пружинкой и дыроколом. Идеально для подготовки документов к сдаче в архив, нотариусу или государственные органы. Без регистрации, без установки программ.</p> <p class="seo-about" data-i18n="seo_about">pdf2scan — бесплатный онлайн-инструмент для создания растрового PDF с эффектом сканирования. Поддерживает сшивку нитками, ленточкой, уголком, пружинкой и дыроколом. Идеально для подготовки документов к сдаче в архив, нотариусу или государственные органы. Без регистрации, без установки программ.</p>
</section> </section>
<!--SEO_FAQ-->
<footer> <footer>
pdf2scan &mdash; <span data-i18n="footer_text">превращаем PDF в скан</span> &nbsp;|&nbsp; <a href="https://t.me/pdf2scan_bot" style="color:var(--blue); text-decoration:none;" data-i18n="footer_tg">Telegram-бот</a> &nbsp;|&nbsp; <a href="/developers" style="color:var(--blue); text-decoration:none;" data-i18n="footer_api">API для бизнеса</a> &nbsp;|&nbsp; <a href="#" onclick="showDonateCard(false);document.getElementById('donate-card').scrollIntoView({behavior:'smooth'});return false;" style="color:var(--blue); text-decoration:none;" data-i18n="footer_donate">🍩 Поддержать</a> &nbsp;|&nbsp; <a href="/offer" style="color:var(--blue); text-decoration:none;" data-i18n="footer_offer">Оферта</a> pdf2scan &mdash; <span data-i18n="footer_text">превращаем PDF в скан</span> &nbsp;|&nbsp; <a href="https://t.me/pdf2scan_bot" style="color:var(--blue); text-decoration:none;" data-i18n="footer_tg">Telegram-бот</a> &nbsp;|&nbsp; <a href="/developers" style="color:var(--blue); text-decoration:none;" data-i18n="footer_api">API для бизнеса</a> &nbsp;|&nbsp; <a href="#" onclick="showDonateCard(false);document.getElementById('donate-card').scrollIntoView({behavior:'smooth'});return false;" style="color:var(--blue); text-decoration:none;" data-i18n="footer_donate">🍩 Поддержать</a> &nbsp;|&nbsp; <a href="/offer" style="color:var(--blue); text-decoration:none;" data-i18n="footer_offer">Оферта</a>
</footer> </footer>