feat(blog): جدول — ستون‌ها قابل تغییر اندازه/افزودن و حذف؛ لینک کپشن تصویر؛ هدینگ‌های نسخه انگلیسی بزرگ‌تر

This commit is contained in:
aramesh-site deploy
2026-10-06 10:57:01 +00:00
parent 61a2e95278
commit 1b491357ab
45 changed files with 2341 additions and 81 deletions
@@ -9,6 +9,8 @@ export type SeoInput = {
excerpt: string
body: ArticleBodyDoc | string[]
keyphrase: string
/** نام نویسنده — سیگنال E-E-A-T و اسکیمای Article */
author?: string
}
type Status = 'good' | 'ok' | 'bad'
@@ -95,6 +97,34 @@ export function useSeoChecks(input: SeoInput): Check[] {
else
checks.push({ label: 'نشانی (slug)', status: 'good', hint: 'نشانی مناسب است.' })
// ——— سئوی مولد (GEO) — آماده‌سازی برای ارجاع در پاسخ‌های هوش مصنوعی ———
// پاسخ مستقیم در ابتدای مقاله — دستیارهای هوشمند بخش‌های خودبسندهٔ آغازین را نقل می‌کنند
const firstPWords = firstParagraph(input.body).split(/\s+/).filter(Boolean).length
if (firstPWords >= 20)
checks.push({ label: 'پاسخ مستقیم در ابتدا (GEO)', status: 'good', hint: 'پاراگراف اول پاسخ نسبتاً کاملی می‌دهد — دقیقاً چیزی که هوش مصنوعی نقل می‌کند.' })
else
checks.push({ label: 'پاسخ مستقیم در ابتدا (GEO)', status: 'ok', hint: 'پاراگراف اول را پاسخ‌وار بنویسید (حدود ۴۰ تا ۶۰ واژه، پاسخ مستقیم پرسش اصلی مقاله).' })
// آمار و عدد — قوی‌ترین سیگنال ارجاع هوش مصنوعی (به‌همراه ذکر منبع)
const numberTokens = words.filter((w) => /\d|[۰-۹]/.test(w)).length
if (numberTokens >= 5)
checks.push({ label: `آمار و اعداد (${numberTokens} مورد)`, status: 'good', hint: 'متن داده‌محور است — سیگنال قوی برای استناد.' })
else
checks.push({ label: 'آمار و اعداد', status: 'ok', hint: 'حداقل ۵ عدد یا درصد (با ذکر منبع) به متن اضافه کنید — محتوای داده‌محور بیش از همه ارجاع می‌گیرد.' })
// تیتر پرسشی — هم‌راستا با الگوی پرسش کاربران و «People Also Ask»
if (h2s.some((h) => h.includes('؟') || h.includes('?')))
checks.push({ label: 'تیتر پرسشی', status: 'good', hint: 'حداقل یک تیتر به شکل پرسش است.' })
else
checks.push({ label: 'تیتر پرسشی', status: 'ok', hint: 'یک تیتر H2 پرسشی (با «؟») اضافه کنید — همان‌طور که کاربران می‌پرسند.' })
// نویسنده — سیگنال اعتماد و هویت روشن محتوا
if ((input.author ?? '').trim())
checks.push({ label: 'نویسنده', status: 'good', hint: 'نام نویسنده ثبت شده — در اسکیمای مقاله هم می‌آید.' })
else
checks.push({ label: 'نویسنده', status: 'ok', hint: 'نام نویسنده را بنویسید — سیگنال اعتماد (E-E-A-T) و در اسکیمای مقاله استفاده می‌شود.' })
return checks
}, [input])
}