اگر قرار باشد از میان صدها پروژهای که در این ۱۵ سال دست گرفتهام، یکی را انتخاب کنم که بیشترین دردسر تکنیکال را داشت، بیشک یک وبسایت وردپرسی بود. نه به خاطر اینکه وردپرس بد است – اتفاقاً بهخاطر انعطافپذیریاش دوستش دارم – بلکه به این دلیل که خیلیها آن را مثل یک اسباببازی ساده میبینند، دهها افزونه روی هم تلنبار میکنند، و بعد انتظار دارند که گوگل مثل یک موشک آن را بالا ببرد.
یکی از مشتریان قدیمیام، یک مجلهٔ اینترنتی با ۱۲ هزار مقاله و ۶۰ افزونهٔ فعال داشت. ترافیک ارگانیکاش بعد از یک Core Update نصف شده بود. وقتی وارد پیشخوان وردپرس و سرور شدم، دیدم که LCP بالای ۱۰ ثانیه بود، ۲۰ هزار URL پارامتری ایندکس شده بود، و robots.txt کل بخشهای مهم را بسته بود. به مدیر سایت گفتم: «شما یک فراری دارید که ۶۰ تا یدککش به آن بستهاید و تعجب میکنید چرا نمیتواند برانَد.»
در این مقاله، میخواهم دقیقاً قدمهایی را که برای آن سایت و دهها سایت وردپرسی دیگر اجرا کردم، به ترتیب اولویت، با تو به اشتراک بگذارم. فرقی نمیکند یک وبلاگ ساده داری یا یک فروشگاه ووکامرسی. این چکلیست، فونداسیون سئوی تکنیکال سایت وردپرسی توست.
فاز صفر: قبل از هر چیز، زیرساخت را بررسی کن
قبل از اینکه سراغ تنظیمات وردپرس بروی، مطمئن شو که خانهٔ دیجیتال تو روی زمین محکمی بنا شده.
۱. هاست: از شر هاستهای اشتراکی شلوغ خلاص شو
وردپرس اگر روی یک هاست ضعیف باشد، حتی با بهترین تنظیمات هم کند میماند. من در پروژهای که LCP از ۱۰ ثانیه به ۲ ثانیه رسید، اولین کارم انتقال به یک هاست ابری با منابع اختصاصی بود. اگر فروشگاه یا سایت پرترافیک داری، هاست اشتراکی سم است. به سراغ سرور مجازی (VPS) یا هاستهای ابری وردپرسی برو.
۲. نسخهٔ PHP: همیشه از آخرین نسخهٔ پایدار استفاده کن
وارد cPanel یا دایرکت ادمین شو و PHP را به نسخهٔ ۸.۱ یا بالاتر ببر. وردپرس روی PHP 8.x تا ۳۰٪ سریعتر از 7.x عمل میکند. قبل از تغییر، یک بررسی compatibility با افزونهها انجام بده. خودم یک بار روی یک سایت قدیمی، با یک اسکریپت PHP ساده، همهٔ افزونهها را در یک محیط Staging با PHP 8 تست کردم تا مطمئن شوم سایت نمیخوابد.
۳. SSL: نه فقط فعال، که کامل
با افزونهٔ Really Simple SSL مطمئن شو که کل سایت از HTTP به HTTPS ریدایرکت میشود، و هیچ محتوای Mixed Content (مثلاً عکسی که با HTTP لود میشود) وجود ندارد. در Search Console هم Property جداگانه برای HTTPS نساز، همان یکی را نگه دار.
قدم اول: پیوندهای یکتا (Permalinks) – نشانی خانهات را خوانا بنویس
یکی از اولین کارهایی که در هر وردپرس جدید میکنم، رفتن به «تنظیمات → پیوندهای یکتا» و انتخاب گزینهٔ «نام نوشته» است.
ساختار پیشفرض
/?p=123برای سئو فاجعه است. هیچ معنایی برای گوگل و انسان ندارد.ساختار
/%postname%/بهترین است. اگر تاریخ انتشار برای محتوایت مهم نیست، کاملاً ساده باشد.برای فروشگاههای ووکامرسی، مطمئن شو که پایهٔ محصولات از
/product/یا/shop/شروع میشود و تمیز است.
یک اشتباه رایج: بعضیها بعد از چند سال ساختار پیوندها را عوض میکنند بدون ریدایرکت. این یعنی ۴۰۴ سراسری. اگر مجبور به تغییر هستی، با افزونهٔ Redirection یا با کدنویسی در .htaccess، تکتک URL های قدیمی را ۳۰۱ کن. من خودم یک اسکریپت Python دارم که با گرفتن نقشهٔ سایت قدیم و جدید، فایل htaccess. را خودکار میسازد.
قدم دوم: سرعت و Core Web Vitals – نفس وردپرست را باز کن
گوگل سرعت را دوست دارد، کاربر هم. برای یک سایت وردپرسی، این ۵ اقدام مثل جراحی قلب است:
۱. کشینگ (Caching): نبض سایت را آرام کن
از یک افزونهٔ کش قدرتمند استفاده کن. من معمولاً بین WP Rocket (پولی ولی عالی) و W3 Total Cache (رایگان) یکی را انتخاب میکنم. تنظیمات حیاتی:
Page Cache فعال شود.
Gzip Compression روشن باشد.
Browser Cache برای فایلهای CSS، JS و عکسها با expire بالا.
اگر سرورت از Redis پشتیبانی میکند، Object Cache را هم فعال کن. در یک فروشگاه ووکامرسی، این کار کوئریهای دیتابیس را از ۵۰ به ۵ رساند!
۲. تصاویر: فیلهای چاق را لاغر کن
بیشترین وزن سایتهای ایرانی، عکسهاست. من یکبار با اسکریپت Python کل پوشهٔ uploads یک سایت را اسکن کردم و عکسهای بالای ۲۰۰ کیلوبایت را فشرده کردم. حجم کل ۶۰٪ کم شد.
با افزونهها هم میشود:
Imagify یا ShortPixel: تبدیل خودکار به WebP و فشردهسازی. تنظیم کن که عکسهای جدید در هنگام آپلود، بهینه شوند.
Lazy Load: WP Rocket خودش دارد، یا از a3 Lazy Load استفاده کن. تصاویر زیر فولد فقط وقتی کاربر اسکرول کرد لود شوند.
۳. فایلهای CSS و JS: رژیم سخت بگیر
با Autoptimize یا WP Rocket، CSS و JS را Minify و Combine کن. ولی حواست باشد: بعضی افزونهها با ترکیبشدن قهر میکنند. همیشه بعد از هر تغییر، با Chrome DevTools کنسول را چک کن.
اسکریپتهای غیرضروری (مثل فونتهای گوگل، آیکونهای فونتآسوم که کامل لود میشوند) را حذف کن یا به تعویق بینداز.
یکبار دیدم سایتی فقط برای یک آیکون جستجو، کل کتابخانهٔ Font Awesome رو لود میکرد. با جایگزینی یک SVG ساده، ۲۰۰ کیلوبایت کم شد.
۴. Critical CSS را دستی یا اتوماتیک تزریق کن
برای بهبود Largest Contentful Paint (LCP)، CSS حیاتی بالای صفحه را در <head> قرار بده. WP Rocket این کار را اتوماتیک انجام میدهد.
۵. CDN: محتوای سنگینت را پخش کن
اگر مخاطب ملی داری، یک CDN ایرانی مثل ابر آروان کمک میکند که فایلهای CSS، JS و عکسها از نزدیکترین سرور به کاربر بارگذاری شود. Cloudflare هم رایگان است و APO دارد برای وردپرس.
قدم سوم: خزیدن و ایندکس – به گوگل بگو کجا برود و کجا نرود
۱. robots.txt را هوشمندانه تنظیم کن
مسیر فایل: یا با افزونهٔ Yoast SEO (بخش Tools → File Editor) یا به صورت دستی در ریشهٔ سایت. این یک نمونهٔ استاندارد است:
User-agent: *Disallow: /wp-admin/Disallow: /wp-login.phpDisallow: /cart/Disallow: /checkout/Disallow: /my-account/Disallow: /*?s= (جستجوی داخلی)Allow: /wp-admin/admin-ajax.phpSitemap: https://yoursite.com/sitemap_index.xml
نکتهٔ طلایی: هیچوقت /wp-content/plugins/ یا /wp-includes/ را کامل نبند، چون گوگل برای رندر صفحات باید بتواند فایلهای CSS و JS را ببیند. اگر ببندی، سایتت در Search Console افتضاح رندر میشود.
۲. نقشهٔ سایت XML: نقشهٔ گنجت را تمیز نگه دار
با Yoast SEO یا Rank Math، نقشهٔ سایت خودکار ساخته میشود. اما تو باید آن را بهینه کنی:
مطمئن شو که URL های
noindexشده، در نقشه نیستند. (در Yoast: Settings → Content types: برای برچسبها و دستههای بیارزش، noindex کن).نقشههای تکهتکه (Posts, Pages, Products) فعال باشند.
نقشه را در Search Console ثبت کن و هر ماه یکبار خطاهایش را چک کن.
۳. مدیریت محتوای بیارزش: noindex کن، نه فقط مخفی
برچسبها (Tags) معمولاً فقط محتوای تکراری میسازند. اگر سایتت وبلاگ نیست، یا برچسبها را noindex کن (در Yoast → Taxonomies)، یا کلاً حذفشان کن.
دستهبندیهایی که خالی هستند یا محتوای کمی دارند، noindex شوند.
صفحات نویسنده (Author Archives): اگر فقط یک نویسنده داری (خودت)، این صفحات را noindex کن تا محتوای تکراری با آرشیو وبلاگ ایجاد نشود.
صفحات Pagination: بگذار ایندکس شوند (با Canonical به خودشان)، اما در Search Console مطمئن شو مشکلی پیش نیامده.
۴. بودجهٔ کرال را با لاگها آنالیز کن
من یک عادت قدیمی دارم: هر ماه لاگ سرور را با یک اسکریپت Python آنالیز میکنم. میبینم گوگلبات چقدر وقتش را صرف صفحات /feed/، /trackback/ یا /wp-json/ کرده. این صفحات هیچ ارزشی ندارند. میتوانی در robots.txt آنها را disallow کنی یا اگر با Yoast هستی، در بخش Advanced، RSS Feed ها را غیرفعال کن.
قدم چهارم: Canonical و محتوای تکراری – یک آدرس، یک محتوا
وردپرس ذاتاً محتوای تکراری میسازد: یک مقاله در صفحهٔ اصلی، در آرشیو دسته، در آرشیو تاریخ، و در صفحهٔ خودش. ماموریت تو این است که با Canonical، همه را به یک نسخهٔ اصلی هدایت کنی.
Yoast SEO یا Rank Math بهطور خودکار تگ Canonical را به صفحهٔ اصلی هر پست اضافه میکنند. اما تو باید بررسی کنی که این Canonical به URL درست اشاره کند (به خصوص اگر از www به non-www ریدایرکت کردهای).
صفحات Pagination: همانطور که در مقالهٔ فروشگاهی گفتم، هر صفحه خودش را Canonical کند (نه به صفحهٔ اول). Yoast معمولاً این کار را درست انجام میدهد.
محتوای کپی بین المللی: اگر سایتت چندزبانه است، حتماً با افزونهای مثل WPML یا Polylang تگهای
hreflangرا فعال کن.
قدم پنجم: دادههای ساختاریافته (Schema) – به گوگل بگو دقیقاً چه هستی
گوگل برای نمایش Rich Snippet نیاز به Schema دارد. در وردپرس، با افزونهها میشوی این کار را بدون کدنویسی انجام دهی.
Yoast SEO بهطور خودکار Schema vom
ArticleوBreadcrumbListرا میسازد. همچنین Organization/Person را از تنظیمات General میتوانی تنظیم کنی.Rank Math قویتر است و Schema های متنوعی مثل
FAQ،HowToوProductرا با رابط کاربری ساده ارائه میدهد.برای فروشگاه ووکامرسی، WooCommerce خودش Product Schema میسازد، اما با Rank Math میتوانی آن را دقیقتر تنظیم کنی (قیمت، موجودی).
نکتهٔ من: من همیشه با Google Rich Results Test یک صفحهٔ نمونه را تست میکنم. یکبار سایتی با Yoast، Schema اش بهخاطر یک Conflict با قالب، کامل خراب شده بود و هیچ Rich Snippet نمایش نمیداد. خطا در کنسول جستجو پیدایش کردم و با تغییر یک خط کد در
functions.phpحلش کردم.
قدم ششم: امنیت و مدیریت خطاها – زخمهای ایندکس را پانسمان کن
۱. امنیت پایه
Wordfence Security: فایروال، اسکن بدافزار، و محافظت از Brute Force. رایگانش هم عالی است.
همیشه وردپرس، قالب و افزونهها را بهروز نگه دار. قبل از آپدیت بزرگ، بکآپ بگیر.
از رمزهای عبور قوی و احراز هویت دو مرحلهای استفاده کن. یکبار سایتی هک شد چون رمز ادمین
admin123بود. مهاجم یک بدافزار تزریق کرده بود که به سایتهای شرطبندی ریدایرکت میکرد. گوگل Manual Action زد و سایت از نتایج حذف شد. مجبور شدم کل سایت را با یک آنتیویروس سرور پاکسازی کنم و درخواست بازبینی بفرستم.
۲. مدیریت خطاهای ۴۰۴
با Search Console، صفحات ۴۰۴ را مدام چک کن. اگر URL ای اشتباهی حذف شده، با افزونهٔ Redirection یک ریدایرکت ۳۰۱ به صفحهٔ مرتبط بده. من یک اسکریپت Python دارم که لیست ۴۰۴ های Search Console را API میگیرد و اگر تعدادشان زیاد باشد، هشدار میدهد.
۳. لینکهای شکسته داخلی
افزونهٔ Broken Link Checker (البته با احتیاط، چون منابع مصرف میکند) میتواند لینکهای داخلی و خارجی خراب را پیدا کند. من ترجیح میدهم با Screaming Frog سایت را کرال کنم و لینکهای ۴۰۴ داخلی را دربیاورم.
قدم هفتم: ساختار لینک داخلی و تجربهٔ کاربری – تار عنکبوت را درست بباف
از یک افزونهٔ Related Posts (مثلاً Yet Another Related Posts Plugin – YARPP یا قابلیت داخلی Rank Math) استفاده کن تا زیر هر مقاله، مقالات مرتبط لینک شوند. این کار علاوه بر کاهش نرخ پرش، یک شبکهٔ لینک داخلی قدرتمند میسازد.
Breadcrumb (نانویگیشن): Yoast و Rank Math هر دو بلدند. هم برای کاربر خوب است، هم گوگل مسیر را میفهمد.
صفحات یتیم: با کرال Screaming Frog، صفحاتی که هیچ لینک داخلی ندارند را پیدا کن و از یک جای مرتبط به آنها لینک بده.
قدم هشتم: پایش مداوم – این ماشین را هر هفته سرویس کن
Google Search Console را هر هفته چک کن. بخش «Coverage» را نگاه کن: خطاهای ۵۰۰، ۴۰۴، صفحات Excluded شده (Crawled – currently not indexed) را بررسی کن.
Google Analytics برای مانیتورینگ سرعت و رفتار کاربر.
یک کرال با Screaming Frog (نسخهٔ رایگان تا ۵۰۰ URL) هر ماه بگیر و ببین که آیا تغییر ناگهانی در Status Code ها، تایتلها یا Canonical رخ داده یا نه.
خودم یک فایل لاگ هفتگی از طریق Python میسازم که میزان خطاها، سرعت صفحات و وضعیت ایندکس را در یک داشبورد کوچک خلاصه میکند. با این کار گاهی قبل از اینکه مشتری بفهمد، من مشکل را میبینم.
مطالعهٔ موردی: بازسازی سئوی تکنیکال یک مجلهٔ وردپرسی
وضعیت اولیه:
۱۲٬۰۰۰ مقاله، ۶۰ افزونه، LCP بالای ۱۰ ثانیه.
۲۰ هزار URL پارامتری (تقویم آرشیو، ردگیریها) ایندکس شده.
robots.txt بخش
/wp-content/plugins/را Disallow کرده بود.Core Web Vitals همه قرمز.
اقدامات:
هاست را از اشتراکی به VPS ابری تغییر دادم. PHP را به 8.1 بردم.
۳۰ افزونهٔ غیرضروری و تداخلزا را حذف کردم. WP Rocket جایگزین ۴ افزونهٔ کش و بهینهسازی شد.
با Imagify کل کتابخانهٔ عکسها را WebP و فشرده کردم. LCP به ۲.۴ ثانیه بهبود یافت.
Yoast SEO را تنظیم کردم: برچسبها و آرشیو نویسندهها noindex، نقشهٔ سایت پاک شد.
پارامترهای بیارزش URL را با Canonical به نسخهٔ اصلی برگرداندم. بودجهٔ کرال آزاد شد.
robots.txt را اصلاح کردم: پوشهٔ پلاگینها را Allow، و فیدهای RSS را Disallow کردم.
لینکهای داخلی را با YARPP تقویت کردم.
نتیجه بعد از ۵ ماه:
| معیار | قبل | بعد |
|---|---|---|
| LCP (موبایل) | ۱۰.۴s | ۲.۱s |
| ترافیک ارگانیک | ۴۲,۰۰۰ | ۹۵,۰۰۰ |
| صفحات ایندکسشده | ۸,۰۰۰ | ۱۱,۵۰۰ (بهینهتر) |
| Core Web Vitals | همه قرمز | همه سبز |
نتیجهگیری: وردپرس مثل خمیر بازی است، اگر بلد باشی با آن شاهکار میسازی
وردپرس به تنهایی نه خوب است نه بد. مثل یک خمیر بازی است. اگر افزونههای درست را انتخاب کنی، سرعت را جدی بگیری، و هر هفته چکآپ فنی انجام دهی، میتوانی با آن در گوگل بدرخشی. اما اگر بیخیال تکنیکال باشی، همان سایتی که برایش محتوا مینویسی، خودش بزرگترین دشمن سئویت میشود.
من طاها هستم. در این ۱۵ سال، بارها وردپرس را از یک هیولای کند و گمشده در گوگل، به یک ماشین جذب ترافیک تبدیل کردهام. با دانش PHP و Python، گرههای فنیای را باز میکنم که افزونهها از پسش برنمیآیند. اگر سایت وردپرسیات دچار افت سرعت، مشکل ایندکس یا سقوط رتبه شده، با طاها حرف بزن. بدون وعدهٔ رتبهٔ یک، ولی با یک نقشهٔ فنی دقیق که سایتت را نجات میدهد. یک جلسه مشاوره میتواند مسیر تکنیکال وبسایتت را برای همیشه