Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

page.goto(url, options) navigates a Puppeteer page or frame to a URL. Its options control when Puppeteer considers navigation finished, how long it waits, whether the call can be cancelled, and optional referrer metadata. A resolved navigation does not necessarily mean the server returned a successful HTTP status: inspect the response when that matters.

What page.goto() does and returns

The method signature is page.goto(url, options?). Include a scheme in the URL, such as https://. The promise resolves to the main resource’s HTTPResponse, or to null for navigation to about:blank or to the same URL with only a hash change. If the browser follows redirects, the response is for the final destination.

Check the response status separately when your code needs to distinguish successful HTTP responses from errors. Navigation completing is not, by itself, proof of a 2xx response.

A minimal example

const response = await page.goto('https://example.com');

if (response) {
  console.log('Final URL:', response.url());
  console.log('HTTP status:', response.status());
} else {
  console.log('Navigation did not produce a main-resource response.');
}

The exact API version can matter. The Puppeteer reference material for this guide identifies Page.goto() and WaitForOptions as version 25.12.0, and GoToOptions as version 25.10.0. Check the reference for the version installed in your project before relying on version-specific signatures.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Elebase USB to USB C Adapter for iPhone 18 Pro Max,USBC Car Charger Adapter
  • Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
  • Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
  • Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
  • Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
  • 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.

Options accepted by goto()

GoToOptions extends WaitForOptions. That means goto() accepts the inherited waiting and cancellation controls as well as referrer-related fields.

Option What it controls Practical use
waitUntil The navigation lifecycle event or events Puppeteer waits for. The default is 'load'. If you pass an array, every listed event must occur. Choose a lifecycle condition appropriate to the page; use a separate selector or state wait for application-specific readiness.
timeout The maximum wait in milliseconds. The documented default is 30000; 0 disables the timeout. Set a per-navigation limit, or change the page-level default when many operations need the same limit.
signal An AbortSignal that can cancel the call. Use cancellation when your surrounding task has its own abort lifecycle.
referer An optional referrer value. When supplied, it takes precedence over a referer header set using page.setExtraHTTPHeaders(). Set the referrer for this navigation.
referrerPolicy An optional referrer-policy value. Specify the policy for referrer information on the navigation.

Example combining navigation options

const response = await page.goto('https://example.com', {
  waitUntil: 'domcontentloaded',
  timeout: 15000,
  referer: 'https://example.org/',
});

This waits for the chosen lifecycle event, with a 15-second per-call limit, and supplies a referrer. The example does not assert that the returned HTTP status is successful; check response.status() if your task requires that check.

Choosing a navigation wait condition

waitUntil describes browser navigation lifecycle events, not whether a particular application feature is ready. Select the condition that matches what your code needs next.

Use a lifecycle event for navigation progress

The default, 'load', waits for the page’s load event. You may choose another documented lifecycle event when waiting for that event better fits your task. If you pass multiple events in an array, Puppeteer waits until all of them have fired; an array is not an “any one of these” condition.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
Anker USB-C Hub, 5-in-1 USB Hub for Laptops, 4K HDMI Multiport Adapter
  • 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
  • 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
  • Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
  • 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
  • What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.

Wait for a selector when the page’s interface matters

If the next step depends on a particular element appearing, wait for that element explicitly after navigating. For example:

await page.goto('https://example.com/dashboard', {
  waitUntil: 'domcontentloaded',
});

await page.waitForSelector('[data-testid="account-summary"]', {
  visible: true,
});

page.waitForSelector() can wait for a selector to appear and supports visible or hidden conditions. This is a better fit than treating a generic navigation event as proof that an application-specific widget or state is ready.

Use network idle only when network activity is the condition you need

page.waitForNetworkIdle() is a separate wait, not another name for application readiness. Its documented behavior waits at least the configured idle time. A page may be network-idle before the interface state you need is ready, or keep making requests after the relevant interface is ready. Choose based on the condition you actually need to observe.

Coordinate clicks that trigger navigation

When a click starts navigation, start waiting for navigation and perform the click together. Waiting only after the click risks missing a fast navigation.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Sale
Anker USB C Hub, 7in1 Multi-Port USB Adapter, 4K@60Hz USBC to HDMI Splitter
  • Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
  • Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
  • Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
  • Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
  • What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
const [response] = await Promise.all([
  page.waitForNavigation({ waitUntil: 'domcontentloaded' }),
  page.click('a.next-page'),
]);

The response is subject to the same response and status considerations as one returned by goto().

Timeouts and page-level defaults

The documented default navigation timeout is 30,000 milliseconds. Set timeout in the goto() options to bound one navigation differently. Passing timeout: 0 disables that timeout, so the navigation wait no longer has this time limit.

To change the default used by goto() and related navigation operations, call page.setDefaultNavigationTimeout(timeout). Puppeteer documents that this setting also applies to goBack, goForward, reload, setContent, and waitForNavigation. A per-call timeout lets one navigation differ from that page-level default.

page.setDefaultNavigationTimeout(45000);

// This call uses its own 10-second timeout instead.
await page.goto('https://example.com/quick-check', {
  timeout: 10000,
});

Use a finite timeout when your task needs a bounded wait. Disabling the timeout can leave a stalled navigation waiting indefinitely unless some other part of the program cancels or ends it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
Sale
UGREEN USB to USB C Adapter Combo 4-Pack, 10Gbps USB C Converter Space Gray
  • Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
  • Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
  • Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
  • Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
  • Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Common problems and how to handle them

goto() resolves, but the page returned an error status

A completed navigation promise is not a guarantee of a 2xx status. Inspect the returned response with response.status() and handle the status according to your task. Puppeteer’s documentation specifically notes that in headless shell, valid HTTP statuses such as 404 and 500 do not make goto() throw.

The response is null

This is documented for navigation to about:blank and a same-URL navigation that changes only the hash. Do not assume every call produces an HTTPResponse; guard before reading response fields.

The navigation times out

Check whether the page is expected to reach the selected lifecycle event, whether the timeout is appropriate, and whether the page-level navigation timeout is affecting the call. If only a particular element matters, use a lifecycle wait that gets you to the document and then wait for that selector. Raising the timeout changes the bound; setting it to zero removes the bound.

The selector wait times out after navigation

Confirm that the selector matches the page and that the desired element is expected to appear under the current URL and session state. A navigation lifecycle event does not ensure a specific selector will appear. If the element is expected to be hidden or visible, set the selector wait condition accordingly.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
Anker USB C Hub, 5-in-1 USBC to HDMI Splitter with 4K Display
  • 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
  • Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
  • Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
  • HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
  • What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.

A PDF URL will not open in headless shell

Puppeteer documents that headless shell does not support navigation to a PDF document. Do not treat a failed PDF navigation there as an ordinary page-load timing issue.

Or skip the browser setup

If your goal is to save a website screenshot rather than control a Puppeteer page, ScreenshotNeo offers a screenshot API and MCP server. Its one-request API can return an image or PDF; its clean-shot flow accepts consent banners and removes known consent platforms, newsletter popups, and chat widgets before capture. Each of those steps can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers identify the page verdict and billing status. AI agents can use its MCP tools, including take_screenshot, get_page_info, and capture_pdf.

For example, save a WebP screenshot of a URL with cURL:

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

See the ScreenshotNeo API documentation for the request options and setup. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000 screenshots. Sign up for free.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.