اگر وبسایت چندزبانه شما نادیده گرفته شود، در واقع برای نسل بعدی جستوجو نامرئی است. برای حل این مشکل، استودیوی طراحی ModernWebSEO مستقر در استانبول، در ۱۰ اکتبر ۲۰۲۶ یک پیادهسازی فنی دقیق منتشر کرد تا نشان دهد چگونه میتوان با استفاده از Next.js 16 سایتی ساخت که هم برای انسانها و هم برای استخراجکنندههای مدل زبانی بزرگ (LLM) — شبیه به کتابخانهداری که میلیاردها صفحه را خوانده و حالا با همان لحن کتابها جواب میدهد — بهینه باشد.
بسیاری از توسعهدهندگان، خزندههای هوش مصنوعی را موضوعی ثانویه میبینند یا بهطور کامل مسدودشان میکنند. اما برای کسبوکارهایی که به دنبال دیده شدن در فضای AI هستند، مسدود کردن باتهایی که قدرت ChatGPT، Claude و Perplexity را تأمین میکنند، یک اشتباه استراتژیک است. چالش اصلی در اینجا فراهم کردن زمینهای ساختاریافته و ماشینخوان است، بدون اینکه عملکرد استاتیک مورد نیاز برای کسب امتیازات بالای Core Web Vitals فدا شود.
توازن در مسیریابی چندزبانه
استودیوی ModernWebSEO بهجای استفاده از سگمنتهای پویا مانند [locale] یا کتابخانههایی مثل next-intl از سیستم مسیریابی «پوشه به ازای هر زبان» استفاده میکند. در این ساختار، هر زبان یک پوشه ساده در دایرکتوری app است. برای مثال، ریشه / زبان ترکی را مدیریت میکند، در حالی که /en برای انگلیسی، /es برای اسپانیایی و /ar برای عربی (راستبهچپ) اختصاص یافته است. این ساختار اجازه میدهد URLها بهطور کامل ترجمه شوند؛ مثلاً /hizmetler/e-ticaret در ترکی، به /en/services/e-commerce در انگلیسی و /es/servicios/tienda-online در اسپانیایی تبدیل میشود، بهجای اینکه صرفاً یک پیشوند ساده به URL اضافه شود. این رویکرد دقیق در مدیریت زبانها، یادآور استانداردهای گستردهای است که در چارچوب BhaShaVox برای بومیسازی فروشگاههای آنلاین در ۱۲۵ زبان به کار گرفته شده است.
نوشتن درخت مسیر هر زبان بهصورت دستی باعث میشود ترجمهها صریح باشند. این روش اجازه میدهد صفحات هر زبان، لایوت (Layout) و متون خاص خود را داشته باشند، بهجای اینکه به یک قالب واحد متکی باشند که فقط رشتههای متنی آن جابهجا میشوند.
برای حفظ پیشرندرینگ استاتیک و کارایی CDN، این استودیو از فراخوانی headers() در لایه اصلی (Root Layout) پرهیز کرده است، زیرا این کار باعث میشود تمام مسیرها به حالت پویا (Dynamic) درآیند. در عوض، آنها ویژگیهای زبان و جهت متن را به یک div پوشاننده در لایوتهای اختصاصی هر زبان اعمال میکنند. برای لایوت عربی (app/ar/layout.tsx)، آنها از این ساختار استفاده میکنند: <div lang="ar" dir="rtl" className={${cairoAr.variable} font-[family-name:var(--font-cairo)]}>.
اگرچه این بدان معناست که تگ <html lang="tr" dir="ltr"> در سطح سند برای تمام صفحات ترکی باقی میماند، اما سیگنالهای hreflang وزن واقعی زبان را برای موتورهای جستوجو منتقل میکنند. نویسنده اعتراف میکند که این یک مصالحه است؛ اگر بخواهند پروژه را از ابتدا شروع کنند، از سگمنت [lang] همراه با generateStaticParams استفاده میکنند تا اطمینان حاصل شود که ویژگی <html> در زمان ساخت (Build time) بهدرستی تنظیم شده است.
حل معمای نقشهی اسلاگهای ترجمهشده
از آنجایی که اسلاگها ترجمه شدهاند، سایت نمیتواند تگهای hreflang را صرفاً با تعویض پیشوند تولید کند. هر صفحه به یک نقشه نیاز دارد. تیم یک سیستم نگاشت صریح پیاده کرد تا از متقابل بودن (Reciprocity) لینکها اطمینان حاصل کند، زیرا این موضوع برای جلوگیری از گزارشهای Search Console مبنی بر «فقدان لینکهای بازگشتی» حیاتی است.
- نقشههای خدمات: یک رکورد به نام
HREFLANG_BY_SLUGدر کنار مسیر قرار دارد. برای مثال، اسلاگ 'e-commerce' به/hizmetler/e-ticaret(ترکی)،/en/services/e-commerce(انگلیسی)،/es/servicios/tienda-online(اسپانیایی) و/ar/services/e-commerce(عربی) متصل میشود. - نقشههای وبلاگ: ماژولهای مجزای نقشهی اسلاگ (مانند
blogSlugMapTrToEnوblogSlugMapEnToTr) ترجمه پستهای وبلاگ را مدیریت میکنند. تابعgenerateMetadataلینکهای جایگزین (Alternates) را از روی این نقشهها میسازد. - X-Default: سیگنال
x-defaultبه نسخه ترکی اشاره میکند، زیرا بازار اصلی آنهاست. - لینکهای کانونی (Canonicals): هر زبان از یک لینک کانونی خود-ارجاع (Self-referencing) استفاده میکند. صفحه انگلیسی هرگز به صفحه ترکی کانونی نمیشود، زیرا این کار به گوگل سیگنال میدهد که ترجمه را حذف کند.

همگامسازی Hreflang و نقشه سایت
برای تضمین سازگاری، سایت این لینکهای جایگزین را در app/sitemap.ts با استفاده از فیلد alternates.languages (که توسط MetadataRoute.Sitemap در Next پشتیبانی میشود) بازتاب میدهد. نقشه سایت از یک staticRouteMap برای صفحات اصلی استفاده میکند؛ مثلاً متصل کردن metodoloji (ترکی) به en/methodology (انگلیسی)، es/metodologia (اسپانیایی) و ar/methodology (عربی).
با این حال، نویسنده درباره یک تله رایج هشدار میدهد: تضاد بین متادیتای صفحه و نقشه سایت. در یک مورد، صفحه متدولوژی اسپانیایی هر چهار زبان را لیست کرده بود، اما نسخه انگلیسی فقط ترکی و انگلیسی را نشان میداد، در حالی که نقشه سایت هر چهار مورد را داشت. چون hreflang باید متقابل باشد، چنین ناهماهنگیهایی باعث بروز خطا در Search Console میشود. راهکار پیشنهادی، تولید هر دو مورد از یک نقشه واحد یا پیادهسازی یک بررسی CI برای مقایسه (Diff) آنهاست.
علاوه بر این، استودیو پاکسازی URLهای قدیمی را مدیریت میکند. پستهایی که قبلاً تحت پیشوند زبانی اشتباه منتشر شده بودند (مثلاً یک پست انگلیسی در مسیر /blog/...) در next.config.ts دارای ریدایرکتهای دائمی به مسیرهای صحیح زبان خود شدند تا از ایندکس تکراری جلوگیری شود.
مکانیسمهای اکتشاف مخصوص هوش مصنوعی
برای پاسخ به نیاز عاملهای هوش مصنوعی، استودیو یک سیستم سیگنالدهی سهلایه پیاده کرد. اول، آنها بهجای یک فایل استاتیک، از یک Route Handler برای robots.txt در مسیر app/robots.txt/route.ts استفاده میکنند. این کار اجازه میدهد قوانین از روی آرایهها ساخته شوند. آنها خط Content-Signal را اضافه کردهاند: search=yes, ai-input=yes, ai-train=yes.
این سیگنال در هدرهای HTTP (از طریق next.config.ts) و یک تگ <meta name="content-signal"> نیز تکرار شده است. این کار تضمین میکند کلاینتهایی که robots.txt را نادیده میگیرند، باز هم مجوزها را ببینند. فایل robots.txt بهطور خاص طیف گستردهای از خزنده ها را نام میبرد:
- باتهای جستوجو و AI: شامل GPTBot، OAI-SearchBot، ChatGPT-User، ClaudeBot، PerplexityBot، Perplexity-User، Google-Extended، Applebot-Extended، CCBot، Amazonbot و Meta-ExternalAgent.
- کاهش نویز: نویسنده اشاره میکند که ورودیهایی مانند "Bard"، "Gemini" و "Copilot" توکنهای واقعی User-Agent نیستند و اساساً نویز محسوب میشوند؛ کنترل واقعی برای هوش مصنوعی گوگل از طریق
Google-Extendedصورت میگیرد.
دوم، سایت یک فایل llms.txt در دایرکتوری public مستقر کرده است. این فایل مارکداون که بهصورت دستی نگهداری میشود، شامل یک نقلقول کوتاه در توصیف کسبوکار است و پس از آن بخشهایی برای خدمات، قیمتها، ابزارها، پستهای وبلاگ و ۹۱ صفحه راهنمای حرفهای به ازای هر زبان قرار دارد. یک فایل جامعتر به نام llms-full.txt نیز در کنار آن قرار گرفته است. برای جلوگیری از گمراه کردن عاملهای AI، آنها صراحتاً صفحاتی را که فقط در یک زبان موجود هستند (مثلاً "صفحه خدمات فقط در زبان ترکی") علامتگذاری کردهاند.
اکتشاف این فایل در <head> لایوت ریشه از طریق یک لینک مدیریت میشود: <link rel="alternate" type="text/markdown" href="/llms.txt" title="LLM Context" />. علاوه بر این، next.config.ts مسیر /.well-known/llms.txt را به /llms.txt ریدایرکت میکند تا کلاینتهایی که به آن مسیر نگاه میکنند، محتوا را بیابند.
سوم، برای عاملهایی که هدر Accept: text/markdown میفرستند یا مسیر .md را درخواست میکنند، یک Middleware بازنویسی (Rewrite) آنها را به یک API Route (/api/markdown) هدایت میکند. این مسیر، آدرس را تحلیل کرده و بدنه مارکداون پست را برمیگرداند، که شامل یک بلوک Front Matter (عنوان، نویسنده، تاریخها، URL کانونی) و FAQهای پیوست شده است. چون محتوا در فایلهای داده TypeScript قرار دارد، مارکداون از همان منبع HTML تولید میشود. برای جلوگیری از اینکه کشها مارکداون را به مرورگرها تحویل دهند، هدر Vary: Accept تنظیم شده است. نویسنده توصیه میکند این هدرها را پس از استقرار با curl -I بررسی کنید، زیرا برخی CDNها ممکن است هدر Vary را بازنویسی کنند.
دادههای ساختاریافته و شناسایی موجودیت
سایت از یک گراف JSON-LD واحد استفاده میکند که با ارجاعات @id در یک بلوک <script type="application/ld+json"> به هم متصل شدهاند. این کار از تکرار جلوگیری کرده و شناسایی موجودیتها را تقویت میکند.
- گره سازمان (Organization): بهعنوان
${SITE_URL}/#organizationتعریف شده و شامل تاریخ تأسیس (۲۰۲۰) و زبانهای موجود (ترکی، انگلیسی، اسپانیایی، عربی) است. - گره بنیانگذار (Founder): بهعنوان
${SITE_URL}/#founderتعریف شده و به سازمان لینک شده است. - گره وبسایت (WebSite): شامل مقادیر
inLanguageمانندtr-TR،en-US،es-ESوar-ARاست (هرچند نویسنده اشاره میکندar-ARاز نظر فنی عربی-آرژانتین است و بایدarیاar-SAباشد). - لینکدهی موجودیت: ویژگی
sameAsدرlib/config.tsشامل یک ورودی Wikidata است که به گوگل و ابزارهای AI اجازه میدهد "ModernWebSEO" را در پلتفرمهای مختلف به هم متصل کنند.
اسکمای سطح صفحه از قانون استفاده از زبان خود صفحه پیروی میکند. برای مثال، یک صفحه خدمات GEO انگلیسی، در گره Service خود inLanguage: 'en-US' را اعلام میکند و شامل یک اسکمای FAQPage انگلیسی است.
نویسنده دو مورد برای بهبود شناسایی کرده است: اصلاح کد کشور ar-AR و اصلاح ویژگی dateModified. در حال حاضر، گرههای جهانی WebPage و Article از new Date().toISOString() استفاده میکنند که در هر بار Build تغییر میکند. این موضوع با فلسفه استودیو در تضاد است که معتقدند تاریخ تغییر باید تنها زمانی تغییر کند که محتوای واقعی تغییر کرده باشد.
استراتژی IndexNow و Lastmod
برای تسریع ایندکس در بینگ و یاندکس، استودیو از IndexNow استفاده میکند. یک اسکریپت پس از ساخت (scripts/submit-indexnow.ts) که توسط هوک postbuild در npm اجرا میشود، نقشه سایت را واکشی کرده و برای هر URL که در ۲۴ ساعت گذشته تغییر کرده، به API IndexNow پینگ میفرستد.
اسکریپت پاسخها را با دقت مدیریت میکند: کدهای ۲۰۰ و ۲۰۲ یعنی موفقیت، ۴۲۹ باعث انتظار ۶۰ ثانیهای و یک بار تلاش مجدد میشود، ۴۰۳ نشاندهنده عدم دسترسی به فایل کلید است و ۴۲۲ نشاندهنده عدم تطابق هاست است. اسکریپت هرگز process.exit(1) را فراخوانی نمیکند زیرا پینگ موتور جستوجو نباید باعث شکست استقرار (Deployment) شود. فایل کلید در دایرکتوری public/ ذخیره شده و نام آن بر اساس API Key است.
بهطور حیاتی، تیم از استفاده از تاریخ ساخت (Build date) بهعنوان مقدار lastmod اجتناب میکند. آنها یک ثابت CONTENT_DATES برای بخشهای مختلف نگهداری میکنند (مثلاً core: '2026-06-19'، localizedServices: '2026-07-31'، hazirSite: '2026-10-09'). این کار از مشکل «نقشه سایت دروغگو» جلوگیری میکند، جایی که هر صفحه در هر بار Deploy بهروز شده به نظر میرسد و این امر میتواند اعتماد موتورهای جستوجو را سلب کند. پستهای وبلاگ از تاریخهای updatedAt یا publishedAt خود استفاده میکنند و صفحات لیستینگ از تاریخ جدیدترین پست.
یک محدودیت این است که هوک postbuild نقشه سایت را از دامنه زنده واکشی میکند در حالی که استقرار جدید هنوز در حال ساخت است. این یعنی اسکریپت نقشه سایت استقرار قبلی را میبیند. برای تغییرات حیاتی، نویسنده دستور npm run indexnow:manual را پس از زنده شدن استقرار اجرا میکند.
خلاصه پیادهسازی فنی
- پشته تکنولوژی: Next.js 16 (App Router)، TypeScript، Tailwind CSS v4، Vercel.
- نقشه سایت: ۷۰۰ URL در چهار زبان.
- عاملهای AI هدف: GPTBot، OAI-SearchBot، ClaudeBot، PerplexityBot و Google-Extended.
- مذاکره مارکداون: استفاده از هدرهای
Vary: Acceptبرای اطمینان از اینکه کشها مارکداون را به کاربران مرورگر تحویل نمیدهند. در این راستا، بهینهسازی زمان پاسخدهی برای مدلهای مختلف اهمیت دارد، مشابه آنچه در قاعده ۱.۴ برابر برای حل تردید میان مدلهای محلی و ابری بررسی شده است. - مسیریابی: پوشه به ازای هر زبان برای اسلاگهای ترجمهشده؛ بدون کتابخانه i18n.
این رویکرد، پارادایم سئو را از «بهینهسازی کلمات کلیدی» به «بهینهسازی موجودیت و زمینه» تغییر میدهد. با فراهم کردن یک مسیر مارکداون اختصاصی برای LLMها و یک تاریخچه تغییرات سختگیرانه و صادقانه، سایت اصطکاک عاملهای هوش مصنوعی را برای خلاصه کردن و ارجاع دقیق به کسبوکار کاهش میدهد. این دقیقاً با ستونهای فنی و GEO در متدولوژی ۴۷ مرحلهای که استودیو برای مشتریانش استفاده میکند، مطابقت دارد.
گام بعدی شما
- اگر از Next.js استفاده میکنید، یک فایل
llms.txtساده در پوشه public بسازید تا مدلهای زبانی بتوانند سریعتر شما را بشناسند. - بررسی کنید که آیا تاریخ
lastmodدر نقشه سایت شما واقعاً با تغییر محتوا تغییر میکند یا فقط با هر بار Deploy بهروز میشود. - برای سایتهای چندزبانه، بهجای تکیه بر کتابخانههای خودکار، یک نقشه صریح برای
hreflangایجاد کنید تا از خطاهای کنسول گوگل جلوگیری شود.
اما تأثیر این ساختار بر نرخ تبدیل کاربران انسانی حتی جالبتر است — به تحلیل ما درباره روانشناسی رابطهای کاربری در عصر AI مراجعه کنید.




گفتگو