اگر در مسیر آنالیز وبسایت وردپرسی خودتون به وسیلۀ سرویس GTMetrix دچار مشکل شدید و این سرویس خطای Content-Encoding رو گزارش میکنه، با من همراه باشید.
در جریان بهینهسازی وبسایت fitlady.ir، متوجه بروز اشکالی در آنالیز وبسایت توسط GTMetrix شدم و پس از بررسیهای بسیار به یک راهحل عملی رسیدم.
لازمه بدونید که در این سایت وردپرسی، من از WP Rocket برای بهینهسازی و از ابرآروان به عنوان CDN و همچنین از هاست میزبانفا برای میزبانی سایت استفاده کردم.
اولین اقدام من جهت بررسی علت این مشکل، غیرفعالسازی افزونه WP Rocket بود که مشخص شد با غیرفعالسازی این افزونه مشکل رفع میشه. ولی چرا؟
افزونه رو دوباره فعال کردم و اینبار حالتهای مختلف Compression رو یکی به یکی غیرفعال کردم تا اینکه متوجه شدم با غیرفعالسازی حالت فشردهسازی HTML، خطای GTMetrix رفع میشه. عجب!
فرومهای تخصصی وردپرس رو بررسی کردم. بعد از مطالعه چند مورد، به این نتیجه رسیدم که این مشکل ارتباط مستقیم به ویژگی GZIP سایت داره.
بلافاصله با پشتیبانی هاست میزبانفا مشکل رو در میان گذاشتم. پس از کشمکشهای زیاد به این نتیجه رسیدم که علیرغم اطلاع دقیق پشتیبانی فنی میزبانفا، این مشکل تقریبا در همه وبسایتهایی که روی میزبانفا میزبانی میشن و همچنین از افزونه WP Rocket استفاده میکنن وجود داره. جالب شد.
وجه اشتراک مشخص بود ولی تفاوت اصلی هاست اشتراکی میزبانفا با دیگر هاستینگها مثل ایرانسرور در چی بود؟!
خب خیلی طول نکشید که به این تفاوت مهم پی بردم و اون روش Content-Compression در نظر گرفتهشده روی میزبانفا هست؛ یعنی روش فشردهسازی Brotli.
واقعاً تا حالا چیزی در مورد Brotli نشنیده بودم و پس از جستجو در گوگل متوجه شدم که روش بسیار جدید فشردهسازی فایلهای متنی مثل php و html و css و js و... هست که توسط شرکت گوگل ارائه شده و نسبت به GZIP خیلی برتری داره (منبع).
در ابتدای مقاله اشاره کردم که این مشکل تنها در صورت فعالبودن فشردهسازی HTML در WP Rocket رخ میده. طبق معمول شروع به جستجو کردم و تقریباً به این نتیجه رسیدم که WP Rocket تنظیماتی که در htaccess. اعمال میکنه مربوط به GZIP هست و یکی از دستورالعملهایی که برای فشردهسازی HTML در فایل htaccess. اعمال میکنه، دستور زیر هست:
RewriteRule .* "/wp-content/cache/wp-rocket/%{HTTP_HOST}%{REQUEST_URI}/index%{ENV:WPR_SSL}%{ENV:WPR_WEBP}.html%{ENV:WPR_ENC}" [L]
این قطعه کد رو بدون درنگ پاک کردم و برای جلوگیری از ویرایششدن دوباره اون توسط WP Rocket، سطح دسترسی فایل htaccess. رو به 444 تغییر دادم و پایان ماجرا.