پروژه‌ای را به یاد می‌آورم که مدیرش همه‌چیز را درست انجام داده بود: قالب سبک، افزونه‌های ضروری، سایت با کش و CDN. اما سایت هنوز در بعضی ساعات روز کند می‌شد. بعد از بررسی پیکربندی سرور، معلوم شد مشکل در سه تنظیم وردپرس‌محور بود: WP-Cron روی هر بازدید اجرا می‌شد، max_execution_time پایین تنظیم شده بود و Object Cache فعال نبود. این سه تنظیم ساده، روی سایت وردپرسی اثر مستقیم داشتند اما در بحث‌های عمومی بهینه‌سازی سرور کمتر به آن‌ها پرداخته می‌شود. بهینه‌سازی سرور برای وردپرس، فراتر از بهینه‌سازی عمومی سرور است؛ نیازمند دانستن رفتار اختصاصی وردپرس در هر لایه است. در این نوشته، از تجربه پروژه‌های واقعی، این تنظیمات اختصاصی را در هفت لایه مرور می‌کنم. برای مباحث عمومی سرور، بهینه‌سازی سرور برای افزایش سرعت سایت نقطه شروع خوبی است.

چرا بهینه‌سازی سرور برای وردپرس متفاوت است

وردپرس چند ویژگی دارد که بهینه‌سازی سرور را با سایت‌های اختصاصی متفاوت می‌کند:

  • معماری Plugin-Heavy: هر افزونه، کد PHP و کوئری دیتابیس اضافه می‌کند. سرور باید برای این بار اضافه پیکربندی شود.
  • نوع فایل‌های تحویلی: وردپرس حجم قابل توجهی از فایل‌های CSS و JS در هر صفحه تولید می‌کند که با پیکربندی درست سرور می‌شود بهینه کرد.
  • WP-Cron داخلی: وردپرس به‌طور پیش‌فرض، کرون داخلی دارد که با هر بازدید کاربر چک می‌شود. این رفتار در سرورهای پربار، اثر مستقیم روی سرعت دارد.
  • پیشخوان داینامیک: صفحات پیشخوان وردپرس، پویا هستند و از کش صفحه استفاده نمی‌کنند. بهینه‌سازی این لایه، تفاوت محسوسی در تجربه کاربری کارمندان سایت دارد.

اگر با لایه‌بندی کلی وردپرس آشنا نیستید، ابتدا وردپرس چیست را بخوانید. تنظیمات اختصاصی PHP و وردپرس در ادامه می‌آید.

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

لایه اول: پیکربندی PHP برای وردپرس

وردپرس نیازهای مشخصی از PHP دارد که با پیکربندی درست، سرعت را محسوس بالا می‌برد. مقادیر پیشنهادی:

پارامترحداقلمقدار پیشنهادینقش
memory_limit۱۲۸M۲۵۶M یا ۵۱۲Mپردازش درخواست‌های سنگین
max_execution_time۳۰۱۲۰ تا ۳۰۰عملیات طولانی مثل ایمپورت
max_input_vars۱۰۰۰۳۰۰۰ تا ۵۰۰۰فرم‌های پیچیده ووکامرس
post_max_size۸M۶۴M یا ۱۲۸Mآپلود فایل‌های بزرگ
upload_max_filesize۲M۶۴M یا ۱۲۸Mآپلود تصاویر بزرگ

سه توصیه در این لایه که در پروژه‌های واقعی بارها به‌کارم آمده:

  • memori_limit بالای ۲۵۶M: وردپرس با افزونه‌های معمولی، به‌راحتی از ۱۲۸M عبور می‌کند. اگر محدودیت پایین باشد، خطای Allowed memory size exhausted ظاهر می‌شود. مسیر در خطای Memory limit در PHP.
  • max_input_vars کافی برای ووکامرس: فرم‌های ووکامرس با متغیرهای زیاد ممکن است از ۱۰۰۰ پیش‌فرض رد شوند. مسیر در رفع خطای صفحه پرداخت ووکامرس.
  • OPcache با اندازه مناسب: مقدار opcache.memory_consumption بین ۱۲۸M تا ۲۵۶M برای سایت وردپرسی متوسط کافی است.

نکته مهم: تغییر این پارامترها معمولاً از طریق فایل php.ini یا از پنل هاست انجام می‌شود. اگر با cPanel کار می‌کنید، مسیر دسترسی در cPanel چیست آمده است.

لایه دوم: OPcache و رفتار وردپرس

OPcache در همه سایت‌های PHP مفید است، اما در وردپرس اثر ویژه دارد چون تعداد فایل‌های PHP به‌کار‌رفته زیاد است. سه تنظیم کلیدی:

  • فعال‌سازی از روز اول: بعضی هاست‌ها OPcache را در پنل غیرفعال می‌گذارند. فعالش کنید. مسیر در بهبود عملکرد سرور.
  • مقدار opcache.memory_consumption: برای سایت وردپرسی با ده‌ها افزونه، حداقل ۱۲۸M. اگر پنل اجازه می‌دهد، ۲۵۶M.
  • مقدار opcache.max_accelerated_files: وردپرس با افزونه‌های زیاد می‌تواند از ۱۰ هزار فایل PHP رد شود. مقدار پیشنهادی: ۱۵۰۰۰ یا ۲۰۰۰۰.

یک نکته اختصاصی وردپرس: OPcache با کش قالب و افزونه‌ها تداخل ندارد. بر عکس، این دو مکمل هم هستند. بعضی از کاربران فکر می‌کنند فعال‌سازی OPcache می‌تواند با کش قالب مشکل بسازد؛ این باور غلط است. تنها در زمان توسعه فعال، OPcache می‌تواند تغییرات فوری کد را نشان ندهد. برای سایت زنده، همیشه فعال باشد.

لایه سوم: وب‌سرور و قواعد وردپرس

سه قاعده اختصاصی وردپرس که در پیکربندی وب‌سرور مهم است:

  • Rewrite Rules: قواعد بازنویسی وردپرس (permallinks) در Apache نیاز به mod_rewrite فعال دارد. اگر پیوندهای یکتا کار نمی‌کنند، این ماژول غیرفعال است. مسیر در رفع خطای پیوندهای یکتا.
  • فایل‌های حساس: مسیر wp-config.php، wp-admin/install.php و فایل‌های مشابه باید از دسترسی بیرونی محدود شوند. مسیر در امن‌سازی wp-config.
  • مدیریت پوشه uploads: پوشه آپلود نباید اجرای PHP داشته باشد. قواعد وب‌سرور در این زمینه ضروری است.

انتخاب وب‌سرور در وردپرس تفاوت محسوسی می‌سازد. LiteSpeed برای وردپرس، بهترین توازن بین سرعت و راحتی پیکربندی را دارد و کش داخلی‌اش با افزونه LiteSpeed Cache یکپارچه است. Nginx انتخاب فنی‌تر برای کسانی است که انعطاف کامل می‌خواهند. Apache همچنان پشتیبانی گسترده‌تری دارد اما برای وردپرس مدرن، سبک‌ترین گزینه نیست. مقایسه در تفاوت سرور لینوکس و ویندوز.

لایه چهارم: کش سمت سرور برای وردپرس

کش در وردپرس، پیچیدگی‌های خاص خودش را دارد. سه نوع کش و تنظیم اختصاصی آن‌ها:

  • کش صفحه: صفحات عمومی مثل خانه، نوشته‌ها و آرشیو کش شوند. مسیرهای پویا (سبد خرید، حساب کاربری، پیشخوان) استثنا شوند. افزونه LiteSpeed Cache یا WP Rocket بهترین گزینه‌ها هستند. مسیر در افزونه‌های کش وردپرس و مقایسه WP Rocket و W3 Total Cache.
  • کش آبجکت (Object Cache): این لایه در وردپرس بسیار پراثر است چون کوئری‌های وردپرس زیاد هستند. Redis یا Memcached انتخاب استاندارد. مسیر در کاهش مصرف منابع هاست.
  • کش مرورگر: در کنار سرور تنظیم می‌شود و برای فایل‌های استاتیک است. مسیر در افزایش سرعت سایت وردپرسی.

یک نکته اختصاصی وردپرس: صفحات پیشخوان به‌طور پیش‌فرض از کش صفحه استفاده نمی‌کنند. اگر پیشخوان کند است، مشکل معمولاً از کوئری‌های دیتابیس یا افزونه‌های سنگین است. Object Cache در این لایه بیشترین اثر را دارد.

لایه پنجم: WP-Cron و زمان‌بندی‌ها

WP-Cron یک سیستم زمان‌بندی داخلی در وردپرس است که با هر بازدید کاربر چک می‌شود. این رفتار در سایت‌های پربار مشکل ساز است چون:

  • با هر بازدید کاربر، حتی چند میلی‌ثانیه بار اضافه ایجاد می‌کند.
  • در سایت‌های کم‌بازدید، رویدادها با تأخیر اجرا می‌شوند.
  • اگر رویداد سنگینی در همان لحظه اجرا شود، همان درخواست کاربر معطل می‌ماند.

راه‌حل استاندارد: جایگزینی WP-Cron با Cron سرور. مسیر در کرون وردپرس و عیب‌یابی کرون وردپرس. در پروژه‌های واقعی، این یک تغییر معمولاً چند درصد از بار سرور را کم می‌کند و در سایت‌های فروشگاهی که سفارش‌ها و ایمیل‌ها روی کرون وابسته‌اند، تفاوت محسوس است.

WP-Cron یک ابزار راحت است برای سایت‌های کوچک، اما یک نقص جدی در سایت‌های بزرگ. جایگزینی‌اش با cron سرور، یکی از آن تغییرات کوچکی است که به‌ندرت کسی می‌بیند اما در سرعت، اثرش محسوس است.

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

دیتابیس وردپرس، بخش مهمی از سرعت سایت است. سه تنظیم اختصاصی:

در پروژه‌های وردپرسی، بعد از کش صفحه، بهینه‌سازی دیتابیس دومین اثر بزرگ را دارد. متأسفانه این لایه معمولاً نادیده گرفته می‌شود چون اثرش با چشم دیده نمی‌شود اما در TTFB مستقیم است.

لایه هفتم: امنیت لایه سرور برای وردپرس

امنیت و سرعت در لایه سرور، به‌شدت به هم پیوسته‌اند. سه تنظیم امنیتی که در سرعت وردپرس هم اثر دارند:

  • فایروال نرم‌افزاری بهینه: بستن پورت‌های غیرضروری و قواعد هدفمند. مسیر در فایروال نرم‌افزاری روی سرور.
  • افزونه امنیتی سبک: افزونه‌های امنیتی سنگین در هر درخواست، کد PHP زیادی اجرا می‌کنند. مسیر در افزونه‌های امنیتی وردپرس.
  • محافظت از wp-login.php در سطح سرور: محدودسازی نرخ درخواست در سطح وب‌سرور بهتر از افزونه است و هزینه سرور کمتری دارد.

مسیر امنیت سرور در اصول امنیت سرور و افزایش امنیت سرور. برای VPS، مراحل اختصاصی در امنیت VPS.

اشتباهات رایج در بهینه‌سازی سرور وردپرس

پنج اشتباه که در پروژه‌های واقعی دیده‌ام:

  1. نصب دو افزونه کش هم‌زمان: شایع‌ترین اشتباه. دو افزونه کش، همدیگر را خنثی می‌کنند. یکی را انتخاب کنید.
  2. WP-Cron روی بازدید کاربر بدون توجه: در سایت‌های پربازدید، این اشتباه می‌تواند تا ۱۰ درصد از بار سرور را مصرف کند.
  3. مقدار max_input_vars پیش‌فرض روی فروشگاه: فرم‌های ووکامرس با متغیرهای زیاد، ممکن است فیلدها را از دست بدهند. مسیر در رفع خطای پرداخت ووکامرس.
  4. OPcache غیرفعال: یک تنظیم که به‌تنهایی ۳۰ تا ۵۰ درصد سرعت PHP را بالا می‌برد، اما گاهی از چشم می‌افتد.
  5. نصب افزونه‌های بهینه‌سازی متعدد: هر افزونه بهینه‌سازی، خودش بار دارد. یک کش و یک بهینه‌سازی تصویر کافی است.

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

پرسش‌های پرتکرار درباره بهینه‌سازی سرور وردپرس

آیا روی هاست اشتراکی هم می‌توان سرور وردپرس را بهینه کرد؟ بخشی از تنظیمات (OPcache، PHP) معمولاً در اختیار شماست. اما پارامترهای اصلی سرور و MySQL، معمولاً محدود. برای بهینه‌سازی کامل، VPS یا هاست مدیریت‌شده وردپرس گزینه بهتری است. مسیر در بهترین هاست وردپرس.

آیا برای سایت وردپرسی سبک، همه این تنظیمات لازم است؟ نه. برای سایت شخصی، OPcache و کش صفحه کافی است. برای سایت‌های بزرگتر، لایه‌های دیگر اضافه می‌شوند. ترتیب پیشنهادی: OPcache، کش صفحه، کش آبجکت، جایگزینی WP-Cron و بعد لایه‌های دیگر.

LiteSpeed یا Nginx برای وردپرس؟ LiteSpeed برای وردپرس ساده‌تر و سریع‌تر است، چون کش داخلی و افزونه اختصاصی دارد. Nginx گزینه فنی‌تر است با انعطاف بیشتر. برای اکثر سایت‌ها LiteSpeed انتخاب پیش‌فرض من است.

چگونه بفهمم WP-Cron گلوگاه است؟ سه نشانه: مصرف CPU در ساعات تصادفی می‌پرد، رویدادها با تأخیر اجرا می‌شوند و لاگ‌ها زمان اجرای غیرعادی دارند. مسیر تشخیص در عیب‌یابی کرون وردپرس.

آیا Object Cache برای همه سایت‌ها لازم است؟ برای سایت‌های کوچک، می‌توان با کش صفحه سر کرد. برای سایت‌های با ترافیک بالا یا پیشخوان پرکاربرد، Object Cache تفاوت محسوسی می‌سازد. برای فروشگاه ووکامرس، تقریباً ضروری است.

چند وقت یک بار باید تنظیمات سرور را بازبینی کنم؟ هر سه ماه. علاوه بر این، پس از هر آپدیت بزرگ وردپرس یا تغییر قابل توجه سایت، بازبینی کوتاهی لازم است. مسیر ابزارها در مقایسه ابزارهای مانیتورینگ سرور.

بهینه‌سازی سرور وردپرس به‌عنوان پروژه پیوسته

بهینه‌سازی سرور برای وردپرس، یک بار تنظیم و فراموش‌کردن نیست. سه نشانه که سرور وردپرس شما در وضعیت بهینه است: TTFB صفحه‌های پویا زیر ۵۰۰ میلی‌ثانیه، مصرف CPU در پنل هاست در همه ساعات روز پایدار و پیشخوان سریع در ترافیک بالا. اگر امروز فقط یک کار می‌کنید، به پنل هاست بروید و ببینید OPcache فعال است. اگر نیست، فعالش کنید و یک هفته بعد، همان سه عدد TTFB را دوباره اندازه بگیرید. تجربه پروژه‌های واقعی می‌گوید این یک تنظیم ساده، بیشترین بازگشت سرمایه را داشته. اگر تجربه‌ای از بهینه‌سازی سرور وردپرس یا کشف یک گلوگاه غیرمنتظره دارید، در دیدگاه بنویسید؛ همین روایت‌ها برای سایت‌های دیگر، نقشه راه عملی‌تری می‌سازند. ⚙️