How to Generate Website Thumbnail Images with PagePeeker in WordPress India
Generate website thumbnails in WordPress with PagePeeker’s V2 API. Learn how to build and embed image URLs, choose account options, and troubleshoot common issues.
To generate website thumbnail images with PagePeeker in WordPress India, use PagePeeker’s V2 thumbnail endpoint to build a remote image URL, then place that URL in an image element on your WordPress site. PagePeeker calls V2 its current recommended version; V1 is discontinued and redirects to V2. The WordPress placement examples below are general implementation guidance, not claims of a tested plugin or WordPress installation. Read PagePeeker’s API documentation.
1. Build a PagePeeker V2 image URL
The documented endpoint pattern is:
http://{entrypoint}.pagepeeker.com/v2/thumbs.php?size={size}&code={code}&refresh={refresh}&wait={wait}&url={url}
Use the free endpoint shown in the provider’s examples, or the account-specific entry point and code provided for your account. The captured page URL must be URL-encoded when you assemble the query string. Parameters are optional where PagePeeker documents them as optional. A minimal pattern is:
http://free.pagepeeker.com/v2/thumbs.php?size=m&url=https%3A%2F%2Fexample.com%2F
For your own target, replace the encoded URL with the encoded address of the page you want represented. Prefer HTTPS for your site’s page URL when it is available. If using an account code, keep it on server-side calls: PagePeeker warns that exposing it in browser-visible markup can let other people consume your quota.
Parameters
| Parameter | Purpose | Notes |
|---|---|---|
size |
Select the thumbnail dimensions. | Standard choices are t, s, m, l, and x. Premium accounts may have other sizes. |
url |
URL of the page to capture. | Encode it as a query parameter, especially when it contains its own query string, ampersands, fragments, or non-ASCII characters. |
code |
Account code, when required for your account or plan. | Follow the account instructions. Do not expose a private code in public page HTML; call the endpoint from your server if the code must remain secret. |
refresh |
Refresh behavior for the thumbnail. | Use only values documented for your account and endpoint. Refreshing can cause a new capture rather than reuse of a cached image. |
wait |
Wait behavior for rendering. | Use documented values; rendering can take seconds, and PagePeeker’s published typical times vary by plan. |
See the PagePeeker API reference for current parameter semantics and account-specific requirements.
Standard thumbnail sizes
| Code | Dimensions | Typical use |
|---|---|---|
t |
90 × 68 px | Compact lists |
s |
120 × 90 px | Small cards |
m |
200 × 150 px | General previews |
l |
400 × 300 px | Larger content cards |
x |
480 × 360 px | Largest standard size |
Choose an endpoint size at least as large as the largest intended display, while accounting for the service’s listed maximum for your plan. Enlarging a small thumbnail in CSS will not add detail.
2. Add the thumbnail to WordPress
You can use a Custom HTML block for a one-off image, a shortcode for editor reuse, or a theme/template implementation for site-wide output. These are common WordPress approaches; confirm details against your WordPress version and theme.
Option A: Custom HTML block
- In the WordPress editor, add a Custom HTML block where the preview should appear.
- Paste an image element with the PagePeeker URL as its
src. - Replace the sample target with your page and write descriptive alternative text.
- Preview the page and verify the image loads and fits the layout.
<a href="https://example.com/">
<img
src="http://free.pagepeeker.com/v2/thumbs.php?size=m&url=https%3A%2F%2Fexample.com%2F"
alt="Preview of Example"
width="200"
height="150"
loading="lazy"
>
</a>
In HTML, query-string ampersands are conventionally written as &. Keep the link destination and the captured page aligned, and use meaningful alt text if the image conveys information. If it is purely decorative beside equivalent text, use alt="".
Option B: A shortcode
A shortcode can make an image reusable in posts, but it needs a PHP implementation in a child theme or a site-specific plugin. Keep account credentials on the server. The following illustrates the structure; check it against your WordPress and PHP versions before using it in production.
function site_pagepeeker_shortcode( $atts ) {
$atts = shortcode_atts(
array(
'url' => '',
'size' => 'm',
'alt' => 'Website thumbnail',
),
$atts,
'pagepeeker'
);
$allowed_sizes = array( 't', 's', 'm', 'l', 'x' );
$size = in_array( $atts['size'], $allowed_sizes, true ) ? $atts['size'] : 'm';
$target_url = esc_url_raw( $atts['url'] );
if ( ! $target_url ) {
return '';
}
$image_url = add_query_arg(
array(
'size' => $size,
'url' => $target_url,
),
'http://free.pagepeeker.com/v2/thumbs.php'
);
return sprintf(
'<img src="%s" alt="%s" width="200" height="150" loading="lazy">',
esc_url( $image_url ),
esc_attr( $atts['alt'] )
);
}
add_shortcode( 'pagepeeker', 'site_pagepeeker_shortcode' );
Usage:
[pagepeeker size="m" url="https://example.com/" alt="Preview of Example"]
This example uses the free endpoint and does not include a private account code. A server-side account integration should read the code from protected configuration, never accept it from the shortcode, and follow PagePeeker’s current endpoint instructions.
Option C: A theme or template
For a fixed set of previews, construct the URL in template code and escape both the image URL and alt text using the escaping helpers appropriate to the framework. Store target URLs as data, not raw HTML. If visitors can submit target URLs, validate permitted schemes and hosts to avoid turning your site into an unintended proxy or generating arbitrary outbound requests.
What about a plugin?
The WordPress.com Pagepeeker listing documents historical shortcode syntax such as [pagepeeker size="t" url="google.com" alt="Google"], but its listing says it was last updated February 19, 2013 and tested up to WordPress 3.5.2. That is evidence of old syntax, not current compatibility. The Hover Preview listing describes an API-key integration, but current maintenance and support were not verified. Check recent updates, compatibility, permissions, and the plugin’s handling of account codes before installing anything. Pagepeeker listing; Hover Preview listing.
3. Choose a PagePeeker account option
PagePeeker’s pages checked in 2026 list these service specifications. They can change, so verify current terms directly. Prices are listed in USD; research did not establish India-specific availability, rupee billing, taxes, payment methods, or localized terms. Check current account and billing details with PagePeeker.
| Option | Calls/month | Branding or backlink | Max listed size | Cache | Typical rendering | Listed price |
|---|---|---|---|---|---|---|
| Free branded | No monthly limit listed | PagePeeker branding | 480 × 360 px | 20 days | 30–60 seconds | Free, no expiration listed |
| Free unbranded | 100,000 | No thumbnail branding; backlink required | 480 × 360 px | 20 days | 10–20 seconds | Free |
| Basic | 100,000 | Review current plan terms | 480 × 360 px | 7 days | 10–20 seconds | $5.99/month |
| Advanced | 1,000,000 | Review current plan terms | 480 × 360 px | 5 days | 5–15 seconds | $39.99/month |
| Premium | Unlimited as listed | Review current plan terms | Unlimited as listed | Customizable | Under 5 seconds | Custom |
The free unbranded option requires a backlink. PagePeeker’s FAQ says the backlink must be on the account site’s homepage and validated. The premium plan page also lists mobile/tablet and full-length screenshots, plus HTML-to-PDF conversion. Check the official pricing page, free thumbnails page, and FAQ for current terms.
4. Estimate calls, cache behavior, and cost
Do not assume one WordPress page view always equals one API call. PagePeeker says each of these counts as one call: displaying an already generated thumbnail, generating a thumbnail that is not cached, checking whether an image is available, and calling any exposed API. Quota is monthly and does not roll over. Its FAQ says the premium pay-as-you-go option is for customers above five million API calls per month.
Estimate usage by counting each operation your integration performs per visitor and each uncached generation, then multiply by expected traffic. If the same image is requested repeatedly, browser, WordPress, CDN, and provider caching can affect the actual pattern; use the provider’s defined call accounting rather than assuming your page-view count. The listed cache periods vary by plan, and a forced refresh can trigger new work. For a large directory, avoid polling readiness for every visitor unless your quota estimate includes those checks.
5. Performance and reliability considerations
- Allow for first-capture delay. The published typical rendering time ranges from 30–60 seconds on free branded to under 5 seconds on premium. These are provider-listed typical figures, not a guarantee for an individual URL.
- Use lazy loading below the fold. The HTML example sets
loading="lazy"so the browser can defer off-screen thumbnail requests. - Plan around cache lifetime. A cached preview can be stale until the cache expires or refresh behavior replaces it. Select a refresh strategy based on how often the target pages change.
- Design for a missing image. Remote capture can fail or take time. Include alt text, reserve dimensions to prevent layout shifts, and provide a useful fallback or ordinary link to the target.
- Do not expose account secrets. Public image URLs are visible to visitors. Keep an account code out of browser markup and use a server-side integration if your account setup requires a secret code.
- Check the target site’s capture policy. Page owners who do not want the PagePeeker robot to capture their pages can add
User-agent: PagePeekerandDisallow: /torobots.txt, as described in its robot documentation.
Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server from Yorker Media. Make one GET request to receive a PNG, JPEG, WebP, or PDF; see the API documentation.
curl -G "https://api.screenshotneo.com/v1/shot" \
-d access_key=YOUR_API_KEY \
--data-urlencode url=https://example.com/ \
-o shot.webp
import requests
r = requests.get(
"https://api.screenshotneo.com/v1/shot",
params={"access_key": "YOUR_API_KEY", "url": "https://example.com/"},
timeout=90,
)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({
access_key: 'YOUR_API_KEY',
url: 'https://example.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('shot.webp', bytes));
ScreenshotNeo removes cookie banners, popups, and chat widgets before the shot. Bot checks, blank pages, and failed loads are never billed. Its MCP server lets AI agents take screenshots. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000 screenshots. Sign up for 1,000 free screenshots a month, with no card required.
Troubleshooting
| Symptom | Likely cause | What to do |
|---|---|---|
| Broken image icon | Malformed endpoint, unencoded target URL, or invalid parameter. | Rebuild the URL with a URL encoder; inspect the final request and compare the endpoint and parameter names with the current API documentation. |
| Thumbnail shows the wrong page or loses query parameters | The target URL’s &, #, or other reserved characters were not encoded as part of the url value. |
Encode the entire target URL as one parameter value, then HTML-escape the resulting query string when placing it in markup. |
| Image is branded or blocked by account terms | The selected free option carries branding, or the unbranded option’s backlink requirement is unmet. | Check your account option and backlink placement. The FAQ specifies a validated link on the account site’s homepage for the free unbranded arrangement. |
| Image takes a long time to appear | First capture or plan-specific rendering time; target page may also be slow. | Allow for the provider’s published typical time, avoid making visitors synchronously wait on capture when possible, and use caching appropriate to the page’s update rate. |
| Quota is consumed faster than page views suggest | Image display, uncached generation, availability checks, and other API calls each count. | Audit every operation in the integration and include refreshes and readiness checks in the monthly estimate. |
| Plugin shortcode is missing or fails after an update | The documented Pagepeeker plugin listing is historical and only states testing up to WordPress 3.5.2. | Do not infer current compatibility from the old listing. Check the plugin’s current maintenance and support, or use a small custom integration. |
| Account code appears in page source | The code was embedded in a client-side image URL or shortcode output. | Remove it from public markup, rotate or replace it if exposed, and proxy the call through server-side code using protected configuration. |
Frequently asked questions
Does this setup require a WordPress plugin?
No. A remote image can be placed directly in a Custom HTML block or generated by a shortcode or template. A plugin is optional; verify its current compatibility before relying on it.
Can I use PagePeeker from India?
The researched documentation describes the global service and lists prices in USD. It did not verify India-specific availability, taxes, payment methods, rupee billing, or localized terms, so confirm those details with PagePeeker before choosing a plan.
Can I request a full-page image with the standard endpoint?
The standard sizes listed are fixed thumbnail dimensions. PagePeeker lists full-length screenshots among Premium features; consult the current account documentation for access and request details.
Can another site prevent PagePeeker from capturing its pages?
Yes. PagePeeker documents a robots.txt rule using User-agent: PagePeeker and Disallow: /.


