انتقال سایت وردپرس به هاست جدید، مرحله به مرحله

انتقال سایت وردپرس به هاست جدید چهار بخش اصلی دارد: کپی فایل‌ها، انتقال دیتابیس، ویرایش wp-config.php با اطلاعات دیتابیس جدید و در آخر تغییر DNS دامنه به سرور جدید. اگر آدرس سایت هم عوض می‌شود، آدرس‌های داخل دیتابیس را باید با ابزاری جایگزین کنید که داده‌های سریال‌شده را خراب نکند. سایت را پیش از تغییر DNS با فایل hosts روی هاست جدید آزمایش کنید تا کاربران چیزی از جابه‌جایی نبینند.

این کار را می‌شود با افزونه‌هایی مثل Duplicator یا All-in-One WP Migration هم انجام داد. روش دستی که اینجا توضیح می‌دهیم برای هر حجمی از سایت کار می‌کند، به محدودیت آپلود هاست گیر نمی‌کند و وقتی جایی خطا بدهد، می‌دانید دقیقاً کدام مرحله بوده است.

پیش از انتقال سایت وردپرس

چند کار ساده جلوی بیشتر دردسرهای بعد از انتقال را می‌گیرد:

  • نسخه PHP هاست جدید را با هاست فعلی مقایسه کنید. اگر نسخه جدیدتر است، افزونه‌ها و قالب باید با آن سازگار باشند.
  • یک تا دو روز قبل، TTL رکوردهای A دامنه را به ۳۰۰ ثانیه کم کنید تا تغییر DNS سریع دیده شود.
  • از همه رکوردهای DNS فعلی، به‌خصوص MX و TXT، یادداشت بردارید. با تغییر NS به سرویس دیگر، این رکوردها خودکار منتقل نمی‌شوند.
  • اگر سایت فروشگاهی است، زمانی را انتخاب کنید که سفارش کمتری ثبت می‌شود و برای چند ساعت ثبت سفارش را متوقف کنید، وگرنه سفارش‌هایی که بین کپی دیتابیس و تغییر DNS در هاست قدیم ثبت شوند، گم می‌شوند.

مفهوم TTL و انواع رکوردها را در انواع رکورد DNS توضیح داده‌ایم.

روش دستی انتقال سایت وردپرس

۱. بکاپ از فایل‌ها

در cPanel با File Manager پوشه public_html را فشرده کنید و فایل zip را دانلود کنید. اگر به SSH دسترسی دارید، سریع‌تر است:

cd /home/USER
tar -czf site-files.tar.gz public_html

۲. خروجی گرفتن از دیتابیس

نام دیتابیس سایت را از خط DB_NAME در فایل wp-config.php پیدا کنید. برای دیتابیس‌های کوچک، خروجی phpMyAdmin کافی است. برای دیتابیس‌های بزرگ‌تر، از خط فرمان استفاده کنید:

mysqldump --single-transaction -u DB_USER -p DB_NAME > site-db.sql

با WP-CLI هم می‌شود همین کار را با wp db export site-db.sql انجام داد. جزئیات گزینه‌ها و روش خودکار کردن بکاپ در بکاپ گرفتن از دیتابیس MySQL آمده است.

۳. ساخت دیتابیس و کاربر در هاست جدید

در cPanel از بخش MySQL Databases و در DirectAdmin از MySQL Management یک دیتابیس و یک کاربر بسازید و همه دسترسی‌های آن دیتابیس را به کاربر بدهید. نام دیتابیس، نام کاربری و رمز را یادداشت کنید. در بیشتر هاست‌ها نام کاربر cPanel به ابتدای این نام‌ها اضافه می‌شود.

۴. آپلود فایل‌ها

فایل فشرده را در پوشه public_html هاست جدید آپلود و همان‌جا از حالت فشرده خارج کنید. آپلود یک فایل فشرده بزرگ خیلی سریع‌تر و مطمئن‌تر از آپلود هزاران فایل کوچک با FTP است.

۵. درون‌ریزی دیتابیس

phpMyAdmin برای فایل‌های بزرگ‌تر از حد آپلود هاست خطا می‌دهد. اگر SSH دارید، دیتابیس را مستقیم درون‌ریزی کنید:

mysql -u NEW_DB_USER -p NEW_DB_NAME < site-db.sql

۶. ویرایش wp-config.php

این چهار خط را با اطلاعات دیتابیس جدید عوض کنید. مقدار DB_HOST در بیشتر هاست‌ها localhost است و متغیر $table_prefix را اگر دست نزنید، همان مقدار قبلی می‌ماند که باید هم بماند:

define( 'DB_NAME', 'NEW_DB_NAME' );
define( 'DB_USER', 'NEW_DB_USER' );
define( 'DB_PASSWORD', 'NEW_DB_PASSWORD' );
define( 'DB_HOST', 'localhost' );

۷. آزمایش سایت پیش از تغییر DNS

در این مرحله دامنه هنوز به هاست قدیم اشاره می‌کند. برای اینکه فقط کامپیوتر خودتان سایت را از هاست جدید باز کند، یک خط به فایل hosts اضافه کنید. این فایل در ویندوز در C:\Windows\System32\drivers\etc\hosts و در لینوکس و مک در /etc/hosts است:

NEW_SERVER_IP  example.com  www.example.com

حالا صفحه اصلی، چند نوشته، ورود به پیشخوان، فرم تماس و در فروشگاه‌ها سبد خرید و پرداخت را امتحان کنید. اگر خطای 500 دیدید، به احتمال زیاد نسخه PHP یا فایل .htaccess مقصر است؛ روش پیدا کردن علت در خطای 500 Internal Server Error آمده است. بعد از پایان آزمایش، این خط را از فایل hosts پاک کنید.

۸. تغییر DNS و فعال کردن SSL

رکوردهای A دامنه و www را به IP هاست جدید عوض کنید، یا اگر هاست جدید NS خودش را می‌دهد، NS دامنه را تغییر دهید. گواهی SSL رایگان Let’s Encrypt معمولاً فقط وقتی صادر می‌شود که دامنه واقعاً به سرور جدید اشاره کند، پس بعد از تغییر DNS، از بخش SSL پنل گواهی را صادر کنید. روش کار در cPanel، DirectAdmin و سرور مجازی در نصب SSL رایگان آمده است.

اگر دامنه یا آدرس سایت عوض می‌شود

وردپرس آدرس سایت را در جدول options و همه لینک‌ها و تصاویر را با آدرس کامل در دیتابیس ذخیره می‌کند. بخشی از این داده‌ها سریال‌شده‌اند، یعنی طول هر رشته کنارش ذخیره شده است. اگر آدرس را با دستور REPLACE در SQL یا با جست‌وجو و جایگزینی در فایل sql عوض کنید، طول رشته‌ها نادرست می‌شود و تنظیمات قالب و ابزارک‌ها از بین می‌روند.

WP-CLI این مشکل را ندارد، چون داده‌های سریال‌شده را می‌شناسد. اول با گزینه dry-run ببینید چند مورد عوض می‌شود و بعد دستور اصلی را اجرا کنید:

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

بعد از تغییر دامنه، روی دامنه قدیم ریدایرکت 301 صفحه‌به‌صفحه به دامنه جدید بگذارید و در Google Search Console از ابزار Change of Address استفاده کنید تا رتبه‌های سایت به دامنه جدید منتقل شوند.

کارهای بعد از انتقال سایت

  • در پیشخوان به تنظیمات و بعد پیوندهای یکتا بروید و بدون تغییر ذخیره کنید تا فایل .htaccess دوباره ساخته شود.
  • کش افزونه‌ها و اگر CDN دارید، کش آن را پاک کنید.
  • ارسال ایمیل‌های سایت را امتحان کنید، مثلاً با فرم تماس یا فراموشی رمز. خیلی از هاست‌ها ارسال مستقیم را محدود می‌کنند و SMTP لازم می‌شود.
  • اگر کارهای زمان‌بندی‌شده مهم دارید، مطمئن شوید wp-cron یا Cron سرور در هاست جدید کار می‌کند.
  • هاست قدیم را دست‌کم چند روز نگه دارید. تا پایان TTL قبلی، بعضی کاربران و ایمیل‌ها هنوز به سرور قدیم می‌رسند.

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

انتقال سایت وردپرس با افزونه

افزونه‌های انتقال همه مراحل بالا را در یک بسته انجام می‌دهند: فایل‌ها و دیتابیس را بسته‌بندی می‌کنند، در مقصد باز می‌کنند و آدرس‌ها را جایگزین می‌کنند. برای سایت‌های کوچک راحت‌ترین راه‌اند. محدودیت‌شان حجم است: فایل بسته باید از حد آپلود هاست رد شود و نسخه رایگان بعضی از این افزونه‌ها برای سایت‌های بزرگ محدودیت دارد. اگر سایت چند گیگابایت عکس و فایل دارد، روش دستی یا انتقال از طریق SSH مطمئن‌تر است.

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

بعد از انتقال خطای Error establishing a database connection می‌گیرم

یکی از چهار مقدار DB_NAME، DB_USER، DB_PASSWORD یا DB_HOST در wp-config.php با اطلاعات هاست جدید نمی‌خواند، یا کاربر به دیتابیس دسترسی داده نشده است. هر چهار مقدار را دوباره از پنل هاست کپی کنید و دسترسی کاربر را بررسی کنید.

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

وردپرس جدول‌هایش را در دیتابیس پیدا نکرده است. یا دیتابیس درون‌ریزی نشده، یا مقدار $table_prefix در wp-config.php با پیشوند جدول‌ها در دیتابیس فرق دارد.

انتقال سایت وردپرس از لوکال به هاست چه فرقی دارد؟

مراحل همان است. تنها تفاوت این است که آدرس سایت از localhost به دامنه واقعی عوض می‌شود و باید حتماً مرحله جایگزینی آدرس با search-replace را انجام دهید.

سئوی سایت با انتقال به هاست جدید آسیب می‌بیند؟

اگر دامنه و آدرس صفحه‌ها عوض نشود، جابه‌جایی هاست به‌تنهایی اثری روی رتبه ندارد. مهم این است که سایت در طول انتقال در دسترس بماند و سرعت روی هاست جدید پایین نیاید. اگر دامنه عوض می‌شود، ریدایرکت 301 صفحه‌به‌صفحه و ابزار Change of Address ضروری‌اند.

پاسخی بگذارید

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