سرعت سایت هم روی تجربهٔ بازدیدکننده اثر دارد و هم روی رتبه در گوگل. خبر خوب این است که بیشتر کندیهای وردپرس از چند علت تکراری میآید و رفعشان کار برنامهنویسی نمیخواهد. قاعدهٔ اول: اول اندازه بگیرید، بعد درست کنید؛ وگرنه ممکن است روزها روی چیزی وقت بگذارید که مشکل اصلی نیست.
اندازهگیری
ابزار اصلی، PageSpeed Insights گوگل است. سه عدد مهماش، Core Web Vitals، معیارهاییاند که گوگل در رتبهبندی هم به آنها نگاه میکند:
| معیار | یعنی چه | خوب |
|---|---|---|
| LCP | چقدر طول میکشد بزرگترین بخش صفحه (معمولاً عکس اصلی یا تیتر) دیده شود | ۲٫۵ ثانیه یا کمتر |
| INP | صفحه بعد از کلیک یا لمس چقدر زود واکنش نشان میدهد | ۲۰۰ میلیثانیه یا کمتر |
| CLS | چقدر اجزای صفحه موقع بارگذاری جابهجا میشوند | ۰٫۱ یا کمتر |
- PageSpeed دو جور داده میدهد: دادهٔ واقعی کاربران (اگر سایت به اندازهٔ کافی بازدید داشته باشد) و تست آزمایشگاهی. دادهٔ واقعی مهمتر است.
- تست PageSpeed از سرورهای گوگل در خارج انجام میشود. اگر مخاطبتان ایرانی است، سایت را از داخل ایران هم با تب Network ابزار توسعهدهندهٔ مرورگر (F12) بسنجید.
- برای پیدا کردن افزونه یا کوئری کند، افزونهٔ Query Monitor نشان میدهد هر صفحه چه کوئریهایی زده و هر افزونه چقدر وقت گرفته است. بعد از عیبیابی غیرفعالش کنید.
پایه: هاست و PHP
- محل سرور: برای مخاطب ایرانی، سرور ایران معمولاً سریعتر است. معیارهای انتخاب را در مقالهٔ هاست ایران یا خارج آوردهایم.
- نسخهٔ PHP: وردپرس الان PHP 8.3 یا بالاتر را توصیه میکند. نسخههای جدید PHP محسوس سریعترند. در cPanel از MultiPHP Manager یا Select PHP Version عوضش کنید و بعد سایت را چک کنید؛ افزونهٔ خیلی قدیمی ممکن است با نسخهٔ جدید سازگار نباشد.
- دیسک و وبسرور: دیسک NVMe و وبسرور LiteSpeed با کش سمت سرور، تفاوت بزرگی در زمان پاسخ اول (TTFB) میسازند.
کش صفحه: بزرگترین قدم
بدون کش، وردپرس برای هر بازدید PHP را اجرا میکند و از دیتابیس میخواند. با کش صفحه، نسخهٔ آمادهٔ HTML یک بار ساخته میشود و به بقیه همان تحویل داده میشود؛ معمولاً چندین برابر سریعتر.
- اگر وبسرور هاست LiteSpeed است، افزونهٔ LiteSpeed Cache بهترین گزینه است، چون کش را خود وبسرور انجام میدهد. روی هاستهای دیگر، WP Super Cache (ساده) یا W3 Total Cache (پیشرفته) رایجاند. مقایسه در مقالهٔ افزونههای معروف آمده است.
- فقط یک افزونهٔ کش. دو افزونهٔ کش با هم تداخل میکنند و گاهی سایت را کندتر یا خراب میکنند.
- صفحههایی که برای هر کاربر فرق میکنند (سبد خرید، پرداخت، حساب کاربری) نباید کش شوند. افزونههای کش معروف این را برای ووکامرس میدانند، ولی بعد از فعال کردن کش یک خرید آزمایشی انجام دهید.
- کش شیء (Object cache): اگر هاست Redis یا Memcached میدهد، با فعال کردنش در افزونهٔ کش، کوئریهای تکراری دیتابیس از حافظه خوانده میشود. برای فروشگاه و سایتهای عضوگیری که کش صفحه کمتر به کارشان میآید، مفید است.
تصویرها
- عکس را قبل از آپلود کوچک کنید. عکس ۴۰۰۰ پیکسلی دوربین برای ستونی که ۸۰۰ پیکسل پهنا دارد، فقط حجم اضافه است.
- وردپرس از نسخهٔ ۵٫۸ فرمت WebP و از ۶٫۵ فرمت AVIF را میپذیرد که معمولاً خیلی سبکتر از JPEG است. افزونههایی مثل Converter for Media یا EWWW Image Optimizer عکسهای قبلی را هم تبدیل میکنند.
- بارگذاری تنبل (lazy loading) در خود وردپرس هست: عکسهای پایین صفحه وقتی بار میشوند که کاربر به آنها برسد. ولی عکس اصلی بالای صفحه نباید تنبل باشد، چون LCP را بد میکند.
- عکسها عرض و ارتفاع داشته باشند تا جایشان از اول رزرو شود و صفحه جابهجا نشود (CLS).
اسکریپتها و فونتهای خارجی؛ مشکل مخصوص ایران
یکی از رایجترین علتهای کندی سایتهای ایرانی، چیزی است که در ابزارهای تست خارجی دیده نمیشود: فونت، اسکریپت یا ویدیویی که از سرویسی بار میشود که از ایران کند یا مسدود است. مرورگر منتظر آن میماند و صفحه دیر کامل میشود.
- فونت: فونت فارسی (مثل وزیرمتن) را روی هاست خودتان بگذارید، نه از سرویس خارجی. فقط وزنهایی را که استفاده میکنید بار کنید و
font-display: swapبگذارید تا متن قبل از رسیدن فونت هم دیده شود. - ویدیو: ویدیوی جاسازیشده از سرویسهای مسدود را با یک عکس پیشنمایش عوض کنید، یا ویدیو را روی سرویسی بگذارید که از ایران در دسترس است.
- ابزارهای جانبی: چت آنلاین، آمار، کپچا و دکمههای شبکهٔ اجتماعی را یکییکی بسنجید. هر کدام که لازم نیست را بردارید و بقیه را با تأخیر (defer) بار کنید.
- در تب Network مرورگر، درخواستهایی را که خیلی طول میکشند یا خطا میدهند پیدا کنید؛ معمولاً مقصر همینها هستند.
قالب، صفحهساز و تعداد افزونه
- قالبهای چندمنظورهٔ «همهکاره» معمولاً کدهای زیادی بار میکنند که شما استفاده نمیکنید. قالب سبک با ویرایشگر داخلی وردپرس (بلوکها) سریعترین ترکیب است.
- صفحهسازها راحتاند ولی وزن اضافه دارند. اگر از یکی استفاده میکنید، امکانات بهینهسازی خودش را روشن کنید.
- تعداد افزونه بهتنهایی مهم نیست؛ افزونهٔ سنگین مهم است. با Query Monitor ببینید کدام افزونه وقت میگیرد.
دیتابیس و WP-Cron
وردپرس از هر ویرایش نوشته یک «نسخهٔ قبلی» (revision) نگه میدارد و دیتابیس سایتهای قدیمی پر از آنهاست. تعدادشان را در wp-config.php محدود کنید و با افزونهای مثل WP-Optimize، نسخههای قبلی، دیدگاههای اسپم و دادههای موقت منقضی را پاک کنید (قبلش بکاپ بگیرید):
define( 'WP_POST_REVISIONS', 10 );کارهای زمانبندیشدهٔ وردپرس (WP-Cron) بهطور پیشفرض با بازدیدها اجرا میشوند، یعنی بازدیدکننده گاهی منتظر کار پسزمینه میماند، و در سایت کمبازدید هم کارها دیر اجرا میشوند. بهتر است آن را به کرون واقعی هاست بسپارید:
define( 'DISABLE_WP_CRON', true );بعد در cPanel → Cron Jobs یک کار هر ۱۵ دقیقه اضافه کنید (مسیر و دامنه را با سایت خودتان عوض کنید):
*/15 * * * * php /home/USERNAME/public_html/wp-cron.php >/dev/null 2>&1CDN
CDN فایلهای ثابت (عکس، CSS، JS و حتی خود صفحهها) را از نزدیکترین سرور به بازدیدکننده تحویل میدهد و بار هاست را کم میکند. برای سایتی که هم مخاطب داخلی دارد و هم خارجی، یا ترافیک بالایی دارد، فرق محسوسی میسازد. CDN جلفاکلاد را ببینید.
ترتیب پیشنهادی
- اندازهگیری با PageSpeed و تب Network
- PHP 8.3 به بالا
- یک افزونهٔ کش، درست تنظیمشده
- تصویرها: اندازه، WebP و عکس اصلی بدون lazy
- فونت روی هاست خودتان، و حذف اسکریپتهای خارجی غیرضروری
- پاکسازی دیتابیس و کرون واقعی
- CDN
بعد از هر قدم دوباره اندازه بگیرید تا بدانید کدام واقعاً اثر داشت.
منابع
- web.dev — Web Vitals web.dev/articles/vitals
- PageSpeed Insights pagespeed.web.dev
- WordPress Developer — Optimization developer.wordpress.org/advanced-administration/performance/optimization
- WordPress Developer — Cron developer.wordpress.org/plugins/cron