---
title: "فایل robots.txt چیست و چگونه آن را بخوانیم؟"
description: "robots.txt فایلی است که سایت در آن به ربات‌ها می‌گوید کدام مسیرها را نخزند. قواعد Disallow، Allow و Crawl-delay و خواندن آن با پایتون را توضیح می‌دهیم."
url: https://proxynet.io/fa/blog/robots-txt
date: 2026-09-13
author: "Acar Diveroli"
category: "وب اسکرپینگ"
lang: fa
---

# فایل robots.txt چیست و چگونه آن را بخوانیم؟

اگر به انتهای آدرس هر سایتی `/robots.txt` بیفزایید و باز کنید، معمولاً فایل متنی ساده‌ای با چند سطر می‌بینید. سایت در این فایل به موتورهای جست‌وجو، خزنده‌ها و اسکرپرها می‌گوید «این مسیرها را نخزید». برای کارشناس سئو، تنظیمی است که بر نمایش سایت در موتورهای جست‌وجو اثر دارد؛ برای توسعه‌دهنده‌ای که داده جمع می‌کند، نخستین سندی است که باید پیش از آغاز خواند.

در این نوشته توضیح می‌دهیم robots.txt چیست، کجا قرار دارد و قواعد آن چگونه خوانده می‌شوند؛ همراه `User-agent`، `Disallow`، `Allow`، نویسه‌های جانشین و قاعده طولانی‌ترین تطبیق. سپس سطرهای `Crawl-delay` و `Sitemap`، الزام‌آور بودن یا نبودن قانونی فایل، شیوه خواندن robots.txt با پایتون توسط اسکرپر (و زمانی که تحلیلگر کتابخانه استاندارد پاسخ نادرست می‌دهد)، اشتباهات رایج سئو و سطرهای نوشته‌شده برای ربات‌های هوش مصنوعی را بررسی می‌کنیم.

> **نکته: پاسخ کوتاه**
>
> robots.txt فایل متنی ساده‌ای در شاخه ریشه سایت است که به ربات‌ها می‌گوید کدام مسیرها را نباید بخزند. سطر `User-agent` می‌گوید قاعده برای کدام ربات است، `Disallow` مسیرهایی را که نباید خزیده شوند و `Allow` استثناهای آن ممنوعیت را فهرست می‌کند. وقتی چند قاعده با یک آدرس تطبیق دارند، طولانی‌ترین (دقیق‌ترین) قاعده برنده است. فایل یک درخواست است، نه کنترل دسترسی، اما هر خزنده مشروعی از آن پیروی می‌کند. قالب آن در ⁦RFC 9309⁩ استاندارد شده است.

## robots.txt چیست؟

robots.txt فایل پروتکل Robots Exclusion Protocol است که از 1994 به کار می‌رود و سال‌ها بدون استاندارد نوشته‌شده گسترش یافت. این پروتکل در 2022 با [⁦RFC 9309⁩](https://www.rfc-editor.org/rfc/rfc9309) استاندارد رسمی شد. استاندارد قالب فایل، شیوه تطبیق قواعد و کار لازم هنگام در دسترس نبودن فایل را تعریف می‌کند.

کار فایل ساده است: صاحب سایت اعلام می‌کند بازدیدکنندگان خودکار باید از کدام مسیرها دور بمانند. دلیل‌های رایج:

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

robots.txt سازوکار امنیتی **نیست**. فایل عمومی است و بستن یک مسیر با `Disallow` وجود آن مسیر را هم اعلام می‌کند. صفحه‌هایی که باید خصوصی بمانند با رمز، کنترل دسترسی یا روش‌هایی مانند `noindex` محافظت می‌شوند.

## robots.txt کجا قرار دارد؟

فایل همیشه در **شاخه ریشه** سایت است و نامش با حروف کوچک `robots.txt` است:

- `https://example.com/robots.txt` معتبر است.
- `https://example.com/folder/robots.txt` را هیچ رباتی نمی‌خواند.

قواعد برای هر پروتکل، میزبان و پورت جداگانه اعمال می‌شوند. فایل `https://example.com/robots.txt` فقط برای `https://example.com` معتبر است؛ زیردامنه `https://shop.example.com` فایل خودش را لازم دارد. نسخه‌های `http://` و `https://` هم از نظر فنی فایل‌های جداگانه‌اند.

⁦RFC 9309⁩ تعریف می‌کند وقتی فایل در دسترس نیست چه اتفاقی می‌افتد:

- **پاسخ `4xx` (فایل وجود ندارد):** خزنده می‌تواند فرض کند سایت محدودیتی ندارد.
- **پاسخ `5xx` یا خطای شبکه (فایل در دسترس نیست):** خزنده باید فرض کند کل سایت بسته است.

استاندارد همچنین می‌گوید خزنده‌ها می‌توانند فایل را در کش نگه دارند اما معمولاً نباید نسخه کش‌شده را بیش از 24 ساعت به کار ببرند. پس تغییری که در فایل می‌دهید ممکن است تا یک روز طول بکشد تا به ربات‌ها برسد.

## قواعد چگونه خوانده می‌شوند؟

در زیر فایل نمونه‌ای واقعی برای یک فروشگاه اینترنتی آمده است:

```text
User-agent: *
Disallow: /cart
Disallow: /account/
Disallow: /search
Allow: /search/popular
Disallow: /*?sort=
Disallow: /*.pdf$
Crawl-delay: 5

User-agent: ExamplePriceBot
Disallow: /account/
Allow: /

User-agent: GPTBot
Disallow: /

Sitemap: https://example.com/sitemap.xml
```

| سطر | معنا |
|---|---|
| `User-agent: *` | قواعد این گروه برای هر رباتی که گروه ویژه ندارد اعمال می‌شود |
| `Disallow: /cart` | هر مسیری که با `/cart` **آغاز شود**: `/cart`، `/cart/add` و حتی `/cartoon` |
| `Disallow: /account/` | پوشه `/account/` و هر چه زیر آن است؛ `/account` بدون اسلش پایانی تطبیق ندارد |
| `Disallow: /search` | `/search`، `/search?q=phone`، `/search/popular` |
| `Allow: /search/popular` | استثنایی بر ممنوعیت قبلی؛ چون طولانی‌تر است، این مسیر قابل خزش است |
| `Disallow: /*?sort=` | `*` هر دنباله‌ای از نویسه‌هاست: هر آدرسی که پارامتر `?sort=` دارد |
| `Disallow: /*.pdf$` | `$` پایان آدرس را نشان می‌دهد: آدرس‌هایی که با `.pdf` **پایان می‌یابند**؛ `/catalog.pdf?v=2` تطبیق ندارد |
| `Crawl-delay: 5` | درخواست صبر 5 ثانیه میان درخواست‌ها (غیراستاندارد، پایین توضیح داده شده) |
| `User-agent: ExamplePriceBot` | گروهی فقط برای این ربات؛ این ربات گروه `*` بالا را **اصلاً** نمی‌خواند |
| `Allow: /` | برای این ربات همه‌چیز جز صفحه‌های حساب باز است |
| `User-agent: GPTBot` همراه `Disallow: /` | GPTBot نباید هیچ بخشی از سایت را بخزد |
| `Sitemap:` | آدرس نقشه سایت؛ مستقل از گروه‌ها |

### گروه‌های User-agent

فایل از گروه‌ها تشکیل شده است. هر گروه با یک یا چند سطر `User-agent` آغاز می‌شود و قواعدی که پس از آن می‌آیند به همان گروه تعلق دارند. وقتی رباتی فایل را می‌خواند:

1. به دنبال گروهی می‌گردد که با نام خودش تطبیق داشته باشد. تطبیق با **نشانه محصول** ربات (مثلاً `GPTBot`) و بدون حساسیت به حروف بزرگ و کوچک انجام می‌شود، نه با رشته کامل User-Agent مرورگر.
2. اگر گروه ویژه خود را بیابد، **فقط قواعد همان گروه** را اعمال می‌کند. قواعد گروه `*` برای آن ربات افزوده نمی‌شوند.
3. اگر گروه ویژه نباشد، گروه `*` را اعمال می‌کند.
4. اگر هیچ گروهی نباشد، فرض می‌کند سایت محدودیتی ندارد.

بند 2 اغلب نادیده گرفته می‌شود. در نمونه بالا، چون `ExamplePriceBot` گروه ویژه دارد، نه ممنوعیت‌های `/cart` و `/search` و نه درخواست `Crawl-delay` بر این ربات اثر دارند.

### Disallow، Allow و قاعده طولانی‌ترین تطبیق

قواعد به‌صورت پیشوند مسیر تطبیق می‌یابند: `Disallow: /cart` هر مسیری را که با `/cart` آغاز شود دربرمی‌گیرد. وقتی چند قاعده با یک آدرس تطبیق داشته باشند، بر اساس ⁦RFC 9309⁩ **طولانی‌ترین قاعده منطبق** برنده است. آدرس `/search/popular` هم با `Disallow: /search` (7 نویسه) و هم با `Allow: /search/popular` (15 نویسه) تطبیق دارد؛ `Allow` طولانی‌تر برنده است و صفحه قابل خزش است.

اگر دو قاعده هم‌طول باشند و یکی `Allow` و دیگری `Disallow`، استاندارد پیشنهاد می‌کند `Allow` ترجیح داده شود. **ترتیب قواعد در فایل نتیجه را تغییر نمی‌دهد.** همان‌طور که پایین‌تر خواهیم دید، برخی تحلیلگرها این نکته را درست اجرا نمی‌کنند.

### نویسه‌های جانشین

- `*` با صفر یا چند نویسه تطبیق دارد: `Disallow: /*?session=` هر آدرسی را که پارامتر نشست دارد می‌بندد.
- `$` پایان آدرس را نشان می‌دهد: `Disallow: /*.pdf$` فقط آدرس‌هایی را که با `.pdf` پایان می‌یابند می‌بندد.

اگر مقدار سطر `Disallow:` خالی بماند (`Disallow:`)، هیچ مسیری بسته نمی‌شود. `Disallow: /` کل سایت را می‌بندد. تفاوت یک نویسه‌ای میان این دو سطر می‌تواند یکی از پرهزینه‌ترین اشتباهات سئو را بسازد.

## سطرهای Crawl-delay و Sitemap

**`Crawl-delay`** درخواستی است که به ربات می‌گوید میان درخواست‌های پیاپی به یک سایت چند ثانیه صبر کند. بخشی از ⁦RFC 9309⁩ نیست، اما بسیاری از خزنده‌ها و اسکرپرها آن را می‌خوانند. **گوگل از سطر `Crawl-delay` پشتیبانی نمی‌کند**؛ سرعت خزش گوگل را سامانه‌های خودش تعیین می‌کنند. برخی موتورهای جست‌وجوی دیگر این سطر را در نظر می‌گیرند.

برای اسکرپر، مقدار `Crawl-delay` ترجیح سرعتی است که صاحب سایت صراحتاً اعلام کرده و با وجود غیراستاندارد بودن، نشانه‌ای ارزشمند برای پیروی است. راه‌های دیگر احترام به محدودیت نرخ در [وب اسکرپینگ بدون مسدود شدن](/fa/blog/web-scraping-without-getting-blocked) آمده است.

سطر **`Sitemap`** آدرس کامل فایل نقشه سایت را می‌دهد. مستقل از گروه‌هاست، در هر جای فایل می‌تواند بیاید و بیش از یک بار نوشته شود. هم برای موتورهای جست‌وجو و هم برای اسکرپرها، راه رسیدن مستقیم به فهرست صفحه‌ها به‌جای خزیدن پیوندبه‌پیوند کل سایت است. اگر سطر Sitemap وجود ندارد، اینکه کجای دیگر را بگردید و فایل‌های index و `.gz` را چگونه باز کنید در نوشته [پیدا کردن نقشه سایت](/fa/blog/find-website-sitemap) آمده است.

## آیا robots.txt از نظر قانونی الزام‌آور است؟

از نظر فنی robots.txt درخواست است، نه مانع دسترسی. بسته بودن یک مسیر در فایل از دسترسی به آن به‌طور فیزیکی جلوگیری نمی‌کند. پس پاسخ به «آیا باید از robots.txt پیروی کنم» بیشتر قانونی و اخلاقی است تا فنی.

آنچه در عمل باید بدانید:

- **هر خزنده مشروعی از آن پیروی می‌کند.** موتورهای جست‌وجو، سرویس‌های بایگانی و خزنده‌های سازمانی robots.txt را می‌خوانند و اعمال می‌کنند.
- **همراه شرایط سایت ارزیابی می‌شود.** شرایط استفاده بسیاری از سایت‌ها دسترسی خودکار را با ارجاع به robots.txt تنظیم می‌کند. برای نمونه، شرایط خدمات گوگل دسترسی خودکاری را که دستورهای ماشین‌خوان مانند robots.txt را نقض کند در شمار نمونه‌های سوءاستفاده می‌آورد.
- **در اختلاف‌ها می‌تواند نشانه تعیین‌کننده‌ای باشد.** اسکرپری که مسیرهای صراحتاً بسته‌شده سایت را بخزد، کسی دیده می‌شود که آگاهانه ترجیح سایت را نادیده گرفته است.
- **پیروی از robots.txt همه‌چیز را قانونی نمی‌کند.** جمع‌آوری داده شخصی از مسیری باز، شما را از تعهدهای قانون‌هایی مانند GDPR معاف نمی‌کند.

چارچوب قانونی جمع‌آوری داده را در [آیا وب اسکرپینگ قانونی است؟](/fa/blog/is-data-web-scraping-legal) بررسی کرده‌ایم. این نوشته مشاوره حقوقی نیست؛ برای وضعیت خودتان پیشنهاد می‌کنیم با وکیل مشورت کنید.

## اسکرپر چگونه باید robots.txt را بخواند؟

کتابخانه استاندارد پایتون ماژول `urllib.robotparser` را دارد و [مستندات رسمی](https://docs.python.org/3/library/urllib.robotparser.html) آن کاربرد پایه را شرح می‌دهد. اما وقتی ماژول را با فایل نمونه بالا آزمودیم، در چهار جا از ⁦RFC 9309⁩ فاصله گرفت:

| حالت | ⁦RFC 9309⁩ | `urllib.robotparser` |
|---|---|---|
| نخست `Disallow: /search` و سپس `Allow: /search/popular` | `/search/popular` قابل خزش است (طولانی‌ترین قاعده) | قابل خزش نیست؛ نخستین قاعده منطبق را اعمال می‌کند |
| همان دو قاعده با ترتیب وارونه | قابل خزش است | قابل خزش است |
| `Disallow: /*?sort=` | `/category?sort=price` بسته است | باز است؛ `*` پشتیبانی نمی‌شود |
| `Disallow: /*.pdf$` | `/catalog.pdf` بسته است | باز است؛ `$` پشتیبانی نمی‌شود |

دو تفاوت رفتاری هم هست:

- **وقتی رشته کامل User-Agent به‌عنوان نام ربات داده شود** (`Mozilla/5.0 (compatible; GPTBot/1.2; ...)`)، ماژول گروه ویژه ربات را نیافت و گروه `*` را اعمال کرد. باید فقط نشانه محصول (`GPTBot`) را به تابع بدهید.
- **وقتی فایل با `401` یا `403` پاسخ دهد**، ماژول کل سایت را بسته می‌داند. ⁦RFC 9309⁩ پاسخ‌های `4xx` را «فایل وجود ندارد» می‌داند. چون تابع `read()` ماژول فایل را با User-Agent پیش‌فرض پایتون و بدون timeout دانلود می‌کند، در سایتی که این مقدار را مسدود می‌کند ممکن است به اشتباه نتیجه «همه‌چیز بسته» بگیرید.

به همین دلیل امن‌تر است فایل را با کلاینت خودتان دانلود کنید، به `parse()` بدهید و برای فایل‌هایی که نویسه جانشین دارند تحلیلگر کامل‌تری به کار ببرید:

```python
from urllib.parse import urlsplit
from urllib.robotparser import RobotFileParser

import requests

BOT_NAME = "ExamplePriceBot"
USER_AGENT = f"{BOT_NAME}/1.0 (+https://example.com/about-our-bot)"

def robots_for(site, session):
    """Downloads robots.txt and applies the 4xx and 5xx behaviour from RFC 9309."""
    parser = RobotFileParser()
    try:
        response = session.get(f"{site}/robots.txt", timeout=10)
    except requests.RequestException:
        parser.parse(["User-agent: *", "Disallow: /"])  # unreachable: everything closed
        return parser
    if response.status_code >= 500:
        parser.parse(["User-agent: *", "Disallow: /"])
    elif response.status_code >= 400:
        parser.parse([])  # no file: no restrictions
    else:
        parser.parse(response.text.splitlines())
    return parser

session = requests.Session()
session.headers["User-Agent"] = USER_AGENT

url = "https://example.com/product/123"
site = "{0.scheme}://{0.netloc}".format(urlsplit(url))
robots = robots_for(site, session)

if robots.can_fetch(BOT_NAME, url):
    delay = robots.crawl_delay(BOT_NAME) or 2
    print(f"Crawlable, will wait {delay} s between requests")
else:
    print("robots.txt closes this address, skipping")

print("Sitemaps:", robots.site_maps())
```

دو نکته در نمونه مهم است: به `can_fetch` فقط نام ربات داده می‌شود نه رشته کامل User-Agent؛ و فایل برای هر سایت یک بار دانلود و در حافظه نگه داشته می‌شود، نه برای هر صفحه دوباره.

اگر نویسه‌های جانشین و قاعده طولانی‌ترین تطبیق برای شما مهم است، کتابخانه `protego` که Scrapy به کار می‌برد این قواعد را نزدیک‌تر به RFC اجرا می‌کند. هر تحلیلگری به کار ببرید، نتیجه‌ها را با بررسی دستی چند آدرس در برابر فایل سایت مقصد تأیید کنید. اینکه چرا خزنده‌ای که پیوندها را دنبال می‌کند بیشتر از اسکرپری با فهرست ثابت به این قاعده‌ها برمی‌خورد، در نوشته [وب اسکرپینگ و خزش وب](/fa/blog/web-scraping-vs-web-crawling) توضیح داده شده است.

## اشتباهات رایج سئو

چون robots.txt مستقیم بر دیده شدن در جست‌وجو اثر دارد، در سمت سئو هم زیاد نادرست پیکربندی می‌شود:

- **فراموش کردن سطر `Disallow: /` هنگام انتشار.** سطری که سایت را در محیط آزمایشی می‌بست به سایت زنده منتقل می‌شود و سایت از نتایج جست‌وجو ناپدید می‌شود.
- **تلاش برای حذف صفحه از فهرست با robots.txt.** `Disallow` جلوی **خزیده شدن** صفحه را می‌گیرد، نه **فهرست شدن** آن را. صفحه بسته‌ای که از سایت‌های دیگر پیوند می‌گیرد ممکن است بدون خوانده شدن محتوایش فقط با آدرسش در نتایج دیده شود. برای حذف از فهرست، صفحه باید قابل خزش باشد و `noindex` داشته باشد.
- **بستن فایل‌های CSS و جاوااسکریپت.** موتور جست‌وجو نمی‌تواند صفحه را درست نمایش دهد و ارزیابی سازگاری با موبایل و محتوا آسیب می‌بیند.
- **درهم کردن اسلش‌های پایانی.** `Disallow: /blog` هم پوشه `/blog/` و هم صفحه‌ای مانند `/blogger-guide` را می‌بندد.
- **نادیده گرفتن حروف بزرگ و کوچک.** تطبیق مسیر به حروف حساس است: `Disallow: /Search` مسیر `/search` را نمی‌بندد.
- **نگذاشتن فایل در زیردامنه.** `shop.example.com` فایل robots.txt خودش را لازم دارد.
- **انتظار اعمال فوری تغییرها.** ربات‌ها فایل را از کش می‌خوانند؛ تغییر ممکن است تا یک روز طول بکشد تا اثر کند.

[مستندات Google Search Central](https://developers.google.com/search/docs/crawling-indexing/robots/robots_txt) شیوه تفسیر robots.txt توسط گوگل، از جمله سقف اندازه فایل و رفتار در برابر کدهای خطا را مفصل توضیح می‌دهد. برای بررسی نتایج جست‌وجو در کشورهای مختلف، صفحه [راه‌حل پروکسی سئو](/fa/seo-proxy) را ببینید.

## سطرهای ویژه ربات‌های هوش مصنوعی

در سال‌های اخیر بیشترین سطرهایی که به فایل‌های robots.txt افزوده شده، خزنده‌های شرکت‌های هوش مصنوعی را هدف گرفته‌اند. برخی از این ربات‌ها برای آموزش مدل داده جمع می‌کنند و برخی در پاسخ به پرسش کاربر صفحه را همان لحظه می‌گیرند. نشانه‌های محصول رایج:

- `GPTBot` (OpenAI)
- `ClaudeBot` (Anthropic)
- `CCBot` (Common Crawl)
- `Google-Extended`: خزنده جداگانه نیست، بلکه نشانه‌ای است که تعیین می‌کند محتوای جمع‌شده توسط ربات‌های موجود گوگل در مدل‌های Gemini به کار رود یا نه؛ بر دیده شدن در جست‌وجوی گوگل اثری ندارد.

برای نمونه، سایتی که می‌خواهد خزش برای آموزش را ببندد و برای موتورهای جست‌وجو باز بماند می‌تواند این سطرها را بیفزاید:

```text
User-agent: GPTBot
Disallow: /

User-agent: CCBot
Disallow: /

User-agent: Google-Extended
Disallow: /
```

شرکت‌ها گاه‌به‌گاه نام ربات تازه‌ای می‌افزایند یا نقش ربات‌های موجود را جدا می‌کنند. هنگام نوشتن این سطرها یا تنظیم اسکرپر بر پایه آن‌ها، مستندات به‌روز شرکت مربوط را بررسی کنید. برای نمونه‌ای از تدابیری که سایت‌ها در لایه‌های دیگر در برابر ربات‌هایی که از robots.txt پیروی نمی‌کنند می‌گیرند، [Cloudflare Precursor](/fa/blog/cloudflare-precursor) را ببینید. برای نمونه‌ای از اینکه مدل‌های هوش مصنوعی داده وب را چگونه به کار می‌برند، [وب اسکرپینگ با ⁦GPT-6 Astra⁩](/fa/blog/gpt-6-astra-web-scraping) را ببینید.

اگر عامل هوش مصنوعی یا اسکرپر خودتان را می‌سازید، به آن نشانه محصول مشخصی بدهید و robots.txt را با همان نام بخوانید. آنگاه صاحب سایت می‌تواند گروهی فقط برای شما بنویسد و ترجیح‌های خزش خود را مستقیم به شما برساند.

## کاربردها

- **خزنده در مقیاس بزرگ:** robots.txt را برای هر دامنه یک بار دانلود می‌کند، در کش نگه می‌دارد و هر آدرس را پیش از افزودن به صف بررسی می‌کند. بخش مقیاس‌پذیری در صفحه [راه‌حل وب کراولر](/fa/web-crawler) آمده است.
- **اسکریپت پایش قیمت:** آدرس‌های محصول را از نقشه سایت برمی‌دارد، هرگز به صفحه‌های جست‌وجو و فیلتر بسته‌شده با robots.txt نمی‌رود و به `Crawl-delay` احترام می‌گذارد. ساختار کلی در صفحه [راه‌حل استخراج داده](/fa/data-scraping) آمده است.
- **ممیزی سئو:** پیش از انتشار بررسی می‌کند robots.txt صفحه‌های مهم را نبسته باشد و سطر نقشه سایت درست باشد.
- **تعیین سیاست برای ربات‌های هوش مصنوعی:** صاحب محتوا تصمیم می‌گیرد کدام ربات‌ها با چه هدفی می‌توانند سایت را بخزند و سطرهای مربوط را می‌افزاید.

برخی سایت‌ها پیوندهای پنهانی هم می‌گذارند تا ربات‌ها را به مسیرهای بسته robots.txt بکشانند؛ خزنده‌ای که از robots.txt پیروی کند به‌طور طبیعی از این تله‌ها دور می‌ماند. سازوکار آن را در [تله‌های هانی‌پات](/fa/blog/honeypot-traps) توضیح داده‌ایم.

## اشتباهات رایج (سمت اسکرپر)

- **هرگز نخواندن robots.txt.** آغاز خزش بدون دانستن ترجیحی که سایت صراحتاً اعلام کرده است.
- **اعتماد چشم‌بسته به `urllib.robotparser`.** در ترتیب قواعد و نویسه‌های جانشین ممکن است نتیجه نادرست بدهد.
- **دادن رشته کامل User-Agent به `can_fetch`.** گروه ویژه ربات پیدا نمی‌شود.
- **فرض ادغام گروه ویژه ربات با گروه `*`.** اگر گروه ویژه باشد، فقط همان اعمال می‌شود.
- **دانلود دوباره فایل در هر درخواست.** بی‌دلیل به سایت بار می‌افزاید؛ برای هر سایت یک بار دانلود و در کش نگه دارید.
- **ادامه خزش با پاسخ `5xx`.** استاندارد می‌گوید وقتی فایل در دسترس نیست، کل سایت باید بسته دانسته شود.
- **نادیده گرفتن `Crawl-delay` چون استاندارد نیست.** درخواست سرعت آشکار صاحب سایت است.

## راهنمای انتخاب

| وضعیت شما | پیشنهاد |
|---|---|
| آدرس با `Disallow` بسته شده | نخزید |
| آدرس باز است و `Crawl-delay` وجود دارد | میان درخواست‌ها دست‌کم همان مدت صبر کنید |
| robots.txt پاسخ `404` می‌دهد | بدون محدودیت بدانید، اما شرایط سایت را هم بررسی کنید |
| robots.txt پاسخ `5xx` می‌دهد یا در دسترس نیست | سایت را بسته بدانید و بعداً دوباره تلاش کنید |
| فایل نویسه‌های جانشین `*` یا `$` دارد | تحلیلگر سازگار با RFC به کار ببرید |
| گروهی برای ربات شما وجود دارد | فقط همان گروه را اعمال کنید |
| سطر نقشه سایت وجود دارد | آدرس‌ها را از نقشه سایت بردارید |
| می‌خواهید صفحه‌ای را از جست‌وجو حذف کنید | نه robots.txt، بلکه `noindex` |

## پرسش‌های متداول

### آیا خزیدن سایتی که robots.txt ندارد مجاز است؟

اگر robots.txt وجود نداشته باشد، سایت بدون محدودیت خزش دانسته می‌شود. این به معنای بی‌اثر بودن شرایط استفاده سایت، محدودیت‌های نرخ و قانون‌های داده شخصی نیست.

### تفاوت Disallow و noindex چیست؟

`Disallow` جلوی خزیدن صفحه توسط ربات، یعنی دانلود محتوای آن، را می‌گیرد. `noindex` درخواست می‌کند صفحه در نتایج جست‌وجو نمایش داده نشود و لازم دارد ربات بتواند صفحه را بخواند. اگر صفحه‌ای را هم با `Disallow` ببندید و هم `noindex` بگذارید، ربات هرگز برچسب `noindex` را نمی‌بیند.

### آیا گوگل سطر Crawl-delay را می‌خواند؟

نه. گوگل از این سطر پشتیبانی نمی‌کند و سرعت خزش را با سامانه‌های خودش تعیین می‌کند. اما برخی موتورهای جست‌وجوی دیگر و بسیاری از خزنده‌ها آن را در نظر می‌گیرند.

### فایل robots.txt چه اندازه‌ای می‌تواند داشته باشد؟

⁦RFC 9309⁩ از خزنده‌ها می‌خواهد دست‌کم فایلی به اندازه 500 کیبی‌بایت را پردازش کنند؛ قواعد پس از این سقف ممکن است نادیده گرفته شوند. در عمل فایل‌های robots.txt بسیار کوچک‌ترند و کوتاه نگه‌داشتن آن‌ها خطر اشتباه را کم می‌کند.

### آیا می‌توانم ربات‌های هوش مصنوعی را با robots.txt مسدود کنم؟

برای ربات‌هایی که از robots.txt پیروی می‌کنند بله: گروهی با نشانه محصول مربوط باز کنید و `Disallow: /` بنویسید. برای ربات‌هایی که پیروی نمی‌کنند، به تدابیر افزوده در سمت سرور یا CDN نیاز دارید.

### اسکرپر من چه نام User-agent به کار ببرد؟

مقداری با نشانه محصول کوتاهی که ربات شما را معرفی کند و آدرس تماس: `ExamplePriceBot/1.0 (+https://example.com/about-our-bot)`. هنگام بررسی robots.txt فقط بخش `ExamplePriceBot` را به کار ببرید.

## خلاصه

robots.txt فایلی در شاخه ریشه سایت است که به ربات‌ها می‌گوید کدام مسیرها را نخزند. قواعد در گروه‌های `User-agent` دسته‌بندی می‌شوند؛ اگر رباتی گروه ویژه داشته باشد فقط همان اعمال می‌شود، هنگام تعارض طولانی‌ترین تطبیق برنده است و `*` و `$` نویسه‌های جانشین‌اند. `Crawl-delay` استاندارد نیست و گوگل از آن پشتیبانی نمی‌کند، اما برای اسکرپرها درخواست سرعت آشکاری است. ماژول `urllib.robotparser` پایتون در ترتیب قواعد و نویسه‌های جانشین از RFC فاصله دارد؛ فایل را با کلاینت خودتان دانلود کنید و نتیجه‌ها را تأیید کنید. برای کارهای جمع‌آوری داده در چارچوب قواعد، نگاهی به [خدمات پروکسی ما](/fa/proxy) بیندازید.
