# Technical SEO Audit & Indexability Checker (`getascraper/seo-release-indexability-guard`) Actor

Use as a website SEO checker for public and staging URLs. Run a technical SEO audit for indexability, noindex, robots.txt, canonical tags, redirects, meta tags, sitemaps, internal links, and structured data. Get prioritized fixes and change tracking. No login or API token required. Pay per event.

- **URL**: https://apify.com/getascraper/seo-release-indexability-guard.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** SEO tools, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.13 / 1,000 audit records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 🔎 Technical SEO Audit & Indexability Checker

<table width="100%" style="display:table;width:100%;border-collapse:collapse;table-layout:fixed">
<tr>
<td style="padding:24px 28px;background:#EEF6FF;border:1px solid #B7D6F7;border-top:4px solid #1769AA;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#16202A;line-height:1.3">Check your website SEO before launch.</span><br>
<span style="font-size:15px;color:#3D4B59;line-height:1.6">Find noindex, robots.txt, canonical, metadata, sitemap, and structured-data issues across public release and staging URLs.</span>
</td>
</tr>
</table>

<table width="100%" style="display:table;width:100%;border-collapse:collapse;table-layout:fixed">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B7D6F7;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#124E82">📄 Page evidence</span><br>
<span style="font-size:12px;color:#3D4B59">Keep URL-level findings beside every page reviewed.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#F7FBFF;border:1px solid #B7D6F7;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#124E82">⚠️ Prioritized issues</span><br>
<span style="font-size:12px;color:#3D4B59">Focus your review on the most important fixes.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B7D6F7;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#124E82">🧭 Bounded scope</span><br>
<span style="font-size:12px;color:#3D4B59">Set page and link limits for each audit.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#F7FBFF;border:1px solid #B7D6F7;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#124E82">🔁 Repeat checks</span><br>
<span style="font-size:12px;color:#3D4B59">Return only changes when you check the same scope again.</span>
</td>
</tr>
</table>

Run a technical SEO audit or website SEO check before a launch, migration, or release. Give the Actor public production, staging, or preview URLs and get page evidence, an indexability checker report, prioritized issues, and changes-only results. No login or API token is required.

### 🔍 What this website SEO checker checks

Choose checks for page status, redirects, noindex signals, robots.txt access, canonical tags, titles, meta descriptions, H1 counts, and structured data. The Actor can find pages through sitemaps, internal links, or both.

Each run returns page findings, issue findings, and a final summary. On later runs, you can return only entries that changed.

### 🚀 How to use it

<table width="100%" style="display:table;width:100%;border-collapse:collapse;table-layout:fixed">
<tr>
<td style="padding:16px 14px;width:33%;background:#EEF6FF;border:1px solid #B7D6F7;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1769AA;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#16202A">Add release URLs</span><br>
<span style="font-size:12px;color:#3D4B59">Enter one or more public URLs to audit.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#F7FBFF;border:1px solid #B7D6F7;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1769AA;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#16202A">Set the release rule</span><br>
<span style="font-size:12px;color:#3D4B59">Choose checks, scope limits, and a failure severity.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EEF6FF;border:1px solid #B7D6F7;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1769AA;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#16202A">Review priorities</span><br>
<span style="font-size:12px;color:#3D4B59">Sort issues by severity and work from the included fix hints.</span>
</td>
</tr>
</table>

### 🧾 Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `startUrls` | array of URLs | Yes | Public production, staging, or preview URLs to audit. Add from one to 100 URLs. |
| `sitemapUrls` | array of strings | No | Optional sitemap URLs. When empty, the Actor looks for a standard sitemap at each release URL. |
| `discoveryMode` | enum | No | Chooses sitemaps, internal links, or both as page-discovery sources. Defaults to both. |
| `priorityUrls` | array of strings | No | High-value URLs to check first, such as launch pages or canonical landing pages. |
| `maxPages` | integer | No | Caps checked pages across release URLs, sitemaps, and discovered internal links. Choose from one to 100. |
| `maxDepth` | integer | No | Sets how many internal-link levels to follow from a release or priority URL. A depth of zero checks only seed pages. |
| `includeChecks` | array of options | No | Selects indexability, robots, canonical, metadata, and structured-data evidence rules. All checks are selected by default. |
| `failOnSeverity` | enum | No | Sets the severity threshold for new or worsened issues. Omit it to use the critical-only default. |
| `mode` | enum | No | Returns all page evidence and issues, or only records that changed from saved state. Defaults to the full report. |
| `stateKey` | string | No | Names the saved evidence state for repeat checks of the same release scope. Defaults to `default`. |

### 📊 Data table

| Field | Type | Description |
| --- | --- | --- |
| `recordType` | enum | Identifies a page, issue, or run-summary record. |
| `runId` | string | Run identifier when available. |
| `siteId` | string | Site identifier for the checked URL. |
| `checkedAt` | date-time | When the record was checked. |
| `pageUrl` | URL | URL submitted or discovered for inspection. |
| `finalUrl` | URL | Final URL reached after redirects. |
| `canonicalUrl` | URL or null | Canonical URL found on the page, when present. |
| `statusCode` | integer | HTTP status returned for the checked URL. |
| `redirectChain` | array of URLs | URLs followed before the final response. |
| `robotsAllowed` | boolean or null | Whether the evaluated robots.txt rules allow the URL. |
| `robotsReason` | string or null | Rule-based explanation for the robots decision, when available. |
| `metaRobots` | array of strings | Directives found in robots meta tags. |
| `xRobotsTag` | array of strings | Directives found in the X-Robots-Tag header. |
| `canonicalStatus` | enum | Whether the canonical is self-referencing, different, missing, or invalid. |
| `sitemapIncluded` | boolean | Whether the URL was found through a sitemap. |
| `internalInlinks` | integer | Count of discovered internal links to the page. |
| `clickDepth` | integer | Internal-link depth used to reach the page. |
| `orphanCandidate` | boolean | Flags a sitemap URL with no discovered internal links. |
| `title` | string or null | Page title, when found. |
| `metaDescription` | string or null | Page description, when found. |
| `h1Count` | integer | Number of H1 elements found on the page. |
| `structuredDataTypes` | array of strings | Structured-data types found on the page. |
| `issueId` | string | Identifier for the detected issue. |
| `severity` | enum | Issue severity from info through critical. |
| `category` | string | Issue category. |
| `changeType` | enum | Whether an issue is new, unchanged, worsened, or fixed. |
| `fingerprint` | string | Identifier for the current issue evidence. |
| `previousFingerprint` | string | Identifier for the prior issue evidence, when available. |
| `evidence` | string | Observed condition that supports the issue. |
| `expected` | string | Expected condition for the page. |
| `fixHint` | string | Suggested remediation action. |
| `businessImpact` | string | Plain-language impact of the issue. |
| `sourceUrl` | URL | URL associated with the issue. |
| `requestedRoots` | integer | Number of requested release roots. |
| `sitemapUrls` | integer | Number of sitemap URLs used in the run summary. |
| `pagesChecked` | integer | Number of pages checked. |
| `issuesFound` | integer | Number of issues found. |
| `issuesEmitted` | integer | Number of issue records returned. |
| `mode` | enum | Report mode used for the run. |
| `failOnSeverity` | enum | Severity that determines whether the release verdict fails. |
| `failingIssues` | integer | Number of new or worsened issues that meet the selected failure severity. |
| `passed` | boolean | Whether the release verdict passed. |
| `complete` | boolean | Whether the configured audit completed. |
| `capped` | boolean | Whether the page limit was reached. |
| `stateAdvanced` | boolean | Whether saved evidence state advanced after the run. |

### 💰 Pricing

Pricing is pay per audit record. Empty runs cost nothing, and there are no subscriptions.

### ⭐ Enjoying Technical SEO Audit & Indexability Checker?

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:20px 24px 14px;background:#EEF6FF;border:1px solid #B7D6F7;border-left:5px solid #1769AA;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px;color:#16202A">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#16202A">Help another release owner spot indexability risks before launch.</span><br>
<span style="font-size:14px;color:#3D4B59">A 5-star rating takes 10 seconds and helps other release owners find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#1769AA;border:1px solid #B7D6F7;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/seo-release-indexability-guard/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### 🛡️ Terms and public URL safety

Use only public URLs you are authorized to assess. Do not submit private networks, local addresses, or URLs that require credentials.

### ❓ FAQ

##### Is this a website SEO checker?

Yes. It audits public production, staging, and preview URLs for indexability, page status, redirects, metadata, canonical tags, and structured data.

##### Does it work as a noindex, robots.txt, or canonical checker?

Yes. Select indexability, robots, and canonical checks to find noindex directives, robots.txt blocks, X-Robots-Tag signals, and missing or invalid canonical tags.

##### Which technical SEO checks can I select?

Select indexability, robots, canonical, metadata, and structured-data checks. The selected checks determine the evidence and issue rules used in the report.

##### Can I compare this release with a later run?

Yes. Reuse the same `stateKey` and choose changes-only output to return pages and issues that changed since the earlier check.

##### Does it audit every page on my site?

No. The audit is bounded by `maxPages` and `maxDepth`. Use priority URLs and discovery mode to focus the release scope.

##### Can I use it for a pre-launch SEO audit?

Yes, when the URL is publicly reachable. Check staging, preview, and production URLs before a launch, migration, or release.

### 🔗 Other actors

- [Website Technology Change Monitor: Tech Signals](https://apify.com/getascraper/website-technology-change-monitor) ↗: Track changes in public website technology signals.
- [Domain Health Monitor: WHOIS, DNS & SSL Monitor](https://apify.com/getascraper/domain-health-monitor) ↗: Monitor domain registration, DNS, and certificate signals.
- [Website Action Stack Detector: Public Signals](https://apify.com/getascraper/website-action-stack-detector) ↗: Identify public website action and tracking signals.
- [Moz Domain Authority Scraper: Bulk DA & SEO Stats](https://apify.com/getascraper/moz-scraper) ↗: Collect domain authority and SEO statistics in bulk.

# Actor input Schema

## `startUrls` (type: `array`):

One or more public production, staging, or preview URLs to audit.

## `sitemapUrls` (type: `array`):

Optional XML sitemap URLs. If omitted, the Actor tries /sitemap.xml for each release URL when sitemap discovery is enabled.

## `discoveryMode` (type: `string`):

Discover pages from XML sitemaps, internal links, or both sources.

## `priorityUrls` (type: `array`):

Optional high-value URLs to check first, such as launch pages, templates, or canonical landing pages.

## `maxPages` (type: `integer`):

Hard cap on checked pages across release URLs, sitemaps, and discovered internal links.

## `maxDepth` (type: `integer`):

How many internal-link levels to follow from a release or priority URL. A depth of 0 checks only seed pages.

## `includeChecks` (type: `array`):

Select the evidence and issue rules to include in the release gate.

## `failOnSeverity` (type: `string`):

Fail the run when a new or worsened issue reaches this severity. Omit this optional field to use the critical-only default.

## `mode` (type: `string`):

Return all evidence and issues, or only pages and issues that changed from the saved state.

## `stateKey` (type: `string`):

Stable identifier for the saved evidence state used by repeat release checks.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://example.com/"
    }
  ],
  "sitemapUrls": [],
  "discoveryMode": "both",
  "priorityUrls": [],
  "maxPages": 10,
  "maxDepth": 1,
  "includeChecks": [
    "indexability",
    "robots",
    "canonical",
    "metadata",
    "structuredData"
  ],
  "failOnSeverity": "critical",
  "mode": "full",
  "stateKey": "default"
}
```

# Actor output Schema

## `records` (type: `string`):

Typed dataset records for every inspected page, actionable issue, change state, and final run summary.

## `runSummary` (type: `string`):

Machine-readable release verdict, scope counts, and state-advance result.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://example.com/"
        }
    ],
    "sitemapUrls": [],
    "discoveryMode": "both",
    "priorityUrls": [],
    "maxPages": 10,
    "maxDepth": 1,
    "includeChecks": [
        "indexability",
        "robots",
        "canonical",
        "metadata",
        "structuredData"
    ],
    "failOnSeverity": "critical",
    "mode": "full",
    "stateKey": "default"
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/seo-release-indexability-guard").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://example.com/" }],
    "sitemapUrls": [],
    "discoveryMode": "both",
    "priorityUrls": [],
    "maxPages": 10,
    "maxDepth": 1,
    "includeChecks": [
        "indexability",
        "robots",
        "canonical",
        "metadata",
        "structuredData",
    ],
    "failOnSeverity": "critical",
    "mode": "full",
    "stateKey": "default",
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/seo-release-indexability-guard").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://example.com/"
    }
  ],
  "sitemapUrls": [],
  "discoveryMode": "both",
  "priorityUrls": [],
  "maxPages": 10,
  "maxDepth": 1,
  "includeChecks": [
    "indexability",
    "robots",
    "canonical",
    "metadata",
    "structuredData"
  ],
  "failOnSeverity": "critical",
  "mode": "full",
  "stateKey": "default"
}' |
apify call getascraper/seo-release-indexability-guard --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/seo-release-indexability-guard"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/UdgjhHSyQPGKu5vuG/builds/3FSCbdJB6KxtamA3x/openapi.json
