تسک D1 — پاک‌سازی ایندکس

راهنمای گام‌به‌گام اجرا · نسخه‌ی کامل

این سند برای کسی نوشته شده که هیچ پیش‌زمینه‌ای ندارد. هر کاری که باید انجام شود، دقیقاً گفته شده: کجا کلیک کن، چه بنویس، چطور تست کن که درست شده. هر جا علامت ⛔ دیدید یعنی خط قرمز — انجام ندهید، حتی اگر منطقی به نظر می‌رسد.


⚠️ سه اصلاحیه‌ی مهم — قبل از هر کاری بخوانید

سایت ما در واقع دو وردپرس مستقل است:

آدرس پنل مدیریت افزونه‌ی سئو
سایت اصلی avalpardakht.com/ avalpardakht.com/wp-admin/ Rank Math
بلاگ avalpardakht.com/blog/ avalpardakht.com/blog/wp-admin/ Yoast SEO نسخه ۲۶.۵

هر چهار کار این تسک مربوط به بلاگ است (به‌جز کار شماره ۴ که برعکس، حتماً باید در سایت اصلی انجام شود).

آدرس‌های واقعی که باید پاک‌سازی شوند این‌ها هستند:

نوع آدرس نمونه تعداد کلیک در ۹۰ روز نمایش در ۹۰ روز
صفحه‌بندی دسته‌بندی‌ها /blog/category/فریلنسر/page/19/ ۲۳۴ ۱۸ ۱,۳۱۷
صفحه‌بندی نویسنده‌ها /blog/author/dadar/page/482/ ۲۰۵ ۷ ۸۲۹
آرشیو نویسنده (صفحه‌ی اول) /blog/author/dadar/ ۳ ۱ ۱۴
جمع آدرس‌هایی که باید noindex شوند ۴۴۲ ۲۶ ۲,۱۶۰

به زبان ساده: ۴۴۲ آدرس بی‌فایده در گوگل داریم که در سه ماه فقط ۲۶ کلیک آورده‌اند — یعنی هر آدرس به‌طور متوسط یک‌بیستم کلیک. این‌ها بودجه‌ی خزش گوگل را می‌خورند بدون اینکه چیزی برگردانند.

تسک ۱ — noindex کردن صفحات آرشیو بی‌فایده

زمان تخمینی: ۴۵ دقیقه · مهلت: روز ۳ · مسئول: توسعه‌دهنده وردپرس

چرا این کار را می‌کنیم؟

گوگل برای هر سایت یک «سهمیه» دارد: در هر بازدید فقط تعداد محدودی صفحه را می‌خواند. الان ۴۴۲ صفحه‌ی بی‌فایده داریم که سهم این سهمیه را می‌گیرند. با noindex کردنشان، آن سهمیه می‌رود سراغ صفحات فروش و مقالات مهم.

noindex یعنی: «گوگل، این صفحه را در نتایج جستجو نشان نده.» follow یعنی: «ولی لینک‌های داخل این صفحه را دنبال کن.» ترکیب noindex, follow یعنی صفحه از نتایج حذف می‌شود ولی مقالاتی که به آن‌ها لینک داده هنوز کشف می‌شوند. همیشه هر دو را با هم بنویسید.

پیش‌نیاز

  • دسترسی مدیر (Administrator) به https://avalpardakht.com/blog/wp-admin/
  • قبل از شروع از سایت بکاپ بگیرید. اگر هاست پنل بکاپ خودکار دارد، یک بکاپ دستی بزنید و تاریخش را یادداشت کنید.

روش الف — از داخل تنظیمات افزونه (این را اول امتحان کنید)

گام ۱ — ورود

مرورگر را باز کنید و بروید به:

https://avalpardakht.com/blog/wp-admin/

⛔ دقت کنید /blog/ وسطش باشد. اگر بروید به avalpardakht.com/wp-admin/ وارد پنل سایت اصلی می‌شوید که افزونه‌اش فرق دارد و تنظیماتی که می‌گویم آنجا نیست.

گام ۲ — رفتن به تنظیمات Yoast

از منوی سمت راست (یا چپ، بسته به زبان پنل) روی Yoast SEO کلیک کنید، بعد روی Settings (تنظیمات).

گام ۳ — خاموش کردن آرشیو نویسنده‌ها

  1. در ستون کناری صفحه‌ی تنظیمات، روی Advanced کلیک کنید.
  2. زیرمنوی Author archives را باز کنید.
  3. کلید «Enable author archives» را روی Off / خاموش بگذارید.
  4. پایین صفحه Save changes را بزنید.

این یک کلید، سه کار همزمان انجام می‌دهد: ۲۰۸ آدرس نویسنده را از نتایج گوگل خارج می‌کند، آن‌ها را از نقشه‌ی سایت حذف می‌کند، و لینک‌های نویسنده را از صفحات مقالات برمی‌دارد.

چرا آرشیو نویسنده را کامل خاموش می‌کنیم ولی دسته‌بندی را نه؟ چون کل ۲۰۸ آدرس نویسنده در سه ماه فقط ۸ کلیک آورده‌اند و محتوایشان دقیقاً تکرار همان مقالات است. ولی صفحه‌ی اول دسته‌بندی‌ها (۳۲ آدرس، ۹ کلیک، ۱,۰۰۴ نمایش) هنوز کمی ارزش دارد و برای ساختار سایت هم لازم است.

گام ۴ — noindex کردن صفحه‌بندی دسته‌بندی‌ها

در همان بخش Advanced، دنبال گزینه‌ای بگردید با یکی از این نام‌ها:

  • Crawl optimization
  • یا Archives → گزینه‌ای درباره‌ی paginated pages / subpages

اگر گزینه‌ای برای «noindex کردن صفحات صفحه‌بندی‌شده» پیدا کردید، روشنش کنید و ذخیره کنید. اگر پیدا نکردید، اصلاً معطل نشوید — بروید سراغ روش ب. نسخه‌های مختلف Yoast این گزینه را جای متفاوتی گذاشته‌اند و بعضی نسخه‌ها اصلاً ندارند.


روش ب — با کد (اگر گزینه‌ی گام ۴ را پیدا نکردید)

این روش صددرصد کار می‌کند و به نسخه‌ی افزونه وابسته نیست.

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

اگر کد را در functions.php قالب بگذارید، اولین باری که قالب آپدیت شود کد پاک می‌شود و مشکل بی‌سروصدا برمی‌گردد. پس کد را در یک پوشه‌ی مخصوص می‌گذاریم که وردپرس هیچ‌وقت پاکش نمی‌کند.

گام ۱ — ساختن پوشه

با FTP یا File Manager هاست بروید به این مسیر:

/blog/wp-content/

اگر پوشه‌ای به اسم mu-plugins آنجا هست، واردش شوید. اگر نیست، بسازید (دقیقاً با همین املا، همه حروف کوچک، با خط تیره).

mu-plugins مخفف must-use plugins است. هر فایل PHP که داخلش بگذارید خودکار فعال می‌شود — نیازی به فعال‌سازی از پنل نیست و کسی نمی‌تواند اشتباهی غیرفعالش کند.

گام ۲ — ساختن فایل

داخل mu-plugins یک فایل جدید بسازید به اسم:

aval-noindex-archives.php

و این محتوا را دقیقاً داخلش کپی کنید:

<?php
/**
 * Plugin Name: اول پرداخت — noindex آرشیوهای بی‌فایده
 * Description: صفحات صفحه‌بندی و آرشیو نویسنده را از نتایج گوگل خارج می‌کند.
 * Version: 1.0
 */

// جلوگیری از اجرای مستقیم فایل
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

add_filter( 'wpseo_robots_array', function ( $robots ) {

	// صفحه‌ی ۲ به بعدِ هر آرشیو (دسته‌بندی، نویسنده، تاریخ، جستجو)
	if ( is_paged() ) {
		$robots['index'] = 'noindex';
	}

	// آرشیو نویسنده — حتی صفحه‌ی اول
	if ( is_author() ) {
		$robots['index'] = 'noindex';
	}

	// آرشیو بر اساس تاریخ — این هم ارزشی ندارد
	if ( is_date() ) {
		$robots['index'] = 'noindex';
	}

	// اطمینان از اینکه follow همیشه روشن می‌ماند
	$robots['follow'] = 'follow';

	return $robots;
} );

گام ۳ — ذخیره و بررسی

فایل را ذخیره کنید. بلافاصله سایت را در مرورگر باز کنید و مطمئن شوید صفحه‌ی سفید یا ارور نمی‌دهد. اگر ارور داد، فایل را پاک کنید و به مدیر سئو خبر بدهید — احتمالاً یک کاراکتر در کپی جا افتاده.

نکته‌ی مهم درباره‌ی is_paged(): این تابع فقط برای صفحه‌ی ۲ به بعدِ آرشیوها true می‌شود. صفحه‌ی /blog/ یک «برگه»ی وردپرس است نه آرشیو، پس is_paged() رویش اثر ندارد و دست‌نخورده باقی می‌ماند. این دقیقاً همان چیزی است که می‌خواهیم.


گام ۴ — حذف آرشیوها از نقشه‌ی سایت

الان نقشه‌ی سایت بلاگ دارد به گوگل می‌گوید «این آرشیوها را ایندکس کن» — یعنی سیگنال متضاد با کاری که کردیم.

آدرس‌ها را در مرورگر باز کنید و ببینید:

https://avalpardakht.com/blog/author-sitemap.xml      ← ۳ آدرس
https://avalpardakht.com/blog/category-sitemap.xml    ← ۴۲ آدرس

اگر روش الف گام ۳ را انجام داده باشید، author-sitemap.xml باید خودبه‌خود ۴۰۴ شود. اگر هنوز کار می‌کند، در تنظیمات Yoast بخش Advanced → Author archives را دوباره چک کنید.

category-sitemap.xml باید بماند — فقط صفحه‌بندی‌هایش noindex شده که اصلاً در نقشه‌ی سایت نبودند.


✅ چطور بفهمیم کار ۱ درست انجام شده؟

این چهار دستور را در ترمینال (در مک: Terminal، در ویندوز: PowerShell) یکی‌یکی اجرا کنید:

تست ۱ — صفحه‌بندی دسته‌بندی باید noindex باشد:

curl -s "https://avalpardakht.com/blog/category/%D9%81%D8%B1%DB%8C%D9%84%D9%86%D8%B3%D8%B1/page/19/" | grep -i '<meta name="robots"'

نتیجه‌ی درست: خطی شبیه این:

<meta name="robots" content="noindex, follow" />

نتیجه‌ی غلط: هیچی برنگردد، یا کلمه‌ی index بدون no جلویش باشد.

تست ۲ — آرشیو نویسنده باید noindex یا ۴۰۴ باشد:

curl -s -o /dev/null -w "%{http_code}\n" "https://avalpardakht.com/blog/author/dadar/"

نتیجه‌ی درست: 404 یا 410 (یعنی کامل خاموش شده) — یا اگر 200 برگرداند، تست بالا را رویش تکرار کنید و باید noindex ببینید.

تست ۳ — ⛔ حیاتی‌ترین تست: /blog/ نباید noindex شده باشد:

curl -s "https://avalpardakht.com/blog/" | grep -i '<meta name="robots"'

نتیجه‌ی درست: هیچی برنگرداند، یا اگر برگرداند حتماً کلمه‌ی noindex داخلش نباشد. اگر اینجا noindex دیدید فوراً کد را بردارید و به مدیر سئو خبر بدهید. این یعنی چیزی اشتباه شده و داریم ۱,۵۱۱ کلیک را از دست می‌دهیم.

تست ۴ — صفحه‌ی اول دسته‌بندی باید سالم بماند:

curl -s "https://avalpardakht.com/blog/category/%D9%81%D8%B1%DB%8C%D9%84%D9%86%D8%B3%D8%B1/" | grep -i '<meta name="robots"'

نتیجه‌ی درست: یا هیچی، یا index, follow. نباید noindex باشد.



🔧 کار ۲ — برگرداندن کد ۴۱۰ به‌جای ۴۰۴ برای مقالات حذف‌شده

زمان تخمینی: ۱ ساعت · مهلت: روز ۳ · مسئول: توسعه‌دهنده وردپرس

چرا این کار را می‌کنیم؟ (تفاوت ۴۰۴ و ۴۱۰)

وقتی گوگل به آدرسی می‌رسد که وجود ندارد، سرور یکی از این دو جواب را می‌دهد:

کد معنی برای گوگل رفتار گوگل
۴۰۴ «الان پیدا نکردم» تا چند ماه دوباره سر می‌زند، شاید برگشته باشد
۴۱۰ «عمداً حذف شده، برنمی‌گردد» معمولاً در چند روز برای همیشه حذفش می‌کند

به زبان ساده: ۴۰۴ یعنی «نیست»، ۴۱۰ یعنی «نیست و دیگر هم نخواهد بود، وقتت را تلف نکن». چون ما داریم عمداً مقالات بی‌ارزش را حذف می‌کنیم، ۴۱۰ حرف درست‌تری است و نتیجه را چند ماه جلو می‌اندازد.

⛔ ترتیب کارها را رعایت کنید

این خیلی مهم است:

  1. اول مقاله باید واقعاً از وردپرس حذف شود (Trash + Empty Trash)
  2. بعد وردپرس خودکار برایش ۴۰۴ برمی‌گرداند
  3. کد ما آن ۴۰۴ را به ۴۱۰ تبدیل می‌کند

اگر مقاله هنوز در وردپرس باشد، آدرسش کد ۲۰۰ می‌دهد و کد ما اصلاً اجرا نمی‌شود. پس کد به‌تنهایی هیچ کاری نمی‌کند — حذف واقعی لازم است.

پیش‌نیاز — فهرست آدرس‌ها

مدیر سئو یک فایل به شما می‌دهد به اسم urls-to-delete.txt که در هر خطش یک آدرس است، به این شکل:

/blog/بهترین-مترجم-آنلاین/
/blog/some-english-slug/

تا این فایل را نگرفته‌اید شروع نکنید. حدس نزنید کدام مقاله بی‌ارزش است — این تصمیم با داده‌ی سرچ کنسول گرفته می‌شود، نه با نگاه کردن به عنوان مقاله.


گام ۱ — حذف مقالات از وردپرس

  1. وارد https://avalpardakht.com/blog/wp-admin/ شوید
  2. Posts → All Posts
  3. برای هر آدرس در فایل، مقاله‌اش را پیدا کنید (از کادر جستجوی بالای فهرست استفاده کنید)
  4. تیک کنارش را بزنید
  5. وقتی چند تا را تیک زدید، از منوی Bulk actions بالای جدول گزینه‌ی Move to Trash را انتخاب و Apply بزنید
  6. وقتی همه رفتند سطل، روی تب Trash کلیک کنید و Empty Trash را بزنید

چرا Empty Trash لازم است؟ تا وقتی مقاله در سطل زباله است، وردپرس ممکن است بعضی جاها هنوز به آن اشاره کند. حذف کامل کار را تمیز می‌کند.

قبل از حذف، این را یادداشت کنید: تعداد دقیق مقالاتی که حذف کردید. مدیر سئو این عدد را برای گزارش لازم دارد.

گام ۲ — ساختن فایل کد ۴۱۰

در همان پوشه‌ی mu-plugins که در کار ۱ ساختید، فایل جدیدی بسازید به اسم:

aval-410-gone.php
<?php
/**
 * Plugin Name: اول پرداخت — کد ۴۱۰ برای مقالات حذف‌شده
 * Description: آدرس‌های حذف‌شده به‌جای ۴۰۴ کد ۴۱۰ برمی‌گردانند.
 * Version: 1.0
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * فهرست آدرس‌های حذف‌شده.
 * هر آدرس باید با / شروع و با / تمام شود.
 * آدرس‌های فارسی را همان‌طور که هستند بنویسید — کد خودش رمزگشایی می‌کند.
 */
function aval_gone_urls() {
	return [
		'/blog/نمونه-آدرس-فارسی/',
		'/blog/sample-english-slug/',
		// ← آدرس‌های فایل urls-to-delete.txt را اینجا اضافه کنید
		// هر خط داخل ' ' و آخرش یک ,
	];
}

add_action( 'template_redirect', function () {

	// فقط وقتی وردپرس گفته «پیدا نشد» وارد عمل شو
	if ( ! is_404() ) {
		return;
	}

	// آدرس درخواست‌شده را تمیز کن: رمزگشایی + یک / در ابتدا و انتها
	$path = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
	$path = '/' . trim( rawurldecode( $path ), '/' ) . '/';

	if ( ! in_array( $path, aval_gone_urls(), true ) ) {
		return; // در فهرست نیست → همان ۴۰۴ عادی بماند
	}

	status_header( 410 );
	nocache_headers();

	header( 'Content-Type: text/html; charset=UTF-8' );
	echo '<!doctype html><html lang="fa" dir="rtl"><head><meta charset="utf-8">'
	   . '<meta name="robots" content="noindex, nofollow">'
	   . '<title>این مطلب حذف شده است | اول پرداخت</title></head><body>'
	   . '<h1>این مطلب برای همیشه حذف شده است</h1>'
	   . '<p>این مقاله دیگر در دسترس نیست.</p>'
	   . '<p><a href="https://avalpardakht.com/blog/">بازگشت به وبلاگ اول پرداخت</a></p>'
	   . '</body></html>';
	exit;

}, 1 );

گام ۳ — پر کردن فهرست

فایل urls-to-delete.txt را باز کنید. هر خطش را به این شکل داخل کد بگذارید:

فایل مدیر سئو:

/blog/بهترین-مترجم-آنلاین/
/blog/how-to-find-server/

داخل کد باید بشود:

	return [
		'/blog/بهترین-مترجم-آنلاین/',
		'/blog/how-to-find-server/',
	];

سه نکته که بیشترین اشتباه از آن‌ها می‌آید:

  1. هر آدرس داخل تک‌کوتیشن '...' باشد
  2. آخر هر خط یک ویرگول انگلیسی , بگذارید — حتی آخرین خط
  3. دو خط '/blog/نمونه-آدرس-فارسی/', و '/blog/sample-english-slug/', که در کد نمونه بود را پاک کنید

✅ چطور بفهمیم کار ۲ درست انجام شده؟

یکی از آدرس‌های حذف‌شده را بردارید و این را اجرا کنید:

curl -s -o /dev/null -w "%{http_code}\n" "https://avalpardakht.com/blog/آدرس-حذف-شده/"

نتیجه‌ی درست: 410 اگر 404 داد: آدرس داخل کد با آدرس واقعی مو‌به‌مو یکی نیست — احتمالاً یک / اول یا آخرش کم است. اگر 200 داد: مقاله هنوز واقعاً حذف نشده. برگردید به گام ۱.

و این تست را هم بزنید تا مطمئن شوید بقیه‌ی سایت سالم است:

curl -s -o /dev/null -w "%{http_code}\n" "https://avalpardakht.com/blog/"

نتیجه‌ی درست: 200



🔧 کار ۳ — درخواست ایندکس مجدد در سرچ کنسول

زمان تخمینی: ۱۵ دقیقه · مهلت: روز ۳ (بعد از تمام شدن کارهای ۱ و ۲) · مسئول: مدیر سئو یا توسعه‌دهنده

چرا این کار را می‌کنیم؟

تغییراتی که در کار ۱ و ۲ دادیم، تا وقتی گوگل دوباره سایت را نخوانده هیچ اثری ندارد. گوگل ممکن است چند هفته طول بدهد. با این کار به گوگل می‌گوییم «همین حالا بیا نگاه کن».

این کار را حتماً بعد از کارهای ۱ و ۲ انجام دهید، نه قبلش. اگر گوگل بیاید و هنوز چیزی عوض نشده باشد، فقط یک نوبت را سوزانده‌ایم.

گام ۱ — ورود

https://search.google.com/search-console

با همان حساب گوگلی وارد شوید که دسترسی سایت را دارد. بالا سمت چپ، از فهرست کشویی، پراپرتی https://avalpardakht.com/ را انتخاب کنید.

گام ۲ — بازرسی آدرس

  1. بالای صفحه یک نوار جستجوی پهن هست با متن «Inspect any URL in ...». رویش کلیک کنید.
  2. این آدرس را کامل بنویسید و Enter بزنید:
https://avalpardakht.com/blog/
  1. چند ثانیه صبر کنید تا نتیجه بیاید.

گام ۳ — خواندن نتیجه

اگر نوشته «URL is on Google» (با تیک سبز): روی دکمه‌ی REQUEST INDEXING کلیک کنید. یک پنجره باز می‌شود و تست می‌کند؛ حدود یک دقیقه طول می‌کشد. آخرش پیام موفقیت می‌دهد.

اگر نوشته «URL is not on Google» (با علامت قرمز):کلیک نکنید. یعنی صفحه از ایندکس خارج شده. زیر پیام، دلیلش نوشته شده. اسکرین‌شات بگیرید و همان لحظه به مدیر سئو بفرستید. احتمالاً در کار ۱ چیزی اشتباه شده و باید اول آن را برگردانیم.

گام ۴ — ثبت نقشه‌ی سایت بلاگ

این یک مشکل جداگانه است که موقع بررسی پیدا کردم: نقشه‌ی سایت بلاگ اصلاً به سرچ کنسول معرفی نشده.

  1. در منوی سمت راست روی Sitemaps کلیک کنید
  2. در کادر «Add a new sitemap» این را بنویسید:
blog/sitemap_index.xml
  1. SUBMIT را بزنید

این چه فایده‌ای دارد؟ نقشه‌ی سایت مثل فهرست مطالب یک کتاب است. الان گوگل مقالات بلاگ را فقط از طریق لینک‌های داخلی پیدا می‌کند که کند و ناقص است. با ثبت نقشه، مستقیم می‌گوییم «همه‌ی صفحاتم این‌ها هستند».

گام ۵ — درخواست ایندکس برای صفحات مهم دیگر

گام ۲ و ۳ را برای این آدرس‌ها هم تکرار کنید:

https://avalpardakht.com/
https://avalpardakht.com/cash-exchange-income/

بیشتر از حدود ۱۰ آدرس در روز درخواست ندهید. گوگل سهمیه‌ی روزانه دارد و اگر رد شود باید تا فردا صبر کنید.

✅ چطور بفهمیم کار ۳ درست انجام شده؟

  • برای هر آدرس، پیام «Indexing requested» یا «URL added to a priority crawl queue» دیده شده باشد
  • در بخش Sitemaps، ردیف blog/sitemap_index.xml با وضعیت Success ظاهر شود (ممکن است چند ساعت طول بکشد؛ اگر بعد از ۲۴ ساعت هنوز «Couldn't fetch» بود اطلاع بدهید)
  • از هر مرحله اسکرین‌شات بگیرید و در کانال تیم بگذارید


🔧 کار ۴ — اضافه کردن Disallow: /?s= به robots.txt

زمان تخمینی: ۲۰ دقیقه · مهلت: روز ۳ · مسئول: توسعه‌دهنده وردپرس

چرا این کار را می‌کنیم؟

هر بار کسی در سایت چیزی جستجو می‌کند، یک آدرس یکتا ساخته می‌شود مثل avalpardakht.com/?s=پی‌پال. این آدرس‌ها بی‌نهایت‌اند و هیچ ارزشی ندارند. robots.txt فایلی است که به ربات‌ها می‌گوید کجا نروند.

⛔ دو نکته‌ی حیاتی

نکته ۱ — فایل /blog/robots.txt بی‌اثر است. بلاگ فایل robots.txt خودش را دارد، ولی گوگل فقط robots.txt ریشه‌ی دامنه را می‌خواند، یعنی avalpardakht.com/robots.txt. هر چیزی در avalpardakht.com/blog/robots.txt بنویسید، گوگل اصلاً نمی‌بیند. 👈 پس این تنها کاری از این تسک است که باید در پنل سایت اصلی انجام شود، نه بلاگ.

نکته ۲ — Disallow با noindex فرق دارد. Disallow یعنی «نخوان». noindex یعنی «نشان نده». اگر صفحه‌ای الان در گوگل هست و شما Disallow کنید، گوگل دیگر نمی‌تواند برچسب noindex را ببیند و صفحه برای همیشه در نتایج گیر می‌کند. در مورد ما این خطر وجود ندارد: بررسی کردم، آدرس‌های /?s= در ۹۰ روز گذشته صفر بار در نتایج ظاهر شده‌اند و ضمناً از قبل برچسب noindex دارند. پس اضافه کردن Disallow کاملاً بی‌خطر است.


گام ۱ — دیدن وضعیت فعلی

در مرورگر باز کنید:

https://avalpardakht.com/robots.txt

الان دقیقاً این را می‌بینید:

User-agent: *
Allow: /

Sitemap: https://avalpardakht.com/sitemap_index.xml
Sitemap: https://avalpardakht.com/post-sitemap.xml
Sitemap: https://avalpardakht.com/page-sitemap.xml
Sitemap: https://avalpardakht.com/local-sitemap.xml

یک اسکرین‌شات از این صفحه بگیرید و نگه دارید. اگر چیزی خراب شد، باید بتوانید به همین برگردید.

گام ۲ — پیدا کردن جای ویرایش

  1. وارد https://avalpardakht.com/wp-admin/ شوید (این‌بار بدون /blog/)
  2. از منو: Rank Math → General Settings
  3. تب Edit robots.txt را باز کنید

حالا دو حالت ممکن است ببینید:

حالت الف — کادر متن قابل ویرایش است → برو گام ۳ حالت ب — پیامی می‌بینید مثل «robots.txt file is present in the root folder» یعنی یک فایل فیزیکی روی سرور هست و Rank Math اجازه‌ی ویرایش ندارد → برو گام ۳ـب

گام ۳ (حالت الف) — ویرایش از پنل

محتوای کادر را کامل پاک کنید و دقیقاً این را جایگزین کنید:

User-agent: *
Allow: /

Disallow: /?s=
Disallow: /*?s=
Disallow: /search/
Disallow: /*?replytocom=

Sitemap: https://avalpardakht.com/sitemap_index.xml
Sitemap: https://avalpardakht.com/post-sitemap.xml
Sitemap: https://avalpardakht.com/page-sitemap.xml
Sitemap: https://avalpardakht.com/local-sitemap.xml
Sitemap: https://avalpardakht.com/blog/sitemap_index.xml

Save Changes را بزنید.

گام ۳ـب (حالت ب) — ویرایش فایل فیزیکی

با FTP یا File Manager هاست، در ریشه‌ی سایت (همان‌جا که wp-config.php هست) فایل robots.txt را پیدا کنید، یک کپی پشتیبان از آن بگیرید، بعد بازش کنید و همان محتوای بالا را جایگزین کنید و ذخیره کنید.

هر خط چه معنی می‌دهد؟

خط معنی
Allow: / همه‌ی سایت آزاد است — مگر خط‌های زیر
Disallow: /?s= جستجوهای سایت اصلی
Disallow: /*?s= جستجو در هر مسیری، از جمله /blog/?s=
Disallow: /search/ حالت دیگر آدرس جستجو
Disallow: /*?replytocom= لینک «پاسخ به کامنت» — هزاران آدرس تکراری می‌سازد
Sitemap: .../blog/... معرفی نقشه‌ی سایت بلاگ که قبلاً نبود

⛔ چهار خطی که هرگز نباید اضافه کنید

Disallow: /blog/          ← کل بلاگ را از گوگل حذف می‌کند
Disallow: /wp-content/    ← تصاویر و CSS را می‌بندد، ظاهر سایت برای گوگل خراب می‌شود
Disallow: /               ← کل سایت را از گوگل حذف می‌کند
User-agent: Googlebot     ← بدون هماهنگی با مدیر سئو هیچ قانون جداگانه‌ای برای گوگل ننویسید
Disallow: /

✅ چطور بفهمیم کار ۴ درست انجام شده؟

تست ۱ — فایل درست شده:

curl -s "https://avalpardakht.com/robots.txt"

باید دقیقاً همان چیزی باشد که نوشتید.

تست ۲ — ⛔ مهم‌ترین تست، بلاگ باز مانده:

curl -s "https://avalpardakht.com/robots.txt" | grep -i "blog"

نتیجه‌ی درست: فقط یک خط، آن هم خط Sitemap:. اگر خطی با Disallow و کلمه‌ی blog دیدید، فوراً برگردید به نسخه‌ی قبلی.

تست ۳ — تست رسمی گوگل: در سرچ کنسول → منوی Settings → بخش robots.txt → ببینید گوگل آخرین نسخه را خوانده و خطایی گزارش نکرده.



📋 چک‌لیست نهایی — قبل از اینکه بگویید «تمام شد»

هر خط را که تست کردید تیک بزنید. بدون تست تیک نزنید.

# تست نتیجه‌ی درست
۱ از سایت بکاپ گرفتم و تاریخش را یادداشت کردم
۲ /blog/ هنوز کد ۲۰۰ می‌دهد 200
۳ /blog/ برچسب noindex ندارد خالی یا index
۴ صفحه‌بندی دسته‌بندی noindex شده noindex, follow
۵ صفحه‌ی اول دسته‌بندی سالم مانده index
۶ آرشیو نویسنده خاموش یا noindex شده ۴۰۴ یا noindex
۷ مقالات فهرست‌شده حذف شده‌اند و ۴۱۰ می‌دهند 410
۸ تعداد مقالات حذف‌شده را یادداشت کردم یک عدد
۹ درخواست ایندکس /blog/ ثبت شد اسکرین‌شات
۱۰ نقشه‌ی سایت بلاگ در سرچ کنسول ثبت شد اسکرین‌شات
۱۱ robots.txt شامل Disallow: /?s= است متن فایل
۱۲ robots.txt هیچ Disallow روی /blog/ ندارد فقط خط Sitemap
۱۳ صفحه‌ی اصلی سایت avalpardakht.com سالم باز می‌شود چشمی

🆘 اگر چیزی خراب شد

نشانه‌ی خطر: سایت سفید شد، ارور PHP آمد، یا /blog/ باز نمی‌شود.

کار فوری:

  1. فایل‌هایی که در mu-plugins ساخته‌اید را پاک کنید (نه ویرایش — پاک). سایت باید بلافاصله برگردد.
  2. اگر robots.txt را عوض کرده بودید، از روی اسکرین‌شات گام ۱ برش گردانید.
  3. همان لحظه در کانال تیم اطلاع بدهید — نه فردا صبح.

نشانه‌ی خطر بزرگ‌تر: در سرچ کنسول برای /blog/ نوشته «URL is not on Google». این یعنی صفحه‌ی اصلی بلاگ از ایندکس خارج شده و روزانه حدود ۱۷ کلیک از دست می‌دهیم. فوراً کد را بردارید و به مدیر سئو خبر بدهید.


⏱ زمان‌بندی پیشنهادی — همه در روز ۳

ساعت کار
۰۹:۰۰ بکاپ گرفتن
۰۹:۱۵ کار ۱ — noindex آرشیوها (روش الف، بعد ب اگر لازم شد)
۱۰:۰۰ تست‌های کار ۱ — مخصوصاً تست ۳
۱۰:۳۰ کار ۴ — robots.txt (مستقل است، ربطی به بقیه ندارد)
۱۱:۰۰ کار ۲ — حذف مقالات + کد ۴۱۰
۱۲:۰۰ تست‌های کار ۲
۱۳:۰۰ کار ۳ — سرچ کنسول (حتماً آخر از همه)
۱۳:۳۰ پر کردن چک‌لیست + فرستادن اسکرین‌شات‌ها در کانال تیم