Cover image for Building an Automated SEO Pipeline with GSC API and GitHub Actions

ToolSura

The Need for Automated Indexing

Manual URL submission to Google Search Console (GSC) is inefficient for large websites or frequent content updates. The GSC URL Inspection API provides a programmatic way to interact with Google's indexing systems, but direct usage can be complex. This guide details how to integrate gsc-indexer, a command-line utility, into a GitHub Actions CI/CD pipeline to automate your SEO indexing workflow.

gsc-indexer in CI/CD: Core Principles

For gsc-indexer to function effectively in an unattended CI/CD environment, it relies on several key design choices:

  1. Machine-Friendly Output: The tool supports a -json flag, emitting a single JSON array of results upon completion. This facilitates programmatic parsing within scripts.
  2. Explicit Exit Codes: A successful run (all URLs processed) returns exit 0. Any failure (at least one URL failed inspection or submission) returns a non-zero exit code. This allows for robust error handling in CI.
  3. Service Account Authorization: Relying on Google Cloud Service Accounts ensures persistent and granular access without manual OAuth flows. The service account key (sa.json) must be stored securely.

GitHub Actions Workflow Example

Below is a main.yaml example demonstrating a daily scheduled workflow that inspects a sitemap, filters for specific URLs, and requests indexing via gsc-indexer.

name: Automated GSC Indexing

on:
  workflow_dispatch:
  schedule:
    - cron: '0 2 * * *' # Run daily at 2 AM UTC

env:
  GCP_PROJECT_ID: your-gcp-project-id # Replace with your GCP Project ID
  GSC_PROPERTY_URL: https://www.your-domain.com/ # Replace with your GSC Property URL

jobs:
  index-urls:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install gsc-indexer
        run: npm install -g gsc-indexer

      - name: Create Service Account Key File
        run: echo "${{ secrets.GSC_SERVICE_ACCOUNT_KEY }}" > sa.json
        env:
          GSC_SERVICE_ACCOUNT_KEY: ${{ secrets.GSC_SERVICE_ACCOUNT_KEY }} # Stored as a GitHub Secret

      - name: Fetch and Index Sitemap URLs
        id: gsc_run
        run: |
          # Example: Filter for blog post URLs from sitemap and index them
          curl -s https://www.your-domain.com/sitemap.xml | \
          grep -oE 'https://www.your-domain.com/blog/[^<]+' | \
          gsc-indexer -json -sa sa.json -p ${GSC_PROPERTY_URL} -project ${GCP_PROJECT_ID} -batch /dev/stdin > gsc-results.json
        continue-on-error: true # Allow subsequent steps to run even if some URLs fail

      - name: Review GSC Indexer Results
        run: |
          cat gsc-results.json
          # Further processing of results, e.g., push to analytics, alert on errors

      - name: Cleanup Service Account Key File
        run: rm sa.json

Enter fullscreen mode Exit fullscreen mode

Securing Credentials

Never hardcode your Google Cloud Service Account key in your workflow files. Instead, leverage GitHub Secrets.

  1. Navigate to your GitHub repository -> Settings -> Secrets and variables -> Actions.
  2. Add a new repository secret named GSC_SERVICE_ACCOUNT_KEY.
  3. Paste the entire content of your sa.json file into this secret.

This ensures your credentials are encrypted and only accessible during workflow execution.

Error Handling and Monitoring

As gsc-indexer emits non-zero exit codes on failure, you can integrate this into your CI/CD error reporting. Monitor gsc-results.json for specific indexing outcomes (e.g., status: 'FAILED') and trigger alerts (Slack, email, PagerDuty) if critical pages are not indexed.


CTA: Streamline your SEO operations. Learn more about gsc-indexer and get started with the full documentation.