FA-TOOLS — Header Component

راهنمای جامع و گام‌به‌گام رفع خطای لینک‌های داخلی بعد از تغییر دامنه وردپرس

تغییر دامنه وردپرس معمولاً باعث به جا ماندن آدرس‌های قدیمی در متن برگه، تصاویر، ویجت‌ها و تنظیمات افزونه‌ها می‌شود که نتیجه آن بروز خطای ۴۰۴ و افت سئو است. در این مقاله کاربردی، روش‌های استاندارد جایگزینی آدرس قدیمی با جدید در دیتابیس را بدون خراب شدن داده‌های سریالی (Serialized Data) و همراه با پاکسازی کش المنتور آموزش می‌بینید تا تمام لینک‌های داخلی به‌طور کامل اصلاح شوند.

خلاصه سریع نکات کلیدی:

  • تغییر آدرس در تنظیمات عمومی وردپرس فقط آدرس اصلی سایت را عوض می‌کند، نه لینک‌های درون متن نوشته‌ها و ابزارک‌ها.
  • هرگز از دستور ساده `REPLACE` در phpMyAdmin برای جداول حاوی داده‌های سریالی (مانند `wp_options`) استفاده نکنید؛ زیرا ساختار آرایه‌های php را می‌شکند.
  • بهترین ابزار رایگان و ایمن برای این کار افزونه Better Search Replace است.
  • اگر از صفحه ساز المنتور استفاده می‌کنید، پس از تغییر دیتابیس باید از مسیر «المنتور > ابزارها» آدرس را جایگزین و فایل‌های CSS را دوباره بسازید.
رفع خطای لینک‌های داخلی بعد از تغییر دامنه وردپرس — تصویر 1

زمانی که دامنه سایت وردپرسی خود را تغییر می‌دهید و آدرس‌های `siteurl` و `home` را در تنظیمات به‌روزرسانی می‌کنید، هسته وردپرس به‌طور خودکار متن نوشته‌ها، برگه، تصاویر آپلودشده و تنظیمات افزونه‌ها را ویرایش نمی‌کند. تمام این موارد به‌صورت آدرس مطلق (Absolute URL) با دامنه قدیم در جداول پایگاه داده ذخیره شده‌اند.

چالش اصلی در این فرایند، وجود داده‌های سریالی شده (Serialized Data) در وردپرس است. زبان PHP برای ذخیره‌سازی آرایه‌ها و اشیاء در دیتابیس، طول رشته‌ها را محاسبه می‌کند (مثلا `s:19:”http://old-domain.com”`). اگر آدرس جدید طول متفاوتی داشته باشد و به‌صورت دستی تغییر یابد، رشته سریالی نامعتبر شده و تنظیمات قالب یا افزونه مربوطه کلاً از کار می‌افتد.

روش اول: جایگزینی خودکار با افزونه Better Search Replace (پیشنهادی)

رفع خطای لینک‌های داخلی بعد از تغییر دامنه وردپرس — تصویر 2
پاسخ سریع: سریع‌ترین و ایمن‌ترین روش برای اصلاح لینک‌های داخلی استفاده از افزونه Better Search Replace است؛ زیرا داده‌های سریالی شده PHP را به‌طور هوشمند پردازش کرده و بدون آسیب به تنظیمات قالب، دامنه جدید را جایگزین می‌کند.

این روش برای ۹۹ درصد سایت‌های وردپرسی بهترین گزینه است. برای اجرای بدون خطای این روش، مراحل زیر را به ترتیب انجام دهید:

  1. پشتیبان‌گیری: قبل از هر کاری، یک بک‌آپ کامل از دیتابیس تهیه کنید.
  2. نصب افزونه: افزونه رایگان Better Search Replace را از مخزن وردپرس نصب و فعال کنید.
  3. ورود به محیط ابزار: از منوی مدیریت به مسیر ابزارها > Better Search Replace بروید.
  4. تنظیم مقادیر:
    • در کادر Search for آدرس قدیم (مثلاً `https://old-domain.com`) را وارد کنید.
    • در کادر Replace with آدرس جدید (مثلاً `https://new-domain.com`) را وارد کنید.
  5. انتخاب جداول: تمام جداول دیتابیس را انتخاب کنید (کلید Ctrl یا Cmd را نگه دارید و همه را انتخاب کنید).
  6. تست آزمایشی (Dry Run): تیک گزینه Run as a dry run را بزنید و روی دکمه اجرای جایگزینی کلیک کنید. این حالت هیچ تغییری در دیتابیس اعمال نمی‌کند و فقط تعداد موارد یافت شده را نشان می‌دهد.
  7. اجرای نهایی: پس از اطمینان از صحت آمار، تیک Run as a dry run را بردارید و مجدداً دکمه را بزنید تا تغییرات واقعی اعمال شوند.

اگر در زمینه بهینه‌سازی کدهای قالب یا افزونه‌های خود نیاز به الگوهای آماده دارید، می‌توانید به بخش تکه‌کدهای وردپرس مراجعه کنید.

روش دوم: اصلاح آدرس‌ها با دستورات WP-CLI (مخصوص سایت‌های بزرگ)

پاسخ سریع: برای دیتابیس‌های سنگین و چند گیگابایتی، ابزار خط فرمان WP-CLI بهترین گزینه است. دستور `wp search-replace` با سرعت بالا و بدون مواجهه با خطای تایم‌اوت سرور، تمام داده‌های سریالی را به‌طور دقیق به‌روزرسانی می‌کند.

اگر به SSH سرور دسترسی دارید، به پوشه اصلی وردپرس (Root) بروید و دستورات زیر را اجرا کنید. این روش بسیار سریع‌تر از افزونه‌های وب است.

ابتدا دستور را به‌صورت تست (Dry Run) اجرا کنید تا تعداد تغییرات مشخص شود:

wp search-replace 'https://old-domain.com' 'https://new-domain.com' --dry-run

در صورت صحت نتایج، دستور اصلی را جایگزین کنید:

wp search-replace 'https://old-domain.com' 'https://new-domain.com' --skip-columns=guid

نکته: پارامتر `–skip-columns=guid` باعث می‌شود ستون GUID در جدول `wp_posts` تغییر نکند. طبق استاندارد وردپرس، آدرس GUID ستون شناسه فید RSS است و نباید بعد از انتشار مطلب تغییر کند.

روش سوم: اجرای دستورات SQL و خطرات داده‌های سریالی

هشدار فنی: استفاده مستقیم از دستورات SQL متد `REPLACE` فقط برای متون متنی ساده (مانند محتوای `wp_posts`) امن است. اجرای این دستور روی جدول `wp_options` یا داده‌های متای المنتور موجب خراب شدن ساختار متغیرها می‌شود.

اگر به هر دلیلی مجبور به استفاده از phpMyAdmin هستید، دستورات زیر را فقط برای جداول بدون داده سریالی اجرا کنید:

-- اصلاح محتوای نوشته‌ها و برگه‌ها
UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://old-domain.com', 'https://new-domain.com');

-- اصلاح آدرس دیدگاه‌ها
UPDATE wp_comments SET comment_content = REPLACE(comment_content, 'http://old-domain.com', 'https://new-domain.com');

-- اصلاح لینک دیدگاه‌دهندگان
UPDATE wp_comments SET comment_author_url = REPLACE(comment_author_url, 'http://old-domain.com', 'https://new-domain.com');

برای مشاهده سایر نمونه دستورات کاربردی دیتابیس و برنامه‌نویسی می‌توانید از بخش مجموعه تکه‌کدهای کاربردی بازدید کنید.

گام حیاتی: بازسازی لینک‌های المنتور و پاکسازی کش CSS

رفع خطای لینک‌های داخلی بعد از تغییر دامنه وردپرس — تصویر 5

بسیاری از کاربران پس از جایگزینی دیتابیس متوجه می‌شوند که هنوز برخی از لینک‌ها یا پس‌زمینه‌های ایجاد شده با المنتور به دامنه قدیم اشاره دارند. دلیل این مسئله، ذخیره‌سازی آدرس‌ها در فایل‌های مجزای CSS و کش داخلی المنتور است.

برای حل کاملاً قطعی این مشکل، مراحل زیر را طی کنید:

  1. به منوی المنتور > ابزارها در پیشخوان وردپرس بروید.
  2. تب جایگزینی URL را انتخاب کنید.
  3. آدرس قدیمی و جدید را وارد کرده و روی جایگزینی URL کلیک کنید.
  4. سپس به تب کلیات (General) بروید و روی دکمه بازسازی فایل‌ها و داده‌ها (Regenerate Files & Data) کلیک کنید.

اگر قالب شما از استایل‌های سفارشی استفاده می‌کند، بررسی فایل‌های CSS نیز پیشنهاد می‌شود. در صورت نیاز به افزودن استایل‌های تصحیح‌کننده می‌توانید راهنماهای تکه‌کدهای CSS را مطالعه کنید.

مقایسه روش‌های جایگزینی آدرس در وردپرس

جدول زیر به شما کمک می‌کند متناسب با حجم سایت و سطح دسترسی خود، بهترین ابزار را برای اصلاح لینک‌های داخلی انتخاب کنید:

روش تغییر آدرس مناسب برای و ویژگی اصلی
افزونه Better Search Replace اکثر سایت‌های کوچک تا متوسط؛ ایمن‌ترین روش بدون نیاز به کدنویسی.
دستورات WP-CLI سایت‌های بزرگ و فروشگاهی؛ سرعت فوق‌العاده بالا و بدون قطعی سرور.
دستور مستقیم SQL تغییرات سریع در متن نوشته‌ها؛ نامناسب برای جداول تنظیمات و داده‌های سریالی.
ابزار داخلی المنتور اصلاح اختصاصی لینک‌های داخلی ساختار یافته در صفحات المنتور و پاکسازی کش CSS.

عیب‌یابی سریع و رفع مشکلات رایج

مشکل ۱: بهم ریختگی ظاهر سایت یا سفید شدن صفحه پس از اجرا

علت: خراب شدن رشته‌های سریالی شده به دلیل اجرای دستور مستقیم SQL یا ابزار غیر ایمن.
حل مسئله: پشتیبان دیتابیس را بازگردانی (Restore) کنید و این‌بار تنها از افزونه Better Search Replace یا WP-CLI استفاده کنید.

مشکل ۲: نمایش خطای Mixed Content (عدم بارگذاری آیکون‌ها یا تصاویر)

علت: برخی آدرس‌ها همچنان با پروتکل غیر امن `http` به‌جای `https` فراخوانی می‌شوند.
حل مسئله: یک مرتبه دیگر عملیات جستجو و جایگزینی را انجام دهید؛ این بار عبارت `http://new-domain.com` را به `https://new-domain.com` تغییر دهید.

مشکل ۳: ارجاع مداوم به دامنه قدیم هنگام کلیک روی لینک‌ها

علت: ماندن کش مرورگر، کش افزونه‌های راکت/سوپرکشت یا عدم تغییر فایل `.htaccess`.
حل مسئله: کش افزونه‌های مدیریت کش را کاملاً پاک کنید، ساختار پیوندهای یکتا را در پیشخوان یک‌بار بدون تغییر ذخیره کنید تا فایل `.htaccess` بازنویسی شود.

اگر وب‌سایت شما علاوه بر اسکریپت‌های وردپرس از کدهای جاوااسکریپت اختصاصی برای هدایت آدرس‌ها استفاده می‌کند، بخش تکه‌کدهای جاوااسکریپت می‌تواند به شما در مدیریت ریدایرکت‌ها کمک کند.

پرسش‌های متداول

آیا پس از اصلاح دیتابیس، نیازی به ریدایرکت ۳۰۱ در سرور هست؟

بله. تغییر لینک‌های دیتابیس فقط برای کاربران فعلی داخل سایت شماست. برای منتقل کردن اعتبارهای سئو و کاربرانی که از گوگل یا سایت‌های دیگر وارد دامنه قدیم می‌شوند، حتماً باید ریدایرکت ۳۰۱ کلی روی فایل `.htaccess` یا Nginx سرور قدیم برقرار باشد.

آیا تغییر ستون GUID در دیتابیس آسیب ایجاد می‌کند؟

بله، بهتر است ستون GUID تغییر نکند. خبرخوان‌ها (RSS Readers) از این ستون برای تشخیص جدید بودن مطالب استفاده می‌کنند. تغییر آن باعث ارسال مجدد تمام مطالب قدیمی به خبرخوان‌ها می‌شود.

آیا ابزارهای تغییر آنلاین مانند Velvet Service Links هم ایمن هستند؟

افزونه‌های قدیمی مانند Velvet فقط متن نوشته‌ها را ویرایش می‌کنند و جداول سفارشی یا داده‌های سریالی افزونه‌های جدید را پوشش نمی‌دهند. استفاده از Better Search Replace جایگزین بسیار استانداردتری است.

چگونه مطمئن شوم هیچ لینک قدیمی در سایت باقی نمانده است؟

می‌توانید از ابزارهایی مانند Screaming Frog یا افزونه Broken Link Checker استفاده کنید تا تمام صفحات سایت اسکن شده و لینک‌های باقی‌مانده روی دامنه قبلی به شما گزارش داده شوند.

سوالات متداول

چرا با تغییر آدرس در تنظیمات عمومی وردپرس، لینک‌های داخلی عوض نمی‌شوند؟

تنظیمات عمومی فقط آدرس اصلی سایت را تغییر می‌دهد؛ اما لینک‌های درون نوشته‌ها، برگه‌ها و ابزارک‌ها به صورت آدرس مطلق در دیتابیس ذخیره شده‌اند و باید جداگانه جایگزین شوند.

آیا استفاده از دستور SQL REPLACE برای دیتابیس وردپرس خطرناک است؟

بله، اجرای مستقیم دستور REPLACE روی جداول دارای داده‌های سریالی شده (مانند wp_options)، ساختار آرایه‌های PHP را می‌شکند و موجب خرابی تنظیمات قالب و افزونه‌ها می‌شود.

بهترین افزونه برای اصلاح لینک‌های داخلی پس از انتقال دامنه چیست؟

افزونه رایگان Better Search Replace بهترین گزینه است؛ زیرا داده‌های سریالی را به‌طور هوشمند پردازش کرده و بدون آسیب به سایت، آدرس جدید را جایگزین می‌کند.

چرا بعد از تغییر دامنه، هنوز برخی لینک‌ها در المنتور به دامنه قدیم اشاره دارند؟

المنتور آدرس‌ها را در فایل‌های مجزای CSS و کش ذخیره می‌کند. پس از تغییر دیتابیس باید از مسیر «المنتور > ابزارها» آدرس را جایگزین و فایل‌های CSS را بازسازی کنید.

Table of Contents

آخرین نوشته‌ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *