diff --git a/app/main.py b/app/main.py index 9b92ca1..96687c5 100644 --- a/app/main.py +++ b/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'
{_esc_html(q)}' + f'
{_esc_html(a)}
' + for q, a in faq + ) + return (f'
' + f'

{heading}

{items}
') + + +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") + return ( f"{title}\n" f'\n' @@ -713,6 +777,7 @@ def _build_seo_head(lang: str) -> str: f'\n' f'\n' f'' + 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] + "\n" + head + "\n" + html[end:] + # Видимый FAQ-блок (server-rendered, для краулеров) — на языке страницы + html = html.replace("", _seo_faq_html(lang), 1) return html @@ -2871,7 +2938,7 @@ _OFFER_HTML = """
Редакция от 7 июля 2026 г.

Настоящий документ является публичной офертой (ст. 437 ГК РФ) — предложением - ИП Букреева Александра Игоревича (ИНН 575208141840, далее — «Исполнитель») + ИП Букреева Александра Ивановича (ИНН 575208141840, далее — «Исполнитель») заключить договор об оказании услуг сервиса pdf2scan (сайт pdf2scan.online и Telegram-бот @pdf2scan_bot, далее — «Сервис») на условиях ниже. Оплата услуг или использование Сервиса означает полное принятие условий (акцепт).

@@ -2931,7 +2998,7 @@ _OFFER_HTML = """ применяется право Российской Федерации.

9. Исполнитель и контакты

-

ИП Букреев Александр Игоревич, ИНН 575208141840
+

ИП Букреев Александр Иванович, ИНН 575208141840
Telegram: @berkio · E-mail: b3rkut@yandex.ru

diff --git a/app/static/index.html b/app/static/index.html index 9a40b2c..58aa64f 100644 --- a/app/static/index.html +++ b/app/static/index.html @@ -771,6 +771,16 @@ 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 { font-size: 17px; font-weight: 700; @@ -1224,6 +1234,8 @@

pdf2scan — бесплатный онлайн-инструмент для создания растрового PDF с эффектом сканирования. Поддерживает сшивку нитками, ленточкой, уголком, пружинкой и дыроколом. Идеально для подготовки документов к сдаче в архив, нотариусу или государственные органы. Без регистрации, без установки программ.

+ +