Use Screenshot API for SEO Page Monitoring
Your pages might look broken to Googlebot and you would never know. Use screenshot monitoring to catch visual issues before they tank your rankings.
Why visual monitoring matters for SEO
Google evaluates your pages visually. Core Web Vitals, mobile-friendliness, and content layout all factor into rankings. A broken page that loads fine server-side but renders incorrectly in the browser can silently destroy your SEO performance.
Common issues that visual monitoring catches:
- Layout shifts -- content jumping around after load (hurts CLS score)
- Broken CSS -- a bad deploy can make pages unreadable
- Missing images -- broken image tags that go unnoticed
- JavaScript errors -- client-side rendering failures
- Cookie/consent overlays -- covering your actual content
- Mobile layout issues -- content overflowing or hidden on small screens
Setting up SEO page monitoring with ScreenshotAPI
The idea is simple: take screenshots of your important pages on a schedule, then compare them. When a page changes unexpectedly, you get alerted before Google re-crawls it.
Step 1: Define your monitoring list
Focus on pages that drive organic traffic. Check Google Search Console for your top landing pages.
// pages-to-monitor.js
const pages = [
{ url: 'https://yoursite.com/', name: 'Homepage' },
{ url: 'https://yoursite.com/pricing', name: 'Pricing' },
{ url: 'https://yoursite.com/product', name: 'Product' },
{ url: 'https://yoursite.com/blog/top-post', name: 'Top Blog Post' },
];
module.exports = pages;Step 2: Capture screenshots with the API
const fetch = require('node-fetch');
const fs = require('fs');
const path = require('path');
const pages = require('./pages-to-monitor');
const API_KEY = process.env.SCREENSHOT_API_KEY;
const API_URL = 'https://screenshotapi-api-production.up.railway.app';
async function captureScreenshots() {
const timestamp = new Date().toISOString().split('T')[0];
const dir = `./screenshots/${timestamp}`;
fs.mkdirSync(dir, { recursive: true });
for (const page of pages) {
console.log(`Capturing: ${page.name}`);
// Desktop screenshot
const desktopRes = await fetch(
`${API_URL}/v1/screenshot?url=${encodeURIComponent(page.url)}&width=1280&height=800&format=png&fullpage=true`,
{ headers: { 'Authorization': `Bearer ${API_KEY}` } }
);
const desktopBuffer = await desktopRes.buffer();
fs.writeFileSync(`${dir}/${page.name}-desktop.png`, desktopBuffer);
// Mobile screenshot
const mobileRes = await fetch(
`${API_URL}/v1/screenshot?url=${encodeURIComponent(page.url)}&width=375&height=812&format=png&fullpage=true`,
{ headers: { 'Authorization': `Bearer ${API_KEY}` } }
);
const mobileBuffer = await mobileRes.buffer();
fs.writeFileSync(`${dir}/${page.name}-mobile.png`, mobileBuffer);
}
console.log(`Screenshots saved to ${dir}`);
}
captureScreenshots();Step 3: Compare screenshots over time
Use an image comparison library like pixelmatch to detect changes between screenshots:
const { PNG } = require('pngjs');
const pixelmatch = require('pixelmatch');
function compareScreenshots(img1Path, img2Path) {
const img1 = PNG.sync.read(fs.readFileSync(img1Path));
const img2 = PNG.sync.read(fs.readFileSync(img2Path));
const { width, height } = img1;
const diff = new PNG({ width, height });
const mismatchedPixels = pixelmatch(
img1.data, img2.data, diff.data,
width, height,
{ threshold: 0.1 }
);
const changePercent = (mismatchedPixels / (width * height)) * 100;
if (changePercent > 5) {
console.warn(`WARNING: ${changePercent.toFixed(1)}% change detected!`);
// Send alert via Slack, email, etc.
}
return changePercent;
}Step 4: Automate with cron
Run the monitoring script daily or after each deploy. Here is a simple cron setup:
# Run daily at 6 AM
0 6 * * * cd /path/to/monitor && node capture.js && node compare.jsAdvanced: Mobile vs desktop monitoring
Google uses mobile-first indexing, so mobile screenshots are actually more important for SEO. ScreenshotAPI lets you set any viewport size:
- Mobile:
width=375&height=812(iPhone viewport) - Tablet:
width=768&height=1024(iPad viewport) - Desktop:
width=1280&height=800(standard laptop)
Advanced: Block cookie popups
Cookie consent popups can obscure your actual content in screenshots. ScreenshotAPI has built-in ad and cookie blocking to capture clean screenshots:
// Add block_ads=true to remove cookie popups and ads
const url = `${API_URL}/v1/screenshot?url=${encodeURIComponent(page.url)}&width=1280&height=800&block_ads=true`;What to monitor
Focus your monitoring on:
- Top 10 organic landing pages -- these drive your SEO traffic
- Key conversion pages -- pricing, signup, product pages
- Pages with dynamic content -- anything loaded via JavaScript
- New pages after deploy -- catch deployment regressions immediately
Cost estimate
Monitoring 20 pages daily (desktop + mobile = 40 screenshots/day) uses about 1,200 screenshots per month. That fits comfortably in the Pro plan at 10,000 screenshots/month for $29/mo.
Get started
Sign up for a free account with 100 screenshots per month -- enough to test your monitoring setup before committing to a paid plan.