ScreenshotNeo

BlogHow-to

HTML.to.design Import Looks Different from the Live Website: How to Fix It

When an html.to.design import differs from the live page, match the viewport and theme first, then check capture method, fonts, and external assets.

By the ScreenshotNeo team4 October 20268 min read

If an html.to.design import looks different from the live website, first compare both at the same viewport width and in the same light or dark theme. Then check whether you used the right capture path: the public URL importer is for open pages, while the browser extension is the documented route for private pages, logged-in sessions, local pages, or a browser state you have already prepared. After that, check fonts and external assets. The difference is a symptom with several possible causes, so there is no single fix that applies to every page.

html.to.design is a Figma plugin and browser extension for turning webpages into editable Figma designs. Its documentation describes import controls and constraints, but does not promise that every site or browser state will be reproduced identically. Official documentation

1. Match the viewport and theme

Before changing the import method or editing the result, make the comparison conditions match. A different width can activate a responsive breakpoint, changing columns, navigation, spacing, image crops, and text wrapping. A light-versus-dark theme mismatch can change colors and assets.

  1. Record the live page’s viewport width and whether it is using light or dark theme.
  2. Set the import to the same viewport and theme.
  3. Compare the same page state at the same scroll position where possible.
  4. If the live page is mobile, verify the actual width rather than assuming that a desktop browser narrowed by eye is equivalent.

The html.to.design documentation lists a 390 px preset for public mobile pages. Custom width is a PRO feature. For private pages, the browser extension can capture at a selected mobile viewport. Import options and availability can change, so check the current plugin controls and plan details. html.to.design documentation

2. Choose the capture method for the page state

The public Web tab is intended for open URLs. Use the browser extension when the desired page depends on a private or local URL, a logged-in session, or an interaction you have already performed in your browser, such as dismissing a consent banner. The extension can send the capture directly to the plugin or save it as an .h2d file. Capture method guidance

Page you need Capture path to try Why
Public page available without login Public URL importer It imports the page from its URL.
Private page or authenticated account Browser extension It captures the page rendered in your browser session.
Local development page Browser extension The browser can access the local page and its current state.
Page after dismissing a banner or opening a specific state Browser extension Prepare the state in the browser, then capture what is displayed.

If the public URL import and your browser show different content, check whether the browser has cookies, authentication, location, or a prior interaction that the importer does not share. Capture the prepared browser state with the extension when that state is what you need in Figma.

3. Check fonts and text wrapping

When text wraps differently, letter shapes change, or headings appear too wide or too narrow, investigate fonts before adjusting layout by hand. A missing font or a mismatch between the font’s internal name and the name Figma recognizes can produce different typography even if the page structure imported.

  1. Look for a missing-font alert in the plugin.
  2. Check the rendered code’s font family name and compare it with the font available to Figma.
  3. Use the plugin’s documented font download option when available, install the font locally, and retry the import.
  4. For an organization-managed font, ask an administrator about uploading it for the organization.
  5. Recheck line breaks and element dimensions after the correct font is available; font metrics affect both.

See the vendor’s guidance on missing fonts and font handling. Installing a visually similar font may reduce the difference, but it does not guarantee the same metrics or wrapping.

4. Verify assets in local HTML

If you imported local HTML, inspect how its images, CSS, and JavaScript are referenced. The plugin attempts to load external resources, but the documentation warns that this can fail when resources are missing or are not publicly accessible. In those cases, use the browser extension to capture the rendered page. Local HTML guidance

  • Confirm that each referenced image and stylesheet URL loads in the browser.
  • Check whether the asset requires authentication, a local-only path, or a network that the importer cannot access.
  • Verify that the page has finished rendering before capturing it.
  • For a local page that looks correct in your browser, use the extension so the capture uses that rendered state.

5. Review import settings and page state

After matching the viewport, theme, and capture path, review the settings that affect structure and appearance. The product feature page describes auto layout, multi-viewport imports, light and dark themes, font mapping, and high-resolution images when available. These options can explain differences in layout or assets; they do not establish that every interaction, animation, or site-specific effect will be reproduced exactly. Current feature and import guidance

Check whether the compared page includes a state that can change over time or by session: a consent choice, personalization, rotating content, delayed loading, or an open menu. Make the browser and imported page show the same state before judging fidelity. If the page is still changing as you capture it, wait for the intended content to settle and repeat the capture.

6. Troubleshooting by symptom

What looks wrong Likely cause What to do
Columns, navigation, or spacing differ Viewport widths fall on different responsive breakpoints Match the exact width and retry. For public mobile pages, try the documented 390 px preset; use custom width if your plan supports it.
Colors or images differ between modes Light/dark theme mismatch or theme-specific assets Set the same theme in the importer and live page, then capture again.
Private page is blank, redirected, or shows a login page The URL importer does not share the browser’s authenticated state Open the target page in your logged-in browser and capture it with the extension.
Local page is missing images or styles External resources are unavailable, private, or referenced incorrectly Check the resource URLs; use extension capture if the page renders correctly in your browser.
Text wraps differently or the font looks wrong Font is missing or its internal name is not recognized Review the font alert, install/download the font, or use the documented font mapping or organization upload route.
The import captures the wrong banner or menu state The imported URL and browser are in different interaction states Prepare the desired state in the browser and capture with the extension.
Only some content appears The page may not have finished rendering or an asset may not be accessible Wait until the target state is visible, confirm resources load, and retry through the capture path suited to the page.

Without the URL, a description or screenshot of the discrepancy, the compared width and theme, and the capture method, it is not possible to identify which cause applies. The checks above narrow it down in a practical order.

Or skip the browser setup

If your goal is to capture a webpage as an image or PDF for a design reference, ScreenshotNeo is a website screenshot API and MCP server. One GET request returns a PNG, JPEG, WebP, or PDF. It is a separate capture workflow from importing an editable design into Figma: use html.to.design when you need editable Figma layers.

For a quick screenshot, request a URL directly. See the ScreenshotNeo API documentation for options and response details.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
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("shot.webp", "wb").write(r.content)
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('shot.webp', bytes));

ScreenshotNeo accepts consent banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed, and response headers report the page verdict and billing status. An MCP server provides take_screenshot, get_page_info, and capture_pdf for Claude, Cursor, and other MCP clients. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000 shots.

Sign up for 1,000 free screenshots a month, with no card required.

Performance, reliability, and cost considerations

For html.to.design, the main practical reliability factors in this troubleshooting flow are whether the capture can access the same state and resources as the live browser, and whether the correct font is available. A repeatable comparison should record the viewport, theme, URL or browser state, and capture route. No universal fidelity percentage or capture-time guarantee is established by the cited documentation.

For repeated static references, keep a note of the chosen viewport and theme so later captures use the same conditions. When evaluating ScreenshotNeo, choose output format and capture options for the task; cache settings, async jobs, and bulk capture can support repeatable or larger workloads. Only successful clean shots are billed under the stated product rules, and response headers indicate verdict and billing. Current plan prices are Free for 1,000 monthly shots, 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 available on every plan. Check the product site for current details.

FAQ

Can html.to.design reproduce every live page exactly?

The official material describes controls and known constraints, but does not promise identical reproduction for every site. Match the capture conditions and investigate fonts, assets, and page state first.

Should I use the URL importer or the extension?

Use the URL importer for open public pages. Use the extension for private, local, logged-in, or browser-state-specific pages.

Why does the mobile import still differ?

Responsive layouts can change at different widths. Match the page’s actual viewport and theme; the public importer documentation lists a 390 px mobile preset, while custom width is a PRO feature.

Will ScreenshotNeo make an editable Figma design?

No. ScreenshotNeo returns a screenshot or PDF. Use html.to.design when you need to convert a webpage into editable Figma content.