ScreenshotNeo

BlogHow-to

How to Capture Screenshots of Competitor Category Pages for SEO

Build a repeatable visual review of competitor category pages. Capture comparable page states, record what you see, and verify crawlability separately.

By the ScreenshotNeo team4 October 20269 min read

Capture screenshots of the same type of category page under consistent conditions, save both the initial view and meaningful lower-page states, and record the URL, time, locale, viewport, and page state for every image. Then compare visible navigation, category text, product links, and listing behavior. A screenshot documents appearance at one moment; it does not prove that Google can crawl, render, or index the page.

1. Define a fair comparison

Before capturing anything, decide which pages and conditions belong in the comparison. Compare like with like: for example, the same product category across several competitors, in the same market and language. Record the complete URL, including query parameters when they affect the listing.

  • Choose equivalent category pages, not a category page for one site and a search results page for another.
  • Use the same locale, browser, viewport or device emulation, and consent state where possible.
  • Record the capture date and time, including the time zone if the research may be revisited later.
  • Note whether the page was reached directly or through site navigation, and any filters or sorting applied.
  • Do not bypass access controls or represent a page state that ordinary visitors cannot reach.

A consent banner can obscure important page content, but dismissing it changes the observed state. Decide whether the comparison is about the first visit or the post-consent experience, and use the same approach for every competitor. If a banner is accepted or dismissed, record that.

2. Capture the initial viewport

Save a screenshot after the page has reached a stable, readable state. Include the navigation, category heading, visible explanatory copy, filters or sorting controls, and the first products. The initial viewport is useful for comparing hierarchy and what a visitor sees without scrolling.

In Chrome DevTools, the Network panel can capture screenshots during page loading. This is useful when the timing of content matters: the images can be considered alongside the requests active at those points in the load. For a specific element, DevTools supports capturing a screenshot of an individual DOM node. Open the relevant node in the Elements panel, select it, and use the DevTools command to capture a node screenshot; consult the current Chrome DevTools documentation for the exact interface in your version.

3. Capture useful lower-page states

One screenshot rarely represents a complete category page. Capture additional views that answer a specific question: how products are presented below the fold, where category guidance appears, whether subcategories are listed, and what happens at the end of a product batch.

  1. Scroll to the next meaningful section and wait for its content and images to appear.
  2. If products load as you scroll, note the scroll or action that caused them to appear.
  3. Capture the resulting state, and repeat only while each additional capture adds useful evidence.
  4. If there is pagination, a “load more” control, or infinite scrolling, record the interaction and resulting URL or visible content.

Google explains that its crawlers generally discover URLs through anchor href attributes and generally do not click buttons or trigger user actions to update a page. That makes listing behavior worth investigating, but a screenshot alone cannot show how a particular page exposes URLs to crawlers. See Google’s guidance on pagination and incremental page loading.

4. Keep files and observations tied together

Use filenames that make captures identifiable without opening them. For example:

competitor-category-locale-date-viewport-state.png

A concrete filename might be shop-a-running-shoes-en-us-2026-10-04-1440x900-initial.png. Keep a companion spreadsheet or note with one row per capture:

Field What to record
Competitor and category Site label and the comparable category being reviewed
Page URL Complete URL, including meaningful parameters
Captured at Date and time, with time zone when useful
Environment Browser, locale, viewport or device emulation
Page state Initial, post-consent, filtered, scrolled, or after a load-more action
Observation What is visible, stated as an observation rather than an SEO conclusion

5. Compare what the screenshots can show

Google says that it uses relationships between pages and navigation links to understand site structure. It recommends crawlable paths through menus to category pages, subcategories, and product pages; products that are not linked through category browsing may not be found through crawling alone. Google also recommends textual explanation for category-page images. A visual review can therefore record whether these elements appear and how prominently they are presented.

  • Navigation: Are relevant categories and subcategories visible and understandable?
  • Category context: Is there useful explanatory text, and where does it appear relative to products?
  • Product discovery: Are product names and links visible? Is there a consistent route from category to product?
  • Listing behavior: Is there pagination, a load-more action, or incremental loading? What content appears after each action?
  • Visual hierarchy: Can a visitor distinguish the category heading, controls, product details, and promotional content?

These are observations to verify, not a checklist Google publishes as a competitor-scoring standard. Google’s guidance is about making useful ecommerce pages and site structure understandable. See Google’s ecommerce site structure guidance, its ecommerce SEO best practices, and the developer’s guide to Search.

6. Verify technical claims separately

A screenshot shows rendered appearance at a specific time and state. It does not establish whether navigation is implemented with crawlable <a href> links, whether structured data is present, what the page source contains, or whether Google indexed the URL.

  1. Inspect the page’s links and rendered output to confirm how category and product URLs are exposed.
  2. Review the relevant source or rendered DOM for technical details that are not visible in the image.
  3. Use Search Console URL Inspection for a page you can inspect in the property. It can show tested live-page information and, for indexed pages, crawled-page information including a screenshot. See Inspect and troubleshoot a single page.
  4. Keep conclusions scoped to the evidence. A visible product grid is not proof that every product URL is crawlable or indexed.

7. Repeat captures with ScreenshotNeo

For a repeatable set of URL captures, ScreenshotNeo is a website screenshot API and MCP server. One GET request takes a URL and returns a PNG, JPEG, WebP, or PDF. It supports full-page capture, custom viewport sizes, wait conditions, custom headers and cookies, and bulk capture of up to 100 URLs per call. See the ScreenshotNeo API documentation for parameters and response details.

The browser workflow above is useful for hands-on inspection and interactive states. For a set of direct page URLs, an API can save each capture with consistent options. Keep the same viewport, locale-related settings, wait behavior, and consent state for comparable pages; review captures to confirm that lazy-loaded products have appeared.

cURL

curl -G "https://api.screenshotneo.com/v1/shot" \
  -d access_key=YOUR_API_KEY \
  --data-urlencode url=https://stripe.com \
  -o competitor-category.webp

Python

import requests

r = requests.get(
    "https://api.screenshotneo.com/v1/shot",
    params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"},
    timeout=90,
)
r.raise_for_status()
open("competitor-category.webp", "wb").write(r.content)

Node.js

const q = new URLSearchParams({
  access_key: 'YOUR_API_KEY',
  url: 'https://stripe.com',
});
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot request failed: ${res.status}`);
const bytes = new Uint8Array(await res.arrayBuffer());
await import('node:fs/promises').then(fs => fs.writeFile('competitor-category.webp', bytes));

Replace the example target URL with the category page you are authorized to capture. Check the response headers for the page verdict and billing status; ScreenshotNeo identifies whether a response was a clean capture, a bot check or CAPTCHA, a blank page, a failed load, or a cache hit.

Useful capture settings

For category research, choose settings that preserve comparability and capture the evidence you need:

  • Viewport and device: use a fixed viewport for desktop comparisons or one of the device presets for a mobile pass. ScreenshotNeo supports 12 device presets and custom viewports.
  • Full page: use full-page capture when the full listing matters; lazy images are loaded. For interaction-dependent lists, capture after the relevant action as well.
  • Wait condition: wait for a selector, a delay, or network idle. A stable product-grid selector is often more meaningful than a fixed delay, but confirm the selector exists on all pages.
  • Consent and overlays: ScreenshotNeo accepts cookie and consent banners as a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture. Each of these steps can be turned off. Record this when comparing against a first-visit state.
  • Page access: custom headers, cookies, user agent, and Authorization can be set when needed. Use only access you are entitled to use.
  • Output: select PNG, JPEG, or WebP for images. PDF output supports paper size, margins, landscape, and page ranges.
  • Repeat runs: caching is available with a TTL you choose. Disable or adjust caching when you need a fresh observation; keep the chosen policy consistent across a comparison.
  • Batching: bulk capture supports up to 100 URLs per call. Async jobs with signed webhooks and the usage API are available for larger workflows.

Or skip the browser setup

Cookie banners, popups, and chat widgets are removed before the shot. Bot checks, blank pages, and failed loads are never billed. An MCP server lets AI agents take screenshots with Claude, Cursor, or any MCP client. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

See the API documentation and available options, then sign up for 1,000 free screenshots a month with no card.

Common problems and fixes

Problem Likely cause What to do
The screenshot only shows the top of the page A viewport capture was used instead of a full-page capture, or the lower content needs interaction. Enable full-page capture. If the listing loads after scrolling or clicking, capture after that state change too.
Product images are missing Images are lazy-loaded or the capture happened before they were ready. Wait for a relevant image or product selector, or capture after scrolling the images into view. Check whether the site requires an interaction.
Pages look different despite using the same viewport Locale, consent, filters, personalization, timing, or page content differ. Record those conditions, align them where possible, and label any unavoidable differences in the notes.
A load-more capture seems incomplete The action may not have completed, or more content may load incrementally. Record the action, wait for new products to appear, then capture. Inspect URLs and links separately for crawlability.
The capture contains a consent banner or popup The page is in a first-visit state, or overlay handling is disabled or does not apply to that banner. Decide whether first-visit appearance is part of the comparison. Apply the same policy to every site and note it.
An API result is a bot check, blank page, failed load, or cache hit The target may block automated access, fail to render, return no useful page, or match a cached capture. Inspect the verdict and billing headers, check the URL and access conditions, adjust wait or cache settings as appropriate, and retry only when a changed condition could help.

Performance, reliability, and cost

Capture only states that answer a research question. A fixed viewport capture is usually a smaller task than a full-page capture, while full-page images can reveal more of the listing in one file. For dynamic pages, waiting for a useful selector can reduce premature captures; overly broad network-idle waits may take longer on pages with continuing requests. Keep a stable naming and metadata scheme so a later capture can be compared with the right earlier state.

For ScreenshotNeo, cache TTL is configurable, bulk capture handles up to 100 URLs per call, and async jobs with signed webhooks support longer workflows. Only clean shots are billed: bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing. Responses include X-Page-Verdict and X-Billed headers to identify the result and billing status. The usage API can help track consumption.

Plans are Free: 1,000 shots per month with no card; Starter: $5 for 3,000; Growth: $15 for 15,000; Pro: $39 for 60,000; Scale: $99 for 250,000; and Business: $249 for 1,000,000. Yearly billing gives two months free. Every feature is on every plan. More details are on ScreenshotNeo.

FAQ

How many screenshots should I take per competitor?

There is no universal number. Capture the initial view and each additional state that helps answer a defined question, such as category context, product presentation, or pagination behavior.

Can a screenshot tell me whether a competitor page is indexed?

No. Use Search Console for pages in a property you can inspect, and investigate links, rendered output, and index information separately.

Should I compare desktop or mobile pages?

Choose the device experience relevant to the research question. Keep the viewport or device emulation consistent across competitors, and run a separate comparison if both experiences matter.