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

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

A hand-written preload header can make the browser download each logo twice when the URL in the header differs from the URL the page requests. In a case Daniel Pertu described in 2026, the difference was one query parameter: Vercel’s dpl deployment id. The header listed bare logo paths, the page requested the same files with ?dpl=... appended, and the browser did not reuse the preloaded copies.

What the author observed

Pertu’s post concerns a Next.js site deployed on Vercel. His next.config.mjs adds a response Link header that preloads four above-the-fold SVG logos. In his reported cold-load Network waterfall, each bare-URL request is followed about six milliseconds later by a request to the same path carrying a ?dpl=... parameter. Each pair has identical byte counts, so the same file is transferred twice.

He reports a combined transfer size of 9,617 bytes for the four bare-URL requests on that one cold load. This is a single site and a single load, measured by the author. It is not a benchmark, and it should not be read as the typical saving for other sites.

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

The Console panel also showed four warnings, one per logo, stating that each preloaded resource was not used soon after the page’s load event. Pertu’s description of the duplicate rows and the warnings matches what a developer would see on a page with this mismatch.

Why one query parameter breaks the match

Pertu’s explanation rests on how preload matching works. The browser compares URL strings. A preload hint for /logos/example.svg does not identify the same cached response as a request for /logos/example.svg?dpl=abc123, even though both point to the same file on the same server. The page’s request therefore misses the preload and fetches the file again.

Pertu’s summary of the mechanism is direct: “a preload hint is a string match against a URL, not a promise about a file.”

Rank #2
Sale
HTML and CSS: Design and Build Websites
  • HTML CSS Design and Build Web Sites
  • Comes with secure packaging
  • It can be a gift option

The dpl value is, in his account, Vercel’s deployment id, appended to static asset URLs so that a visitor does not receive a mix of files from different builds. He presents this as the platform’s explanation. The case described here concerns only that parameter. The post mentions CDNs, asset prefixes and image optimizers as systems that can also rewrite URLs, but it does not establish that they cause the same problem, so do not assume it from this case alone.

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

The mismatch comes down to two sets of URLs:

Request source URL form Count on the reported cold load Transfer reported by the author
Hand-written Link response header (preload) Bare path, no dpl 4 9,617 bytes combined
Page’s own image requests Same path with ?dpl=... 4 Identical to the matching bare-URL request in each pair

How to check the same pattern in your own site

Run these steps in Chrome or another Chromium-based browser against the production URL, since the deployment parameter appears only on deployed builds.

  1. Open the page, right-click, choose Inspect, and select the Network tab.
  2. Check Disable cache, then reload the page so that the waterfall reflects a cold load.
  3. Click the top document request. In the Headers tab, scroll to Response Headers and look for a link entry that begins with rel=preload. If it lists image paths without a query string, you have the header described here.
  4. In the filter box, type svg or the image extension your logos use. Look for pairs of rows with the same path, where one row has ?dpl= at the end.
  5. Open the Console tab and look for warnings that a preloaded resource was not used within a short time after the load event.

If the header is present and every preloaded path has a matching ?dpl= request, the mismatch is the likely cause. If you see no duplicate rows, the problem is probably elsewhere, and the header’s URLs may simply be correct for your build.

How to fix it

Pertu recommends removing the hand-written header. In his described setup, Next.js already emits preload links in the document for eager images, and those links use URLs that carry the deployment id. The manual header adds a second, mismatched set of preloads.

Rank #4
Sale
Web Design with HTML, CSS, JavaScript and jQuery Set
  • Brand: Wiley
  • Set of 2 Volumes
  • A handy two-book set that uniquely combines related technologies Highly visual format and accessible language makes these books highly effective learning tools Perfect for beginning web designers and front-end developers
  1. Open next.config.mjs and locate the headers() function.
  2. Find the entry whose source covers the page and whose headers array contains a Link value with rel=preload for the logo files.
  3. Delete that header entry. Leave unrelated headers, such as caching or security headers, in place.
  4. Deploy the change, then repeat the DevTools check above on the new deployment.
  5. Confirm that the document response no longer carries the logo Link header, and that each logo appears once in the Network waterfall, with the ?dpl= URL.

If the duplicate rows disappear and the four unused-preload warnings stop, the fix has worked for that page. If the logos still load twice, check whether a second preload source, such as a <link rel="preload"> tag added in application code, is using bare URLs.

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

What the evidence does and does not show

  • It shows that a preload is matched by URL string, and that a bare path and a ?dpl= path are treated as different requests in the author’s case.
  • It shows one site’s cold-load Network waterfall and Console output, as reported by Pertu in 2026.
  • It does not show how much time or bandwidth the mismatch costs on typical sites, on other networks, or on other devices.
  • It does not show that other frameworks, hosts or CDNs produce the same mismatch.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

When this pattern is worth checking

  • You maintain a preload or Link header by hand in a config file while the framework also generates preloads.
  • Your deployment platform appends a build or version parameter to static asset URLs.
  • Your Network panel shows the same file twice on a cold load, with one copy under a path that lacks a query string.

If none of these apply, a duplicate request has a different cause, and this fix will not address it.

Pertu’s post is the source for the measurements and for the explanation of the dpl parameter. Use it as a worked example of how to read the Network and Console panels, and check the URLs on your own deployment before changing any headers.

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.