Commit Graph
14 Commits
Author SHA1 Message Date
aramesh-site deploy 8de338bb1f fix(seo): noindex برای صفحات /en بدون ترجمهٔ واقعی — پاسخ به گزارش GSC
گزارش Coverage Drilldown گوگل (۱۰ اکتبر): ۳۶ صفحه «Crawled - currently not indexed»
که غالباً /en/projects/... بودند — صفحهٔ انگلیسی با محتوای فارسی (۰/۶۵ پروژه ترجمه دارد)
یعنی نسخهٔ تکراری صفحهٔ فارسی، و گوگل درست ردش کرده بود.
اکنون صفحات /en که ترجمه ندارند متای noindex,follow می‌گیرند (کاربر عادی سالم
می‌بیند؛ با افزودن ترجمه خودکار برمی‌گردد). صفحه‌های فارسی و /en صفحه‌های اصلی
ترجمه‌دار دست‌نخورده و ایندکس‌پذیرند.
2026-10-13 09:57:31 +00:00
aramesh-site deploy 9b0533b7b2 feat(schema): foundingDate 2002 (تأسیس ۱۳۸۱) + foundingLocation اصفهان در Organization
سیگنال تمایز هویت برند: شرکت جعلی‌ای که از نام «آرامش» استفاده می‌کند تأسیس ۱۳۹۱ را
ادعا می‌کند؛ سایت رسمی حالا سند ساخت‌یافتهٔ سابقهٔ واقعی (۲۴ سال) را در اختیار
گوگل و دستیارهای AI قرار می‌دهد.
2026-10-10 23:01:19 +00:00
aramesh-site deploy 04dc5facde fix(robots): مسدود نکردن /api/site — Allow داخل گروه Disallow قابل‌اعتماد نبود
گزارش منابع صفحهٔ GSC: «Googlebot blocked by robots.txt → /api/site».
robots.txt قاعدهٔ «آخرین تطابق» ندارد؛ افزودن Allow: /api/site داخل همان گروه
Disallow: /api توسط برخی خزنده‌ها نادیده گرفته می‌شد. حالا فقط /admin و
/api/admin مسدود می‌شوند و /api/site آزاد است.
2026-10-10 10:28:51 +00:00
aramesh-site deploy 51e7e46584 fix(seo): پیوند صریح ZIP تصاویر روی صفحهٔ پروژه و فهرست پروژه‌ها
دستیار AI گفت «تصاویر سایت را نتوانستم دریافت کنم» — آرشیو ZIP وجود داشت و از
چهار کشور ۲۰۰ می‌داد، اما هیچ پیوندی به آن در صفحات نبود: llms.txt فقط الگو
داده بود و مدل‌ها الگو را جای‌گذاری نمی‌کنند. اکنون:
- صفحهٔ هر پروژه: <a href=.../images.zip>دانلود همهٔ تصاویر (ZIP)</a>
- فهرست /projects: هر ردیف پیوند «تصاویر (ZIP)» همان پروژه را دارد (۶۵ پیوند)
تا خزنده‌ها با دنبال‌کردن پیوند واقعی به آرشیو برسند.
2026-10-09 23:55:36 +00:00
aramesh-site deploy ef5da904e3 fix(seo): نمایش متراژ و مشخصات پروژه‌ها در فهرست /projects + پیوند به صفحهٔ جزئیات
دستیار AI گفت «/projects باز نمی‌شود» و «برای الیسیان و زنیت متراژ پیدا نکردم» — درست بود:
فهرست پروژه‌ها فقط نام/موقعیت/سال را می‌داد و زیربنا و طبقات فقط در صفحهٔ جزئیات بود.
اکنون هر ردیف فهرست شامل زمین/زیربنا/طبقات/واحد است و نام پروژه به صفحهٔ جزئیات
پیوند دارد، تا خزنده بتواند مشخصات کامل را دنبال کند.
2026-10-09 23:47:37 +00:00
aramesh-site deploy 47f1505a2e feat(llms): معرفی آرشیو تصاویر پروژه‌ها در llms.txt — تا دستیارهای AI آن را کشف کنند 2026-10-09 23:46:33 +00:00
aramesh-site deploy 365e4b9417 feat(seo): آرشیو ZIP تصاویر پروژه برای دستیارهای AI
دستیارها نمی‌توانند دکمه‌های UI را کلیک کنند؛ برای همین نمی‌توانستند تصاویر یک پروژه را
بررسی کنند. اکنون:
- /projects/{slug}/images.zip — آرشیو تصاویر هر پروژه + manifest.json
  (مشخصات کامل پروژه: زمین/زیربنا/طبقات/واحدها/کاربری/سال + برای هر تصویر: نام،
  caption با موقعیت پروژه، و لینک منبع)
- /projects-images.json — فهرست ماشین‌خوان هر ۶۵ پروژه با لینک ZIP (ItemList)
- هر دو مسیر در قاعدهٔ seo ترویک (prod + override) اضافه شدند

رفع باگ‌ها در مسیر ساخت آرشیو:
- _fetch_media: unquote روی کلیدِ از قبل دیکد‌شده، نام فایل‌های فارسی را خراب می‌کرد
  (حالا هر دو شکل امتحان می‌شود + سقوط به واکشی از سایت)
- UnboundLocalError: import محلی urllib.request نام urllib را محلی می‌کرد
- تصاویر تکراری (تصویر شاخص = اولین عکس گالری) با هش MD5 حذف می‌شوند —
  ۱۷ از ۱۹ پروژهٔ نمونه یک تصویر تکراری داشتند
2026-10-09 23:45:35 +00:00
aramesh-site deploy b26207769f fix(seo): انتشار مشخصات فنی پروژه‌ها — باگ جاافتاده که زیربنا/طبقات/واحدها را حذف می‌کرد
پاسخ به این‌که دستیارهای AI «متراژ پروژه را پیدا نمی‌کنند» در حالی که در پنل ثبت شده است:
- _project_content_html فقط ۴ فیلد (موقعیت/سال/زیربنا/کارفرما) را منتشر می‌کرد و
  زیربنا را روی نسخهٔ انگلیسی به‌خاطر نبود *_en حذف می‌کرد. حالا همهٔ فیلدهای فنی
  (زمین، زیربنا، طبقات، پیلوت، واحدهای مسکونی/تجاری/اداری، کاربری، نوع، کارفرما، وضعیت)
  منتشر می‌شوند؛ اعداد زبان‌مستقل‌اند و در نبود ترجمه هم مقدار فارسی می‌آید.
- _project_schema: همان مشخصات به‌صورت additionalProperty (PropertyValue) اضافه شد
  تا به‌عنوان دادهٔ ساخت‌یافته قابل استناد باشد.

نمونهٔ زنده (آرامش الیسیان): زمین ۱۵۵۰، زیربنا ۸۷۰۰، طبقات ۷، ۳۱ واحد مسکونی، ۶ تجاری.
۶۵/۶۵ پروژه زیربنا و طبقات دارند — پیش از این هیچ‌کدام منتشر نمی‌شد.
2026-10-09 23:36:55 +00:00
aramesh-site deploy 1d0c1ae53d feat(seo): ایندکس‌پذیری کامل، محتوای سمت سرور برای خزنده‌های AI و رفع باگ ایندکس
سئوی سمت سرور (backend/app/seo_pages.py)
- متا/canonical/hreflang/JSON-LD برای همهٔ صفحات عمومی (شش صفحهٔ استاتیک فارسی که قبلاً پوستهٔ خالی بودند)
- canonical سمت سرور (قبلاً فقط با JS ست می‌شد)، ۴۰۴ واقعی برای مسیرهای ناموجود
- اسکیما: Organization با لوگوی ImageObject، FAQPage، LocalBusiness، BreadcrumbList،
  CreativeWork پروژه با همهٔ تصاویر به‌صورت ImageObject (نام/توضیح + موقعیت پروژه)
- hreflang فقط وقتی ترجمهٔ انگلیسی واقعاً وجود دارد؛ sitemap با URLهای درصد‌گذاری‌شده
- llms.txt و robots.txt تازه‌ساز از دیتابیس؛ سیاست صریح خزنده‌های AI + Allow: /api/site
- _site_content_html: محتوای واقعی سایت به‌صورت HTML خوانا در <noscript> —
  خزنده‌های بدون جاوااسکریپت (GPTBot/OAI-SearchBot/ClaudeBot/PerplexityBot) از ۲۴۰ نویسه
  به ۸٬۵۰۰+ نویسه محتوای معنایی می‌رسند
- Cache-Control: no-store روی HTML و llms.txt (جلوگیری از کش کهنهٔ CDN)، max-age روی sitemap

فرانت‌اند
- api.tsx: خواندن دادهٔ تزریق‌شدهٔ سرور (window.__SITE__) به‌عنوان حالت اولیه — رندر بدون XHR
- App.tsx: اسکلت بارگذاری به‌جای DOM خالی (رفع Soft 404 گوگل)
- index.html: فاوآیکون واقعی برند (قبلاً به vite.svg ناموجود اشاره می‌کرد) + preload فونت

زیرساخت
- Dockerfile: آینهٔ PyPI (Tsinghua/Aliyun) — PyPI برای IP ایران بلاک است
- Caddyfile: هر مسیر پسوند‌دار بدون فایل واقعی ۴۰۴ می‌گیرد (قبلاً HTML اسپا برمی‌گرداند)
- docker-compose.prod.yml: مسیرهای seo برای صفحات استاتیک + llms.txt + کلیدهای IndexNow

داده
- seed_data*.py: حذف دفاتر و معرفی‌های دمو (که در هر استقرار برمی‌گشتند)؛
  تنها دفتر واقعی: اصفهان، ملاصدرا شمالی

دارایی‌ها
- فاوآیکون/آیکون‌های برند از لوگوی رسمی + کلیدهای IndexNow
2026-10-09 23:29:26 +00:00
aramesh-site deploy 61a2e95278 feat(blog): جداسازی دوزبانهٔ اسلاگ/کلیدواژه/نویسنده/تگ‌ها/متا + میگریشن ۰۰۰۲، رفع «دقیقه مطالعه دقیقه»، فونت مقاله ۱۵/۱۷px، جدول تیپ‌تپ در ادیتور، مسیر /en/blog با slug_en 2026-10-06 10:11:55 +00:00
MMD d25db9367c پیش‌نمایش خصوصی: سایت آنلاین اما غیرعمومی تا زمان انتشار
- گیت ورود Traefik (Basic Auth) روی همه مسیرها: سایت، API، تصاویر و چت — بدون رمز فقط ۴۰۱
- لایه دوم noindex: هدر X-Robots-Tag روی همه پاسخ‌ها + robots.txt مسدودکننده + نقشه سایت خالی
- اسکریپت scripts/preview-mode.sh on|off|status — ساخت خودکار نام کاربری/رمز و هماهنگ‌کردن .env
- دو دامنه (DOMAIN + DOMAIN_ALIAS) با گواهی TLS و ریدایرکت ۳۰۱ دامنه دوم به اصلی در زمان انتشار
- اسکیمای FAQPage در پوسته سئوی سمت سرور (فارسی و انگلیسی) برای خزنده‌های بدون جاوااسکریپت
- مستندسازی جریان پیش‌نمایش و چک‌لیست انتشار در README و .env.example
2026-09-26 22:47:04 +03:30
MMD 4fb57dfd67 اصلاحات بازبینی: تطبیق backfill با متن فارسی، رفع باگ متای /blog (ستون image ناموجود)، پاک‌سازی og:locale و برند در پوسته سئو، محدودکردن Traefik به پروژه خود، اصلاح مسیریابی Routes و عنوان برند در صفحات جزئیات 2026-09-13 00:10:53 +03:30
MMD 6bb6226e06 بک‌اند: مدل دوزبانه — ستون‌های _en، ترجمه کامل seed انگلیسی، backfill خودکار و پوسته سئوی /en/ 2026-09-12 22:57:06 +03:30
MMD b31124e1e4 وبلاگ و سئو: پیش‌نویس/انتشار مقاله + کلمه کلیدی سئو در دیتابیس + OG/canonical/JSON-LD و متای سمت سرور + تغییر رمز و محدودسازی ورود + تست‌ها
- مقاله‌ها ستون status (draft/published) گرفتند — GET /api/site و همه انتهای عمومی فقط منتشرشده را برمی‌گردانند؛ autosave دیگر پیش‌نویس نیمه‌کاره را زنده نمی‌کند
- کلمه کلیدی هدف چک‌لیست سئو فیلد seo_keyphrase شد (قبلاً localStorage بود)
- robots.txt و sitemap.xml از بک‌اند + سرو /blog و /projects با تزریق title/description/OG/JSON-LD از دیتابیس برای خزنده‌های بدون JS (app/seo_pages.py)
- فرانت: applySeo در seo.ts (OG/توییتر/canonical/JSON-LD)، ادغام پیش‌نویس برای ادمین، برچسب پیش‌نویس در وبلاگ، حالت خالی وبلاگ، دکمه انتشار در صفحه نوشتن
- تغییر رمز ادمین POST /api/auth/change-password + دیالوگ «رمز» در نوار مدیریت
- محدودسازی ورود: ۵ تلاش ناموفق در ۱۵ دقیقه از هر IP → 429
- ساخت دکمه + برای ردیف سئوی صفحه‌های بدون ردیف (SingletonPill)
- تست‌های pytest (۱۵ مورد) + پین‌کردن requirements + حذف package.json سرگردان فرانت
2026-09-07 04:26:18 +03:30