کنسول جستجوی گوگل (Google Search Console) اغلب خطاهای soft 404 را در سایت‌های Next.js علامت‌گذاری می‌کند که می‌تواند باعث هدر رفتن بودجه خزش (crawl budget) شود.

خطای soft 404 در واقع چیست

یک پاسخ 404 واقعی، کد وضعیت HTTP 404 را ارسال می‌کند و به مرورگرها و ربات‌ها می‌گوید که منبع درخواستی وجود ندارد. در مقابل، یک soft 404 وضعیت 200 OK را برمی‌گرداند در حالی که محتوای بسیار کم یا هیچ محتوایی ارائه نمی‌دهد. موتورهای جستجو کد 200 را به عنوان یک صفحه سالم در نظر می‌گیرند، اما صفحه هیچ ارزشی ارائه نمی‌کند. نتیجه این امر، هدر رفتن چرخه‌های خزش و ارسال سیگنالی به گوگل است مبنی بر اینکه کیفیت محتوای سایت پایین است.

چرا Next.js در این تله گرفتار می‌شود

مسیریابی پویا (dynamic routing) در Next.js به شما اجازه می‌دهد صفحاتی مانند /products/[slug] را بدون نیاز به کدنویسی سخت (hard-coding) برای هر URL ارائه دهید. وقتی محصولی از پایگاه داده حذف می‌شود، کامپوننت همچنان رندر می‌شود و اگر کد وجود داده‌های مفقود را بررسی نکند، Next.js به طور پیش‌فرض با وضعیت 200 OK پاسخ می‌دهد. همین اتفاق زمانی می‌افتد که کاربر یک URL را اشتباه تایپ کند یا زمانی که مسیرهای قدیمی پس از بازطراحی سایت باقی می‌مانند. صفحه بارگذاری می‌شود، اما محتوای معناداری ارائه نمی‌دهد و باعث فعال شدن علامت soft-404 در Search Console می‌شود.

پیامدهای این مسئله برای صاحبان سایت

  • هدر رفتن بودجه خزش – ربات‌ها تعداد محدودی درخواست را برای هر سایت اختصاص می‌دهند. خطاهای soft 404 این سهمیه را مصرف می‌کنند و فرصت کمتری برای ایندکس شدن صفحات واقعی باقی می‌گذارند.
  • جریمه سئو – تکرار خطاهای soft 404 به موتورهای جستجو می‌گوید که کیفیت سایت پایین است.
  • آسیب به تجربه کاربری – بازدیدکنندگانی که وارد یک صفحه خالی می‌شوند بلافاصله سایت را ترک می‌کنند (bounce)، که باعث افزایش نرخ پرش و کاهش نرخ تبدیل می‌شود.

چگونه یک soft 404 را به یک 404 واقعی تبدیل کنیم

۱. استفاده از تابع کمکی داخلی notFound

  • App Router – تابع notFound را از next/navigation وارد (import) کنید. پس از واکشی داده‌ها، اگر نتیجه وجود نداشت، notFound() را فراخوانی کنید. در این صورت Next.js یک وضعیت 404 واقعی ارسال می‌کند.
  • Pages Router – زمانی که واکشی داده با شکست مواجه می‌شود، از getStaticProps یا getServerSideProps مقدار { notFound: true } را برگردانید. این کار برای API مسیریابی قدیمی‌تر نیز همان نتیجه را دارد.

۲. پیاده‌سازی یک صفحه 404 سفارشی

صفحه خطای پیش‌فرض کاربران را سردرگم رها می‌کند. یک فایل app/not-found.js (برای App Router) یا pages/404.js (برای Pages Router) شامل لینک‌های ناوبری، یک باکس جستجو یا پیشنهادهایی برای محتوای مرتبط ایجاد کنید. یک صفحه 404 با طراحی خوب، به جای فرستادن مستقیم بازدیدکنندگان به سمت خروج، آن‌ها را در سایت نگه می‌دارد.

۳. پاکسازی مسیرهای یتیم (orphaned routes)

صفحات استاتیکی که دیگر کاربردی ندارند را حذف کنید. اگر فایلی باقی مانده اما محتوای آن خالی است، یک پاسخ notFound اضافه کنید یا فایل را کاملاً حذف کنید. بازرسی‌های منظم دایرکتوری‌های pages یا app از نشت شدن URLهای از کار افتاده جلوگیری می‌کند.

۴. تنظیم ریدایرکت‌های دائمی (301) برای محتوای جابه‌جا شده

وقتی URL یک صفحه تغییر می‌کند، یک ریدایرکت 301 به مرورگرها و ربات‌ها می‌گوید که منبع به طور دائمی جابه‌جا شده است. ریدایرکت‌ها را در فایل next.config.js و زیر کلید redirects اضافه کنید. این کار از بازگشت وضعیت 200 بدون محتوا توسط URL قدیمی جلوگیری می‌کند.

۵. نظارت بر هشدارهای Search Console و اقدام بر اساس آن‌ها

برای شناسایی soft 404ها، مرتباً Google Search Console را چک کنید. از یک خزنده (crawler) خودکار استفاده کنید تا خطاهای جدید را قبل از انباشته شدن، شناسایی کنید. با هر هشدار به عنوان نشانه‌ای برای بررسی منطق زیربنایی واکشی داده‌ها برخورد کنید.

خلاصه کلام

صفحه‌ای که در حالی که هیچ محتوایی ارائه نمی‌دهد، وضعیت 200 OK را برمی‌گرداند، به آرامی ارزش سئو را تخلیه می‌کند. در Next.js، مسیرهای پویا و واکشی‌های بررسی‌نشده داده‌ها باعث رایج شدن soft 404ها می‌شوند، اما شما می‌توانید آن‌ها را حذف کنید. از notFound استفاده کنید، یک صفحه 404 سفارشی و کاربردی بسازید، مسیرهای یتیم را هرس کنید، ریدایرکت‌های 301 را پیکربندی کنید و در Search Console هوشیار بمانید تا از بودجه خزش محافظت کنید، رتبه‌ها را حفظ کنید و بازدیدکنندگان را در سایت نگه دارید.