Troubleshooting
Common SEOFix problems by symptom, with the cause and the fix: stuck or failed audits, blocked pages, verification, Search Console, rechecks, API errors and email.
Find your symptom below. Each row gives the likely cause and what to do, with a link to the full article. If nothing here matches, email [email protected] with the audit or site ID.
Audits
| Symptom | Cause | Fix |
|---|---|---|
| Audit stays Queued | Crawlers run several audits at once; yours waits its turn. A queued audit can wait a while when crawlers are busy. | Wait. If its job is lost, SEOFix fails it after 10 minutes with reaped: never started and refunds the reserved credits. Then start it again. |
| Audit stays Running with no progress | The crawler stopped reporting progress. | After 15 minutes without progress SEOFix fails it with reaped: stalled. You pay only for pages crawled. Start a new audit. |
| Audit is Running but slow | Polite crawling: 2 requests per second by default, slower when your site slows down. A 10,000-page audit takes about 85 minutes at 2 req/s. | Verify the site to allow up to 10 req/s. See Verify site ownership. |
Audit Failed, reason reaped: never started or reaped: stalled |
See the two rows above. | Run the audit again. Credits for uncrawled pages are refunded automatically. |
Audit Failed, reason starts with dispatch_failed |
SEOFix could not hand the audit to a crawler. | Try again in a few minutes. The full reservation is refunded. |
Audit Failed, reason starts with setup_failed |
The audit could not start. | Check that the site is reachable from the public internet, then try again. |
Audit Failed, reason internal_error |
An error inside the crawler. | Try again. If it repeats, email [email protected] with the audit ID. |
| Audit Cancelled | Someone clicked Cancel audit, or an agent called cancel_audit / DELETE /v1/crawls/{id}. |
Start a new one. Only pages already crawled are charged. |
Status values and their meaning: Audit statuses.
Few or no pages crawled
| Symptom | Cause | Fix |
|---|---|---|
Many pages reported as BLOCKED_BY_FIREWALL |
A firewall or bot protection (Cloudflare, Akamai, DataDome, Sucuri) challenged the crawler. SEOFix backs off and stops crawling a section that keeps blocking it. | Verify the site, then let SEOFixBot through: Connect Cloudflare, or add the firewall rule by hand and click Check my setup. See Blocked pages. |
0 or 1 page, ROBOTS_BLOCKED notice |
Your robots.txt disallows the URL for SEOFixBot or *. SEOFix never fetches disallowed pages. |
Allow SEOFixBot in robots.txt for the paths you want audited. |
| Only the start page | The start URL redirects to another host (for example a different domain). SEOFix follows redirects only within the site and keeps crawling the original host. | Add the site with the final address, the one that answers 200. |
Start page shows FETCH_FAILED |
The host did not answer: DNS does not resolve, the connection failed or timed out. | Check the address and that the site is reachable from outside your network. |
| Pages found but no links followed | Links are read only from 200 responses with Content-Type: text/html. A start URL that returns JSON, a PDF, or an HTML page with the wrong content type has no links to follow. |
Start from an HTML page and serve it as text/html. |
Address refused with invalid_url |
Only public http/https addresses can be audited. Private and local addresses are refused. |
Use the public address of the site. |
| Audit stopped at 500 pages | The site is not verified (500-page limit), or you are on the Free plan. | Verify the site, and check your plan limits in Plans and credits. |
Site verification
Run a check in the app from the site's page, Verify ownership. Agents: verify_site (MCP) or POST /v1/sites/{id}/verify. The exact values to publish: get_verification or GET /v1/sites/{id}/verification. A failed check answers 422 verification_failed.
| Method | Common reasons it fails |
|---|---|
| Search Console | Search Console is not connected, or your Google account is not an owner or full user of a property that covers the site. |
| DNS TXT record | The record is not on the registrable domain (for www.example.com, it goes on example.com), the value is not exactly seofix-verify=<your token>, or DNS has not propagated yet. |
| Meta tag | The tag is not in the <head> of https://<your-host>/, the name is not seofix-verification, or the homepage is blocked or redirects elsewhere. |
| File | https://<your-host>/.well-known/seofix-verify.txt must answer 200 directly (no redirects), as text/plain, at most 1 KB, containing exactly seofix-verify=<your token>. |
SEOFix re-checks ownership every day. If the proof disappears, monitoring is paused and, when email alerts are on for the site, every team member gets an email. Verify again to resume. Full guide: Verify site ownership.
Search Console
| Symptom | Cause | Fix |
|---|---|---|
Settings → Integrations shows Access revoked or Needs reconnect; API answers 409 google_revoked |
Access was revoked in your Google account, or the connection was removed. | Connect again with Continue with Google Search Console. |
429 google_quota_exhausted |
Google's Search Console quota for the property is used up for today. | Try again tomorrow. |
429 budget_exhausted |
Your plan's daily URL inspections for the property are used: 300 on Free, 2,000 on Starter and Growth. | Wait for the reset time in the response. |
See Connect Google Search Console.
Rechecks ("Verify fix")
| Error | Status | Cause | Fix |
|---|---|---|---|
site_not_verified |
409 | Rechecks need a verified site. | Verify the site first. |
insufficient_credits |
402 | A recheck costs 1 credit per URL, paid by the team owner. | Top up credits; see Plans and credits. |
recheck_rate_limited |
429 | At most 30 rechecks per hour per team. | Wait for the Retry-After seconds. |
cannot_verify |
422 | This issue type needs a full audit to confirm (for example link-graph or sitemap issues). | Run a new audit. |
invalid_urls |
422 | The URLs are not on the site's host, or there are more than 200. | Send 1–200 URLs on the site. |
See Verify a fix.
Home page preview
| Error | Cause | Fix |
|---|---|---|
"Too many previews from your network. Try again later." (preview_rate_limited) |
At most 3 previews per hour from one network. | Wait, or sign up and use your free audit. |
"This site was previewed recently. Try again later." (preview_rate_limited) |
One preview per site per hour. | Wait, or sign up and use your free audit. |
"Previews are busy right now. Try again in a minute." (preview_busy) |
Too many previews are running. | Try again in a minute. |
| "Previews only run on the standard ports" | The URL has a port other than 80 or 443. | Remove the port, or sign up and add the site. |
API and MCP errors
| Status | Code | Cause | Fix |
|---|---|---|---|
| 401 | unauthenticated |
Missing, wrong or revoked API key. | Send Authorization: Bearer <key>. Create a new key in Settings → Agent & MCP, or run npx seofix connect. |
| 403 | team_access_revoked |
The key's holder is no longer a member of the key's team. | Create a new key for a team you belong to. |
| 403 | not_team_owner |
Billing calls need the team owner's key. | Use the owner's key, or have the owner buy in Settings. |
| 403 | plan_limit_sites, plan_limit_members, plan_limit_monitoring |
The team's plan does not allow it. | Upgrade; see Plans and credits. |
| 402 | insufficient_credits |
Balance below the audit's page limit. | Lower max_pages or top up. |
| 409 | site_not_verified |
Monitoring, rechecks or audits above 500 pages need a verified site. | Verify the site. |
| 429 | rate_limited |
More than 60 requests per minute with one key. | Wait for Retry-After, then retry. |
Full list: Errors and rate limits. MCP setup: MCP server.
Email not arriving
| Check | |
|---|---|
| Verification email | The link is valid for 24 hours. Resend from Settings → Profile → Resend email (3 times per 10 minutes). Check spam. |
| Team invitation | The owner must have a verified email. If sending failed, the owner saw "The invitation email could not be sent" and no invitation was saved; invite again. Links expire after 7 days. |
| Monitoring alerts | Sent only for sites with monitoring and email alerts on, for audits with new errors or a health drop of 5 points or more that finished in the last 3 days. Every team member receives them. |
| "Not enough credits" notice | Sent at most once per site per 24 hours, when a scheduled audit is skipped and email alerts are on. |
Related
More in Troubleshooting
Still stuck? Email [email protected] with your site and what you expected to see.