Docs Analytics & GSC

Analytics & GSC

Close the feedback loop: use real traffic data to optimize your pSEO content engine.

Overview

Contento pSEO is not a "generate and forget" tool. The analytics system creates a feedback loop between your generated content and real search performance data from Google Search Console (GSC). This loop lets you identify which niches and subtopics are driving traffic, which pages are underperforming, and where to focus your next generation batch.

Connecting Google Search Console

Connect your GSC property directly from the CLI — the CLI runs the OAuth flow in your default browser, then stores the refresh token locally next to your AI provider config.

$ contento analytics connect proj_8f3a...

  Opening browser for Google OAuth...
  ? Select Search Console property: https://example.com/
  ✓ GSC connected. Token saved to ~/.contento/gsc.json
  Run "contento analytics sync proj_8f3a..." to pull the last 28 days.

OAuth uses Google's standard read-only Search Console scope. Contento never sees your token — everything stays on your machine.

Pulling Data

Run contento analytics sync to pull the latest GSC data into a local SQLite cache. Schedule it via cron (or your CI) for a daily refresh:

  • Clicks — Number of times users clicked through to your page from search results
  • Impressions — Number of times your page appeared in search results
  • CTR — Click-through rate (clicks / impressions)
  • Position — Average ranking position in search results
  • Indexed status — Whether the page is in Google's index
  • Queries — Top search queries driving traffic to each page

Data is pulled for the last 28 days (GSC's default reporting window) and stored locally in ~/.contento/analytics.db — a plain SQLite file you can query directly if you want.

Summary Metrics

View the analytics summary from the CLI:

$ contento analytics summary proj_8f3a...

  Project: DevTools Resources
  Period:  Last 28 days
  ──────────────────────────────────────
  Total Clicks        12,450
  Total Impressions  285,000
  Average CTR          4.37%
  Average Position      16.3
  Indexed Pages      980 / 1,024 (96%)
MetricDescription
Total ClicksSum of all clicks across all pages in the project
Total ImpressionsSum of all impressions across all pages
Average CTRWeighted average click-through rate
Average PositionWeighted average ranking position
Indexed PagesNumber of pages confirmed in Google's index
Pending IndexingPages published but not yet indexed

Top Pages Leaderboard

The leaderboard ranks all pages in a project by performance:

$ contento analytics top-pages proj_8f3a... --limit 5

  #  Title                              Clicks  Impr    CTR    Pos
  1  100 Remote Work Ideas              2,340   55,714  4.2%   14.2
  2  50 CI/CD Pipeline Tips              1,890   42,100  4.5%   12.8
  3  Best API Testing Tools 2026         1,650   38,900  4.2%   15.1
  4  DevOps Automation Checklist         1,420   31,200  4.6%   11.9
  5  Freelance Developer Tools Guide     1,100   28,500  3.9%   18.4

You can sort by clicks, impressions, CTR, or position. Use --json for machine-readable output.

Niche Performance Ranking

Contento aggregates page-level data up to the niche level, letting you compare how different niches perform:

NichePagesTotal ClicksAvg. PositionIndexed %
Developer Tools1204,28014.298%
DevOps802,15018.795%
Freelancing6089024.188%

Use niche rankings to decide where to invest your next generation batch. Expand high-performing niches with additional subtopics and schemas.

Zero-Traffic Page Detection

Pages that receive zero clicks for 60 consecutive days after publishing are flagged as underperformers:

$ contento analytics zero-traffic proj_8f3a...

  12 pages with zero traffic (60+ days)
  ──────────────────────────────────────
  page_4f2a  /niche-marketing-tips-2026     Published 2026-01-05
  page_7b1c  /obscure-devops-patterns       Published 2026-01-08
  ...

Options for zero-traffic pages:

  • Regenerate — Re-run AI generation with an updated prompt to produce better content
  • Merge — Combine the subtopic into a related, better-performing page
  • Remove — Delete the page and its URL to reduce crawl budget waste
  • Ignore — Mark as reviewed if the page targets a long-tail query that needs more time

CSV Export

Export analytics data as CSV for use in spreadsheets or BI tools:

$ contento analytics export proj_8f3a... --format csv > analytics.csv

  ✓ Exported 1,024 pages to analytics.csv

Export levels:

  • Page-level export — All pages with clicks, impressions, CTR, position, and indexed status
  • Niche-level export — Aggregated niche performance data
  • Query-level export — Top queries per page with click and impression counts

CLI Commands

CommandDescription
contento analytics summaryProject-level summary (clicks, impressions, CTR, position)
contento analytics top-pagesTop pages ranked by performance
contento analytics zero-trafficPages with zero clicks in 60+ days
contento analytics exportCSV export of analytics data

Optimizing Based on Data

The analytics feedback loop enables a continuous optimization cycle:

  1. Identify winners — Find niches and schemas with the highest clicks and best CTR.
  2. Expand winners — Add new subtopics to performing niches. Run additional schemas (e.g., add "FAQ" pages for a niche that performs well with "Best-Of" pages).
  3. Diagnose underperformers — Check if low-performing pages are indexed. If indexed but low CTR, the title may need adjustment. If not indexed, the content may be too thin.
  4. Regenerate underperformers — Use the "Regenerate" action on zero-traffic pages to produce improved content with a new AI prompt.
  5. Prune dead weight — Remove pages that consistently get zero traffic after regeneration to improve overall domain quality.
  6. Repeat — Run this cycle weekly or monthly to continuously improve your pSEO performance.
Tip: Wait at least 30 days after publishing before evaluating page performance. Google can take 2-4 weeks to index and start showing pages in search results, especially for new content sections.