diff --git a/app/scripts/check-persian-seo.mjs b/app/scripts/check-persian-seo.mjs new file mode 100644 index 0000000..65fa1a7 --- /dev/null +++ b/app/scripts/check-persian-seo.mjs @@ -0,0 +1,88 @@ +import { existsSync } from 'node:fs'; +import { resolve } from 'node:path'; +import { TeknavData } from '../teknav-data.js'; + +const today = new Date().toISOString().slice(0, 10); + +function clean(value) { + return String(value ?? '').replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim(); +} + +function isPastOrTodayDate(date) { + const value = String(date ?? '').slice(0, 10); + return /^\d{4}-\d{2}-\d{2}$/.test(value) && value <= today; +} + +function isPublishedArticle(article) { + if (article.status === 'منتشرشده') return true; + if (article.status === 'پیشنویس' || article.status === 'در انتظار بررسی') return false; + return !!article.dateEn; +} + +function ogImageExists(article) { + const image = article.ogImage || `/images/og/${article.slug}.jpg`; + return existsSync(resolve(`public${image}`)); +} + +const problems = []; +const warnings = []; +const rows = TeknavData.articles + .filter((article) => isPublishedArticle(article) && isPastOrTodayDate(article.dateEn)) + .map((article) => { + const h2 = (article.content?.match(/