Troubleshooting
Common issues and how to resolve them.
list-sites returns no sites
The service account does not have access to any GSC properties.
- Open Google Search Console
- Go to property settings > Users and permissions
- Add the service account email with Full permissions
- Wait a few minutes for permissions to propagate
Authentication errors
If you see Error: Could not load the default credentials or similar:
- Verify
GOOGLE_SERVICE_ACCOUNTis valid JSON - Check that newlines in the private key are properly escaped as
\n - Ensure the Search Console API is enabled in your Google Cloud project
# Test JSON validity
echo $GOOGLE_SERVICE_ACCOUNT | jq .No data in Performance pane
The Performance tab shows an empty state. Possible causes:
- Sync has not been run — run
pagebridge sync --site ... - URL not matched — check if the page was matched using
pagebridge diagnose --site ... - No impressions — the page may have zero search impressions in the last 90 days
- Wrong content type — ensure the document type is listed in the gscSite
urlConfigs
Many unmatched URLs
A high number of unmatched URLs is normal. These typically include:
- Homepage and category/tag pages (outside the path prefix)
- Pages for document types not configured in
contentTypes - Old URLs for deleted or redirected content
- Pagination URLs, archive pages, etc.
Focus on no_matching_document results — these are URLs that should have matching content but don't:
pagebridge diagnose --site sc-domain:example.com --reason no_matching_documentCommon fixes:
- Slug mismatch — the URL slug differs from the Sanity
slug.currentvalue. Check for typos, hyphens vs underscores, or casing. - Wrong slugField — the
slugFieldin gscSite does not match the actual field name on your documents. - Draft documents — Sanity drafts are not published and may not be queryable with the default token permissions.
Database connection issues
- Verify the
DATABASE_URLformat:postgresql://user:password@host:port/database - For hosted databases, ensure
?sslmode=requireis appended - Check that the database server is reachable from your network
- Ensure the schema has been pushed:
pnpm db:push
GSC API rate limits
Google Search Console API has rate limits. If you encounter 429 Too Many Requests:
- The sync automatically paginates at 25,000 rows per request
- Index status checks are rate-limited to 100ms between requests (600/min)
- If you hit limits, wait a few minutes and retry
- For very large sites, consider syncing during off-peak hours
False positive decay signals
If you see decay signals for content that should not be flagged:
- New content — increase the quiet period:
--quiet-period 60 - Seasonal content — some pages naturally fluctuate. Dismiss or snooze these tasks in the Refresh Queue.
- Low traffic pages — raise the
minImpressionsthreshold in custom DecayDetector rules
Still stuck?
Open an issue on GitHub with:
- The command you ran
- The error output (with
--debugflag) - Your Node.js version and OS