> ## Documentation Index
> Fetch the complete documentation index at: https://firecrawl-claude-eager-dijkstra-thpbow.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# クロール

> ウェブサイトを再帰的にクロールし、各ページからコンテンツを取得します

Crawl は URL を Firecrawl に送信し、到達可能なすべてのサブページを再帰的に検出してスクレイピングします。サイトマップ、JavaScript レンダリング、レート制限を自動的に処理し、各ページについてクリーンな Markdown または構造化データを返します。

* サイトマップとリンクの再帰的なたどりによってページを検出
* パスのフィルタリング、深さ制限、サブドメインや外部リンクの制御をサポート
* ポーリング、WebSocket、または Webhook で結果を返す

クロールがスクレイピングする各ページは、スクレイピングと同じパイプラインを通ります。そのため、スクレイピングが 1 ページに対してできることは、クロールが到達するすべてのページに対しても実行できます。[Capabilities](/ja/capabilities) では、その内容、各機能がどこで実行されるか、APIキーが必要かどうかを一覧しています。

<Card title="Playground で試す" icon="play" href="https://www.firecrawl.dev/playground?endpoint=crawl">
  インタラクティブな Playground でクロールをテストできます。コードは不要です。
</Card>

<div id="installation">
  ## インストール
</div>

<CodeGroup>
  ```python Python theme={null}
  # pip install firecrawl-py

  from firecrawl import Firecrawl

  firecrawl = Firecrawl(
    # 開始にAPIキーは不要です — より高いrate limitsが必要な場合は追加してください:
    # api_key="fc-YOUR-API-KEY",
  )
  ```

  ```js Node theme={null}
  // npm install firecrawl

  import { Firecrawl } from 'firecrawl';

  const firecrawl = new Firecrawl({
    // 開始にAPIキーは不要です — より高いrate limitsのために追加してください:
    // apiKey: "fc-YOUR-API-KEY",
  });
  ```

  ```bash CLI theme={null}
  # npmでグローバルにインストール
  npm install -g firecrawl

  # 認証（初回セットアップ）
  firecrawl login
  ```
</CodeGroup>

<div id="basic-usage">
  ## 基本的な使い方
</div>

開始 URL を指定して `POST /v2/crawl` を呼び出し、クロールジョブを送信します。このエンドポイントは、結果をポーリングするために使用するジョブ ID を返します。

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl

  firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")

  docs = firecrawl.crawl(url="https://docs.firecrawl.dev", limit=10)
  print(docs)
  ```

  ```js Node theme={null}
  import { Firecrawl } from 'firecrawl';

  const firecrawl = new Firecrawl({ apiKey: "fc-YOUR-API-KEY" });

  const docs = await firecrawl.crawl('https://docs.firecrawl.dev', { limit: 10 });
  console.log(docs);
  ```

  ```bash cURL theme={null}
  curl -s -X POST "https://api.firecrawl.dev/v2/crawl" \
    -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "url": "https://docs.firecrawl.dev",
      "limit": 10
    }'
  ```

  ```bash CLI theme={null}
  # クロールジョブを開始（ジョブIDを返す）
  firecrawl crawl https://firecrawl.dev

  # 進行状況を表示しながら完了を待機
  firecrawl crawl https://firecrawl.dev --wait --progress --limit 100
  ```
</CodeGroup>

<Info>
  クロールされたページ 1 件ごとに 1 クレジットを消費します。デフォルトのクロール `limit` は 10,000 ページです。開始前に、クロールエンドポイントは残りのクレジットで `limit` をカバーできるか確認し、不足している場合は **402 (Payment Required) ** エラーを返します。これを避けるには、意図したクロール規模に合わせて、`limit: 100` のようにより小さい `limit` を設定してください。特定のオプションには追加クレジットが必要です。JSONモードはページごとに追加で 4 クレジット、PDF 解析は PDF のページごとに 1 クレジットを消費します。
</Info>

<div id="scrape-options">
  ### スクレイピングのオプション
</div>

[/scrape エンドポイント](/ja/api-reference/endpoint/scrape) のすべてのオプションは、`scrapeOptions` (JS) / `scrape_options` (Python) を使ってクロールでも利用できます。これらは、クローラーがスクレイピングするすべてのページに適用されます (フォーマット、プロキシ、キャッシュ、アクション、ロケーション、タグを含む) 。

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl

  firecrawl = Firecrawl(api_key='fc-YOUR_API_KEY')

  # スクレイプオプション付きでクロール
  response = firecrawl.crawl('https://example.com',
      limit=100,
      scrape_options={
          'formats': [
              'markdown',
              { 'type': 'json', 'schema': { 'type': 'object', 'properties': { 'title': { 'type': 'string' } } } }
          ],
          'proxy': 'auto',
          'max_age': 600000,
          'only_main_content': True
      }
  )
  ```

  ```js Node theme={null}
  import { Firecrawl } from 'firecrawl';

  const firecrawl = new Firecrawl({ apiKey: 'fc-YOUR_API_KEY' });

  // スクレイプオプション付きでクロール
  const crawlResponse = await firecrawl.crawl('https://example.com', {
    limit: 100,
    scrapeOptions: {
      formats: [
        'markdown',
        {
          type: 'json',
          schema: { type: 'object', properties: { title: { type: 'string' } } },
        },
      ],
      proxy: 'auto',
      maxAge: 600000,
      onlyMainContent: true,
    },
  });
  ```
</CodeGroup>

<div id="checking-crawl-status">
  ## クロールステータスの確認
</div>

ジョブ ID を使用してクロールのステータスをポーリングし、結果を取得します。

<CodeGroup>
  ```python Python theme={null}
  status = firecrawl.get_crawl_status("<crawl-id>")
  print(status)
  ```

  ```js Node theme={null}
  const status = await firecrawl.getCrawlStatus("<crawl-id>");
  console.log(status);
  ```

  ```bash cURL theme={null}
  # クロール開始後は、jobId でステータスをポーリングする
  curl -s -X GET "https://api.firecrawl.dev/v2/crawl/<jobId>" \
    -H "Authorization: Bearer $FIRECRAWL_API_KEY"
  ```

  ```bash CLI theme={null}
  # ジョブIDを使用してクロールステータスを確認
  firecrawl crawl <job-id>
  ```
</CodeGroup>

<Note>
  ジョブの結果は、完了後24時間は API 経由で取得できます。この期間を過ぎても、[activity logs](https://www.firecrawl.dev/app/logs) からクロール履歴と結果を参照できます。
</Note>

<Note>
  クロール結果の `data` 配列に含まれているページは、対象サイトが 404 のような HTTP エラーを返した場合でも、Firecrawl がスクレイピングに成功したページです。`metadata.statusCode` フィールドには、対象サイトから返された HTTP ステータスコードが含まれます。Firecrawl 自体がスクレイピングに失敗したページ (ネットワークエラー、タイムアウト、robots.txt によるブロックなど) を取得するには、専用の [Get Crawl Errors](/ja/api-reference/endpoint/crawl-get-errors) エンドポイント (`GET /crawl/{id}/errors`) を使用してください。
</Note>

<div id="response-handling">
  ### レスポンスの処理
</div>

レスポンスはクロールのステータスによって異なります。未完了のレスポンス、またはサイズが10MBを超える大きなレスポンスの場合は、`next` URLパラメータが付与されます。次の10MBのデータを取得するには、このURLにリクエストしてください。`next` パラメータがない場合は、クロールデータの終端を示します。

<Info>
  `skip` と `next` のパラメータが関係するのは、API を直接呼び出す場合のみです。
  SDK を使用している場合は、ページネーションは自動的に処理され、すべての
  結果が一度に返されます。
</Info>

<CodeGroup>
  ```json スクレイピング中 theme={null}
  {
    "status": "スクレイピング中",
    "total": 36,
    "completed": 10,
    "creditsUsed": 10,
    "expiresAt": "2024-00-00T00:00:00.000Z",
    "next": "https://api.firecrawl.dev/v2/crawl/123-456-789?skip=10",
    "data": [
      {
        "markdown": "[Firecrawl ドキュメントのホームページ![ライトロゴ](https://mintlify.s3-us-west-1.amazonaws.com/firecrawl/logo/light.svg)!...",
        "html": "<!DOCTYPE html><html lang=\"en\" class=\"js-focus-visible lg:[--scroll-mt:9.5rem]\" data-js-focus-visible=\"\">...",
        "metadata": {
          "title": "Groq Llama 3 で「ウェブサイトとチャット」を構築する | Firecrawl",
          "language": "en",
          "sourceURL": "https://docs.firecrawl.dev/learn/rag-llama3",
          "description": "Firecrawl、Groq Llama 3、LangChain を使って「自分のウェブサイトとチャットする」ボットの作り方を学びます。",
          "ogLocaleAlternate": [],
          "statusCode": 200
        }
      },
      ...
    ]
  }
  ```

  ```json 完了 theme={null}
  {
    "status": "完了",
    "total": 36,
    "completed": 36,
    "creditsUsed": 36,
    "expiresAt": "2024-00-00T00:00:00.000Z",
    "next": "https://api.firecrawl.dev/v2/crawl/123-456-789?skip=26",
    "data": [
      {
        "markdown": "[Firecrawl ドキュメントのホームページ![ライトロゴ](https://mintlify.s3-us-west-1.amazonaws.com/firecrawl/logo/light.svg)!...",
        "html": "<!DOCTYPE html><html lang=\"en\" class=\"js-focus-visible lg:[--scroll-mt:9.5rem]\" data-js-focus-visible=\"\">...",
        "metadata": {
          "title": "Groq Llama 3 で「ウェブサイトとチャットする」を作る | Firecrawl",
          "language": "en",
          "sourceURL": "https://docs.firecrawl.dev/learn/rag-llama3",
          "description": "Firecrawl、Groq Llama 3、LangChain を使って「自分のウェブサイトとチャットする」ボットの作り方を学びます。",
          "ogLocaleAlternate": [],
          "statusCode": 200
        }
      },
      ...
    ]
  }
  ```
</CodeGroup>

<div id="sdk-methods">
  ## SDK メソッド
</div>

SDK で crawl を使う方法は 2 通りあります。

<div id="crawl-and-wait">
  ### クロールして待つ
</div>

`crawl` メソッドはクロールの完了を待機し、完全なレスポンスを返します。ページネーションを自動処理します。ほとんどのユースケースで推奨されます。

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl
  from firecrawl.types import ScrapeOptions

  firecrawl = Firecrawl(api_key="fc-YOUR_API_KEY")

  # ウェブサイトをクロールする:
  crawl_status = firecrawl.crawl(
    'https://firecrawl.dev', 
    limit=100, 
    scrape_options=ScrapeOptions(formats=['markdown', 'html']),
    poll_interval=30
  )
  print(crawl_status)
  ```

  ```js Node theme={null}
  import { Firecrawl } from 'firecrawl';

  const firecrawl = new Firecrawl({apiKey: "fc-YOUR_API_KEY"});

  const crawlResponse = await firecrawl.crawl('https://firecrawl.dev', {
    limit: 100,
    scrapeOptions: {
      formats: ['markdown', 'html'],
    }
  })

  console.log(crawlResponse)
  ```
</CodeGroup>

レスポンスには、クロールのステータスと収集された全データが含まれます:

<CodeGroup>
  ```bash Python theme={null}
  success=True
  status='completed'
  completed=100
  total=100
  creditsUsed=100
  expiresAt=datetime.datetime(2025, 4, 23, 19, 21, 17, tzinfo=TzInfo(UTC))
  next=None
  data=[
    Document(
      markdown='[7日目 - Launch Week III・Integrations Day（4月14日〜20日）](...',
      metadata={
        'title': 'Pythonのウェブスクレイピングプロジェクト15選：初級から上級まで',
        ...
        'scrapeId': '97dcf796-c09b-43c9-b4f7-868a7a5af722',
        'sourceURL': 'https://www.firecrawl.dev/blog/python-web-scraping-projects',
        'url': 'https://www.firecrawl.dev/blog/python-web-scraping-projects',
        'statusCode': 200
      }
    ),
    ...
  ]
  ```

  ```js Node theme={null}
  {
    success: true,
    status: "completed",
    completed: 100,
    total: 100,
    creditsUsed: 100,
    expiresAt: "2025-04-23T19:28:45.000Z",
    data: [
      {
        markdown: "[Day 7 - Launch Week III.Integrations DayApril ...",
        html: `<!DOCTYPE html><html lang="en" class="light" style="color...`,
        metadata: [Object],
      },
      ...
    ]
  }
  ```
</CodeGroup>

<div id="start-and-check-later">
  ### 開始して後で確認
</div>

`startCrawl` / `start_crawl` メソッドは即時にクロール ID を返します。その後、ステータスを手動でポーリングして確認します。これは、長時間のクロールや独自のポーリングロジックに有用です。

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl

  firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")

  job = firecrawl.start_crawl(url="https://docs.firecrawl.dev", limit=10)
  print(job)

  # クロールの進行状況を確認する
  status = firecrawl.get_crawl_status(job.id)
  print(status)
  ```

  ```js Node theme={null}
  import { Firecrawl } from 'firecrawl';

  const firecrawl = new Firecrawl({ apiKey: "fc-YOUR-API-KEY" });

  const { id } = await firecrawl.startCrawl('https://docs.firecrawl.dev', { limit: 10 });
  console.log(id);

  // クロールの進行状況を確認する
  const status = await firecrawl.getCrawlStatus(id);
  console.log(status);

  ```

  ```bash cURL theme={null}
  curl -s -X POST "https://api.firecrawl.dev/v2/crawl" \
    -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "url": "https://docs.firecrawl.dev",
      "limit": 10
    }'
  ```

  ```bash CLI theme={null}
  # クロールを開始(非同期、ジョブIDを即座に返します)
  firecrawl crawl https://firecrawl.dev --limit 100

  # 後でステータスを確認
  firecrawl crawl <job-id>
  ```
</CodeGroup>

最初のレスポンスではジョブ ID が返されます:

```json theme={null}
{
  "success": true,
  "id": "123-456-789",
  "url": "https://api.firecrawl.dev/v2/crawl/123-456-789"
}
```

<div id="real-time-results-with-websocket">
  ## WebSocket によるリアルタイム結果
</div>

watcher メソッドでは、ページのクロール中にリアルタイムで更新を受け取れます。クロールを開始し、その後イベントを購読することで、データを即座に処理できます。

<CodeGroup>
  ```python Python theme={null}
  import asyncio
  from firecrawl import AsyncFirecrawl

  async def main():
      firecrawl = AsyncFirecrawl(api_key="fc-YOUR-API-KEY")

      # 最初にクロールを開始
      started = await firecrawl.start_crawl("https://firecrawl.dev", limit=5)

      # 終了ステータスまで更新（スナップショット）を監視
      async for snapshot in firecrawl.watcher(started.id, kind="crawl", poll_interval=2, timeout=120):
          if snapshot.status == "completed":
              print("完了", snapshot.status)
              for doc in snapshot.data:
                  print("DOC", doc.metadata.source_url if doc.metadata else None)
          elif snapshot.status == "failed":
              print("エラー", snapshot.status)
          else:
              print("ステータス", snapshot.status, snapshot.completed, "/", snapshot.total)

  asyncio.run(main())
  ```

  ```js Node theme={null}
  import { Firecrawl } from 'firecrawl';

  const firecrawl = new Firecrawl({ apiKey: 'fc-YOUR-API-KEY' });

  // クロールを開始して監視する
  const { id } = await firecrawl.startCrawl('https://mendable.ai', {
    excludePaths: ['blog/*'],
    limit: 5,
  });

  const watcher = firecrawl.watcher(id, { kind: 'crawl', pollInterval: 2, timeout: 120 });

  watcher.on('document', (doc) => {
    console.log('DOC', doc);
  });

  watcher.on('error', (err) => {
    console.error('ERR', err?.error || err);
  });

  watcher.on('done', (state) => {
    console.log('DONE', state.status);
  });

  // 監視を開始（WS と HTTP のフォールバック）
  await watcher.start();
  ```
</CodeGroup>

<div id="webhooks">
  ## Webhooks
</div>

クロールの進行に合わせてリアルタイム通知を受け取れるよう、webhook を設定できます。これにより、クロール全体の完了を待たずに、スクレイプされたページを随時処理できます。

```bash cURL theme={null}
curl -X POST https://api.firecrawl.dev/v2/crawl \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer YOUR_API_KEY' \
    -d '{
      "url": "https://docs.firecrawl.dev",
      "limit": 100,
      "webhook": {
        "url": "https://your-domain.com/webhook",
        "metadata": {
          "any_key": "any_value"
        },
        "events": ["started", "page", "completed"]
      }
    }'
```

<div id="event-types">
  ### イベントタイプ
</div>

| Event             | Description            |
| ----------------- | ---------------------- |
| `crawl.started`   | クロールが開始されたときに発火します     |
| `crawl.page`      | スクレイプに成功した各ページごとに発火します |
| `crawl.completed` | クロールが完了したときに発火します      |
| `crawl.failed`    | クロール中にエラーが発生した場合に発火します |

<div id="payload">
  ### ペイロード
</div>

```json theme={null}
{
  "success": true,
  "type": "crawl.page",
  "id": "crawl-job-id",
  "data": [...], // 'page'イベントのページデータ
  "metadata": {}, // Your custom metadata
  "error": null
}
```

<div id="verifying-webhook-signatures">
  ### Webhook シグネチャの検証
</div>

Firecrawl からのすべての webhook リクエストには、HMAC-SHA256 シグネチャを含む `X-Firecrawl-Signature` ヘッダーが含まれます。Webhook が正当で改ざんされていないことを確認するために、必ずこのシグネチャを検証してください。

1. アカウント設定の [Advanced タブ](https://www.firecrawl.dev/app/settings?tab=advanced) から webhook secret を取得する
2. `X-Firecrawl-Signature` ヘッダーからシグネチャを取得する
3. 取得した secret を使い、生のリクエストボディに対して HMAC-SHA256 を計算する
4. タイミング攻撃耐性のある関数を使って、計算結果とヘッダーのシグネチャを比較する

<Warning>
  シグネチャを最初に検証せずに webhook を処理してはいけません。`X-Firecrawl-Signature` ヘッダーには、`sha256=abc123def456...` という形式でシグネチャが含まれています。
</Warning>

JavaScript と Python による完全な実装例については、[Webhook セキュリティのドキュメント](/ja/webhooks/security) を参照してください。詳細なイベントペイロード、ペイロード構造、高度な設定、トラブルシューティングを含む包括的な webhook ドキュメントについては、[Webhooks ドキュメント](/ja/webhooks/overview) を参照してください。

<div id="execution-and-result-accounting">
  ## 実行と結果の集計
</div>

クロールが完了したことは、すべてのページに到達できたことを意味しません。このセクションでは、crawl endpoint が実行について現在報告する内容 — カウンター、ページングの規約、失敗の記録、スコープの上限 — を説明します。これをもとに、その実行結果が次のアクションを判断できるだけの完全性を備えているかを、ご自身で見極められます。ただし、これらの記録はいずれも完全性を保証するものではありません。

<div id="reading-the-status-counters">
  ### ステータスカウンターの読み方
</div>

[Get Crawl Status](/ja/api-reference/endpoint/crawl-get) (`GET /v2/crawl/{id}`) のレスポンスには、その実行状況を表すカウンターが必ず含まれます。

| フィールド                                    | 意味                                                                                                     |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| `status`                                 | `scraping`、`completed`、`failed`、`cancelled` のいずれか                                                      |
| `total`                                  | `completed` に処理中のページ (実行中・キュー待ち・バックログ) を加えた数。**失敗したページは含まれません。**                                       |
| `completed`                              | 正常にクロールできたページ数                                                                                         |
| `creditsUsed`                            | これまでにクロールで消費したクレジット                                                                                    |
| `createdAt` / `completedAt` / `duration` | 開始時刻、終了時刻 (終了状態のみ) 、経過秒数                                                                               |
| `expiresAt`                              | 結果をAPIから取得できなくなる時刻                                                                                     |
| `next`                                   | 次の10MB分の結果ページのURL。`status` が `completed` 以外のときにも出力されます — [結果のページング](#paging-through-results)を参照してください。 |

<Warning>
  完了したクロールで `completed == total` になっていても、発見されたすべてのページが成功したという意味では**ありません**。`total` は完了・実行中・キュー待ち・バックログのページを合計し、失敗したページを除外するため、終了状態のクロールでは `active`、`queued`、`backlog` が必ずゼロになります。そのため、ページが失敗したかどうかに関係なく2つのカウンターは一致します。ステータスカウンターでは失敗の有無を判断できません。失敗したページを列挙できるのは [Get Crawl Errors](#failed-and-blocked-pages) だけです。
</Warning>

`data` 配列には、Firecrawl が正常にスクレイピングできたページのみが含まれます。試行したものの結果が得られなかったページは `data` に含まれないため、後述の Get Crawl Errors から確認してください。

<div id="paging-through-results">
  ### 結果のページング
</div>

レスポンスの上限は10MBです。レスポンスが切り詰められた場合、`next` に次のページの結果を取得するためのURLが入ります。

`next` は単に「まだデータが残っている」ことを示すものではありません。`status` が `completed` 以外のときにも常に返されるため、`failed` や `cancelled` で終了したクロールでも、残りの結果が存在しないのに `next` のURLが返ることがあります。`next` がないことをループの終了条件にしないでください。失敗またはキャンセルされたクロールでは、`next` が消えることはありません。

終了判定に使うのはステータスフィールドです。実行を最後まで読み取るには、次の手順に従います。

1. `status` が `completed`、`failed`、`cancelled` のいずれかになるまで `GET /v2/crawl/{id}` をポーリングします。
2. `next` が存在し、**かつ** 直前のページが空でない `data` 配列を返している間は、`next` をたどって残りの結果を収集します。
3. `next` がなくなったとき、またはページが新しいドキュメントを返さなくなったときに停止します。

公式SDKsはこのページングを自動的に処理し、すべての結果をまとめて返します。

<div id="failed-and-blocked-pages">
  ### 失敗したページとブロックされたページ
</div>

[Get Crawl Errors](/ja/api-reference/endpoint/crawl-get-errors) (`GET /v2/crawl/{id}/errors`) は、`data` に含まれなかったページを記録します。返されるのは2つの配列です:

* `errors` — 失敗した scrape job で、それぞれ `id`、`url`、`error` (error message) 、失敗時刻の `timestamp` を持ちます。これらはネットワークエラーや timeout など、Firecrawl 自体がスクレイピングに失敗したページです。意図的にスキップされた外部サイトのホームページへのリンクも、エラーコード `EXTERNAL_LINK` としてここに報告されます。
* `robotsBlocked` — アクセスを試みたものの、サイトの robots.txt によってブロックされたURLです。

<Note>
  このリストは、すべての失敗を漏れなく列挙することを保証するものではありません。一部の内部的な失敗クラスは、現在レスポンスを構築する前に `errors` から除外されています。あくまで Firecrawl が報告する失敗の記録であり、他に問題が起きていないことの証明ではない点に注意してください。上記のエラーコード (`EXTERNAL_LINK`) は現時点でもエラーオブジェクトとして返されますが、公開されている `GET /crawl/{id}/errors` の schema にはまだ含まれておらず、APIリファレンスの更新待ちです。
</Note>

対象サイトが404などのHTTPエラーを返したページは、クロールエラーでは*ありません*。Firecrawl はスクレイピングに成功しているため、そのページは `data` に含まれ、サイトのステータスコードが `metadata.statusCode` に入ります。

<div id="what-the-crawler-is-scoped-to-reach">
  ### クローラーが到達できる範囲
</div>

到達範囲は設定した scope パラメータによって決まります。詳細は [設定リファレンス](#configuration-reference) と [Crawl エンドポイントリファレンス](/ja/api-reference/endpoint/crawl-post) を参照してください:

* **デフォルトでは子ページのみ。** クロールは、指定した URL の子ではないサブリンクを無視します。兄弟パスや親パスをたどるには `crawlEntireDomain`、サブドメインには `allowSubdomains`、ドメイン外へのリンクをたどるには `allowExternalLinks` を使用します。
* **`includePaths` / `excludePaths` は URL のパス名に対して**正規表現パターンとして照合されます。完全な URL やクエリパラメータは対象外です。クエリ文字列を含む完全な URL に対して照合したい場合は `regexOnFullURL: true` を設定します。開始 URL も `includePaths` と照合されるため、一致しない場合はクロール結果が 0 ページになることがあります。
* **sitemap モード。** デフォルトの `sitemap: "include"` では、URL は sitemap と再帰的なリンク探索の両方から取得されます。`"skip"` は HTML のリンクのみを使用するため、PDF や深い階層のページなど sitemap にしかないページは取得できません。`"only"` は sitemap と開始 URL をクロールし、HTML からのリンク探索は行いません。
* **`maxDiscoveryDepth`** は、ルートからたどるリンク探索のホップ数の上限です。最大深度のページ自体はスクレイピングされますが、そこで見つかったリンクはたどりません。
* **`limit`** はページ数の上限で、デフォルトは `10000` です。
* **`ignoreQueryParameters`** は、クエリパラメータのみが異なる同一パスの再スクレイピングを回避します。
* **robots.txt は尊重されます** (`ignoreRobotsTxt` を有効にした場合を除く。Enterprise のみ) 。

`maxConcurrency` のデフォルトは、プランによって決まるチームの concurrency 上限です — [Rate limits](/ja/rate-limits) を参照してください。

<div id="when-results-vary-between-runs">
  ### 実行ごとに結果が異なる場合
</div>

同じ設定で実行しても、クロール結果は実行ごとに異なる場合があります。ページは並行してスクレイピングされるため、リンクが検出される順序はネットワークのタイミングや、どのページの読み込みが先に完了するかに左右されます。そのため、深さの境界付近ではサイト内の異なる分岐が異なる程度まで探索されることがあり、特に `maxDiscoveryDepth` の値が大きい場合に顕著です。

実行の再現性を高めるには:

* `maxConcurrency` を `1` に設定します。[設定リファレンス](#configuration-reference)に記載のとおり、`maxConcurrency` は「最大同時スクレイピング数」であり、同時に処理中となるリクエスト数の上限を定めます。これによりタイミング依存の処理の入れ替わりは減りますが、実行ごとの差異が完全になくなるわけではありません。サイトマップの検出はこの上限の対象外でキューに入れられ、ネストされたサイトマップは独立したジョブとして取得され、返される `data` 配列は検出順ではなく完了時刻順に並びます。`delay` を設定した場合も同時実行数は 1 に強制されます。
* サイトに包括的なサイトマップがある場合は `sitemap: "only"` を使用し、URL の集合をリンク検出ではなくサイトマップから取得するようにします。

<div id="knowing-when-a-crawl-is-done">
  ### クロールの完了を知る方法
</div>

ポーリングを行わない場合は、[webhook イベント](#event-types)から同じ情報を得られます。`crawl.page` はページのスクレイピングが成功するたびに発火し、`crawl.completed` (または `crawl.failed`) は実行の終了時に発火します。ジョブの結果は完了後 24 時間 API から取得できます。それ以降は[アクティビティログ](https://www.firecrawl.dev/app/logs)で確認してください。

<div id="configuration-reference">
  ## 設定リファレンス
</div>

クロールジョブの送信時に指定できる全パラメータ:

| Parameter               | Type       | Default     | Description                                                                                                                                                                                                         |
| ----------------------- | ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `url`                   | `string`   | (required)  | クロール開始元の URL                                                                                                                                                                                                        |
| `limit`                 | `integer`  | `10000`     | クロールするページの最大数                                                                                                                                                                                                       |
| `maxDiscoveryDepth`     | `integer`  | (none)      | URL 内の `/` セグメント数ではなく、リンクの発見ホップ数に基づくルート URL からの最大深度。ページ上で新しい URL が見つかるたびに、その URL には発見元のページより 1 つ深い深度が割り当てられます。ルートサイトおよびサイトマップに含まれるページの発見深度は 0 です。最大深度のページもスクレイプされますが、そのページ上のリンクはたどりません。                             |
| `includePaths`          | `string[]` | (none)      | 含める URL パスの正規表現パターン。一致するパスのみをクロールします。                                                                                                                                                                               |
| `excludePaths`          | `string[]` | (none)      | クロール対象から除外する URL パスの正規表現パターン                                                                                                                                                                                        |
| `regexOnFullURL`        | `boolean`  | `false`     | `includePaths`/`excludePaths` を、パスのみではなく完全な URL (クエリパラメータを含む) に対して照合します                                                                                                                                             |
| `crawlEntireDomain`     | `boolean`  | `false`     | 子パスだけでなく、同一ドメイン内の兄弟 URL や親 URL への内部リンクもたどります                                                                                                                                                                        |
| `allowSubdomains`       | `boolean`  | `false`     | メインドメインのサブドメインへのリンクもたどります                                                                                                                                                                                           |
| `allowExternalLinks`    | `boolean`  | `false`     | 外部サイトへのリンクもたどります。外部リンクは 1 ホップのみたどられ (そのリンク先のリンクはクロールされません) 、外部サイトのホームページを指すリンクはスキップされます — [外部リンク](#external-links) を参照してください。                                                                                       |
| `sitemap`               | `string`   | `"include"` | サイトマップの扱い: `"include"` (デフォルト) 、`"skip"`、または `"only"`                                                                                                                                                               |
| `ignoreQueryParameters` | `boolean`  | `false`     | クエリパラメータが異なっていても、同じパスの再スクレイピングを避けます                                                                                                                                                                                 |
| `ignoreRobotsTxt`       | `boolean`  | `false`     | Web サイトの robots.txt のルールを無視します。**Enterprise only** — 有効化するには [support@firecrawl.com](mailto:support@firecrawl.com) にお問い合わせください。                                                                                     |
| `robotsUserAgent`       | `string`   | (none)      | robots.txt の評価に使用するカスタム User-Agent 文字列。設定すると、robots.txt はこの User-Agent で取得され、デフォルトではなくこの User-Agent に対してルールが照合されます。**Enterprise only** — 有効化するには [support@firecrawl.com](mailto:support@firecrawl.com) にお問い合わせください。 |
| `delay`                 | `number`   | (none)      | レート制限を順守するためのスクレイプ間の遅延 (秒)。これを設定すると、同時実行数は 1 に固定されます。                                                                                                                                                               |
| `maxConcurrency`        | `integer`  | (none)      | 同時スクレイプの最大数。デフォルトでは、チームの同時実行数上限が使用されます。                                                                                                                                                                             |
| `scrapeOptions`         | `object`   | (none)      | すべてのスクレイプ対象ページに適用されるオプション (フォーマット、プロキシ、キャッシュ、アクションなど)                                                                                                                                                               |
| `webhook`               | `object`   | (none)      | リアルタイム通知用の webhook 設定                                                                                                                                                                                               |
| `prompt`                | `string`   | (none)      | クロールオプションを生成するための自然言語プロンプト。明示的に設定したパラメータは、生成された対応項目より優先されます。                                                                                                                                                        |

<div id="important-details">
  ## 重要な詳細
</div>

<Warning>
  デフォルトでは、crawl は指定した URL の配下にないサブリンクを無視します。たとえば、`website.com/blogs/` をクロールした場合、`website.com/other-parent/blog-1` は返されません。兄弟パスや親パスも含めるには、`crawlEntireDomain` パラメータを使用します。`website.com` のクロール時に `blog.website.com` のようなサブドメインも対象にするには、`allowSubdomains` パラメータを使用します。
</Warning>

* **サイトマップによる検出**: デフォルトでは、クローラーは URL を検出するためにウェブサイトのサイトマップを含めます (`sitemap: "include"`) 。`sitemap: "skip"` を設定すると、ルート URL から HTML リンクを通じて到達できるページのみが検出されます。HTML から直接リンクされていない PDF などのアセットや、サイトマップには記載されていても深い階層にあるページは見逃されます。最大限の網羅性を得るには、デフォルト設定のままにしてください。
* **クレジット使用量**: クロールした各ページにつき 1 クレジットかかります。JSONモードではページごとに 4 クレジットが追加され、PDF の解析には PDF 1 ページごとに 1 クレジットかかります。
* **結果の有効期限**: ジョブの結果は、完了後 24 時間は API 経由で利用できます。その後は、[アクティビティログ](https://www.firecrawl.dev/app/logs)で結果を確認してください。
* **クロールエラー**: `data` 配列には、Firecrawl が正常にスクレイピングしたページが含まれます。ネットワークエラー、タイムアウト、または robots.txt によるブロックで失敗したページを取得するには、[Get Crawl Errors](/ja/api-reference/endpoint/crawl-get-errors) エンドポイントを使用します。
* <a id="external-links" />**外部リンク**: `allowExternalLinks: true` を指定すると、クローラーはドメイン外を指すリンクをたどり、リンク先の各ページを 1 回スクレイピングします。ただし、その外部ページで見つかったリンクをさらにクロールすることはありません。無関係なサイト全体を取り込むことを避けるため、外部サイトの**ホームページ** (パスのないルート URL。例: `https://example.com/`) へのリンクは意図的にスキップされます。これらは [Get Crawl Errors](/ja/api-reference/endpoint/crawl-get-errors) にコード `EXTERNAL_LINK` として表示されます。リダイレクトは宛先までたどられます。これには正規 URL に解決されるリンク (たとえば `http → https` や `www` バリアント) も含まれるため、外部ホームページに到達するリダイレクトのみがスキップされます。
* **非決定的な結果**: 同じ設定で実行しても、クロール結果は実行ごとに異なる場合があります。これは、ページが並行してスクレイピングされ、リンクの検出順序がネットワークのタイミングに左右されるためです。何が変動するのか、また実行の再現性を高める方法については、[実行と結果の集計](#execution-and-result-accounting)を参照してください。

> Firecrawl APIキーが必要な AI エージェントですか？ 自動オンボーディング手順については、[firecrawl.dev/agent-onboarding/SKILL.md](https://www.firecrawl.dev/agent-onboarding/SKILL.md) を参照してください。
