Recommended Free Tools
A screenshot can show a loading skeleton, spinner, or placeholder when it is captured before the page’s JavaScript has finished rendering or fetching the data. A page’s resources can finish loading before its app hydrates or its data request completes. If the placeholder never disappears in the live page, look instead for failed scripts or data requests, lazy-loaded content that was never triggered, or browser settings and extensions interfering with the page.
Why a screenshot can catch a page before its data appears
Loading a page is not one event. The browser may fetch its HTML, scripts, styles, and other resources, then run JavaScript, hydrate a framework app, and request data separately. A screenshot taken between those stages preserves whatever is visible at that moment—even if the page fills in shortly afterward. A navigation or resource-load milestone therefore does not always mean that the content you need is ready. web.dev’s guide to rendering describes the distinction between loading and rendering work.
Some sites send an initial app shell whose HTML does not contain the final content. JavaScript must run to create or populate that content. If a script is blocked or fails, the shell or placeholder may remain. Google explains this pattern in its JavaScript SEO basics.
Identify which situation fits
| What you see | What to check | What would support that explanation |
|---|---|---|
| The placeholder disappears in the live page after a short wait, but the screenshot retains it. | Capture timing: the screenshot may precede hydration or the data response. | A capture that waits for a populated-content selector produces the expected result. Microlink documents selector/content waits for its own service; the setting is not a universal browser standard. Microlink documentation |
| The live page and screenshot both stay incomplete. | JavaScript errors, failed data requests, site problems, or browser state. | Console or network errors, or a change after testing a different browser profile. |
| Only content farther down the page is missing. | Viewport-triggered lazy loading. | Scrolling the relevant section into view causes it to load. Google advises against lazy-loading content likely to be visible immediately: Fix lazy-loaded website content. |
| The problem occurs in one browser or profile but not another. | Extensions, privacy settings, cookies, or cached site data. | A private window or another profile works, or the problem stops after disabling a particular extension. |
What to try as a site visitor
- Check the live page. Wait briefly and see whether the placeholder becomes data. If it does, the screenshot may have been early. If it does not, continue troubleshooting the page or browser.
- Reload once and let the page settle. Confirm that the needed data is actually visible before taking another screenshot.
- Try a private window or another browser. If that works, temporarily disable extensions one at a time, especially script blockers, privacy tools, and content blockers. Mozilla’s troubleshooting guide for pages that look wrong covers browser-side checks.
- Clear site data if needed. Removing cached data and cookies for that site may help; it can also sign you out, so make sure you can sign in again.
- Report enough detail to reproduce it. Include the page URL, browser and version, screenshot tool, whether JavaScript or privacy extensions are enabled, and whether the live page eventually shows the data.
What to check in an automated screenshot workflow
- Verify JavaScript runs. Check the capture browser’s console and network activity for failed scripts and data/API requests. A screenshot tool that does not execute the page’s scripts cannot capture content those scripts create.
- Wait for the content, not just navigation. Use a selector that appears only when the desired data is populated, or an equivalent content-ready condition supported by your tool. A generic navigation-complete event can occur before hydration or data arrival. Microlink’s instructions describe waits for its own service; consult your tool’s documentation for its actual options.
- Trigger lazy loading when relevant. Scroll the target section into view or perform the interaction that normally loads it before capture. Google’s lazy-loading guidance recommends that visible content load without requiring user interaction and cautions against delaying content that is immediately visible.
- Prefer a condition over a guessed delay. A fixed pause may work on one run and fail when network or rendering time changes. A content-aware wait is generally more reliable where the capture tool supports it.
If you own the website
Make essential content available in the initial HTML where practical, or provide a useful fallback if JavaScript does not run. This can improve resilience for visitors and systems that do not execute JavaScript. Google notes that not all bots can run JavaScript in its JavaScript SEO guidance; Shopify recommends rendering essential theme content in Liquid and HTML rather than JavaScript in its theme performance guidance.
#1 Best Overall
For lazy-loaded sections, avoid delaying content likely to appear in the initial viewport. Google’s recommendation is specific: “Don’t add lazy-loading to content that is likely to be immediately visible when a user opens a page.” See Google Search Central.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Or skip the browser setup
For automated captures, ScreenshotNeo is a website screenshot API and MCP server. A single GET request can return an image or PDF. For a WebP screenshot, replace the example URL with the page you need and use your API key:
Rank #2
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 ScreenshotNeo API documentation for request options. Its clean-shot steps can accept cookie or consent banners and remove 60+ known consent platforms, newsletter popups, and chat widgets; each step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers report the page verdict and billing status. Its MCP server provides take_screenshot, get_page_info, and capture_pdf for AI agents and other MCP clients. 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.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Quick Recap
Rank #3
Common troubleshooting mistakes
- Assuming the page is ready when navigation ends: JavaScript rendering and data fetching may still be in progress. Wait for the target content or a populated-state selector.
- Adding an arbitrary long delay: A delay does not diagnose a failed script or request, and it may still be too short on a slow run. Check failures and use a content-aware wait when possible.
- Waiting for below-the-fold content without bringing it into view: If loading depends on visibility, scroll to the section or reproduce the interaction that triggers it.
- Changing several browser settings at once: You may fix the symptom without finding the cause. Test extensions one at a time, then clear site data if needed.
- Calling every placeholder a screenshot-tool bug: Compare the live page with the capture and check for browser or site errors before assigning a cause. The symptom alone does not identify one root cause.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

