{"id":15759,"date":"2026-11-11T08:05:00","date_gmt":"2026-11-11T07:05:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=15759"},"modified":"2026-10-26T12:52:42","modified_gmt":"2026-10-26T11:52:42","slug":"blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\/","title":{"rendered":"Blocking Scripts: What Twenty HTML Responses Reveal\u2014and What They Do Not"},"content":{"rendered":"<p>A script\u2019s position in HTML can help locate a dependency problem. It cannot measure the resulting delay or prove which elements exist at execution time. A historical sample of twenty responses illustrates both the value and the limits of static analysis.<\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-15759-parser-blocking-20261024-en.png\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"745 detected tags, 660 classified records; no timing measurement.\"><figcaption>745 detected tags, 660 classified records; no timing measurement.<\/figcaption><\/figure>\n<h2>745 tags found, 660 classified<\/h2>\n<p>The saved measurement from 6 September 2026 at 14:26:11 +02:00 contains 745 detected script tags, averaging 37.25 per response. Only 660 received detailed classifications: 283 blocking, 230 data, 70 async, 52 defer and 25 module.<\/p>\n<p>The difference is a limit in the analyzer. It retains at most 120 script records per document. ZEIT supplied 205 detected tags, leaving 85 outside the detailed count. Its reported last blocking position therefore applies only to the first 120 records.<\/p>\n<h2>Responses are not always front pages<\/h2>\n<p>The Stack Overflow response had status 429 and the Allegro response 403. Their one and two detected tags belong to those returned documents, not verified normal front pages. The sample is historical and selected, not a current performance ranking.<\/p>\n<p>GitHub\u2019s response had eight module records and six data records, with no blocking classification. That does not establish uninterrupted parsing, completed layout or freedom from expensive JavaScript. Sixteen responses had a blocking classification before the detected closing head tag; this is a location finding, not a measured first-paint penalty.<\/p>\n<h2>Loading rules need their conditions<\/h2>\n<p>For parser-inserted classic scripts, an external script without async or defer normally pauses parsing for loading and execution. defer postpones execution until parsing ends; async removes the wait for fetching, but execution can still occupy the main thread. Neither attribute changes an inline classic script\u2019s timing.<\/p>\n<p>Modules are deferred by default, including inline modules; async also applies to modules. Data blocks, import maps and speculation rules are distinct cases. nomodule, Content Security Policy (CSP), failed fetches and the insertion method can prevent or change execution. Five analyzer buckets are therefore not a complete browser model.<\/p>\n<h2>Byte position is not DOM completeness<\/h2>\n<p>Thirteen recorded positions round to 95\u2013100 percent. Three, not four, are below 50 percent; the Bund result is 55 percent. The ZEIT value of 42 percent is limited by the 120-record cap. Heise\u2019s recorded position is 6,016 within 943,607 bytes, leaving 937,591 bytes from the opening script tag onward.<\/p>\n<p>That remainder includes the script itself. The document object model (DOM) is the browser\u2019s structured representation of page elements. The remaining byte count does not show exactly which of those elements are unavailable when the script executes. Earlier code can add or remove nodes, HTML parsing can rearrange structure, and later callbacks run at different times. A speculative scanner can also fetch resources beyond a paused main parser.<\/p>\n<h2>Network cost requires a browser trace<\/h2>\n<p>Seven responses have a blocking classification with a different normalized hostname. The comparison removes www and ignores scheme and port; it identifies neither every cross-origin request nor third-party ownership. Three have no detected preconnect anywhere, which says nothing about host-specific hint coverage on the others.<\/p>\n<p>The saved LukasWojcik result places stub.js at 96 percent, with 3,082 bytes remaining from its tag. No elapsed delay was measured. Cache hits, existing connections and speculative loading can avoid new setup work. An inline stub removes its separate fetch, but still executes code and needs to satisfy the applicable CSP.<\/p>\n<h2>What the analyzer can establish<\/h2>\n<p>The linked analyzer inspects up to 3 MiB of fetched HTML without executing it. Eleven local fixtures exposed limits: script-like text in comments or templates is counted, nomodule still enters the blocking bucket, inline async modules enter the module bucket, and an empty integrity attribute counts as present.<\/p>\n<p>The document.write finding is a text match in inline content, not proof of a call. The API can insert into the parser stream, be ignored or replace a document depending on context. Likewise, Subresource Integrity (SRI) needs usable integrity metadata and appropriate cross-origin access, not merely an attribute name.<\/p>\n<p><a href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/script-loading-execution-order-analyzer\/\">Script Loading and Execution Order Analyzer<\/a><\/p>\n<div class=\"lw-faq\">\n<h2>Questions and answers<\/h2>\n<h3>How can a loading change be checked?<\/h3>\n<p>Browser performance traces before and after a change need comparable cache and network conditions. Resource timing, main-thread work and rendering provide the performance evidence; dependent code and consent behaviour need functional tests. Static counts identify candidates for investigation; the trace measures the effect.<\/p>\n<h3>Can a consent stub simply receive defer or async?<\/h3>\n<p>A consent stub is a small placeholder script that queues calls until the full consent software loads. Changing its loading order requires checking every dependency. A queue must exist before code uses it; changing timing can break that contract. An inline copy also needs a maintained update process. preconnect and preload may reduce waiting, but provide no fixed saving or exemption from execution cost.<\/p>\n<\/div>\n<div class=\"lw-quellen\">\n<h2>Sources<\/h2>\n<ul>\n<li><a href=\"https:\/\/html.spec.whatwg.org\/multipage\/scripting.html\" target=\"_blank\" rel=\"noopener noreferrer\">HTML script processing<\/a><\/li>\n<li><a href=\"https:\/\/html.spec.whatwg.org\/multipage\/dynamic-markup-insertion.html\" target=\"_blank\" rel=\"noopener noreferrer\">document.write<\/a><\/li>\n<li><a href=\"https:\/\/html.spec.whatwg.org\/multipage\/links.html\" target=\"_blank\" rel=\"noopener noreferrer\">Resource hints<\/a><\/li>\n<li><a href=\"https:\/\/web.dev\/articles\/preload-scanner\" target=\"_blank\" rel=\"noopener noreferrer\">Speculative resource discovery<\/a><\/li>\n<li><a href=\"https:\/\/www.w3.org\/TR\/sri\/\" target=\"_blank\" rel=\"noopener noreferrer\">Subresource Integrity<\/a><\/li>\n<li><a href=\"https:\/\/developer.chrome.com\/docs\/devtools\/performance\/overview\" target=\"_blank\" rel=\"noopener noreferrer\">Browser performance traces<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>The historical sample found 745 tags but classified only 660. Response status, a 120-record limit and browser execution rules explain why byte positions cannot serve as performance measurements.<\/p>\n","protected":false},"author":1,"featured_media":24941,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[158],"tags":[91219,92757,91315],"class_list":["post-15759","post","type-post","status-publish","format-standard","hentry","category-tutorials-en-web-development","tag-tutorial","tag-web-development","tag-web-performance"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Blocking Scripts: What Twenty HTML Responses Reveal\u2014and What They Do Not | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"660 script tags on twenty front pages sorted into blocking, defer, async, module and data; where the parser stops last, and the one page that never stops it.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Blocking Scripts: What Twenty HTML Responses Reveal\u2014and What They Do Not | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"660 script tags on twenty front pages sorted into blocking, defer, async, module and data; where the parser stops last, and the one page that never stops it.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-11T07:05:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-15759-parser-blocking-20261025-dark.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Blocking Scripts: What Twenty HTML Responses Reveal\u2014and What They Do Not\",\"datePublished\":\"2026-11-11T07:05:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\\\/\"},\"wordCount\":787,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-15759-parser-blocking-20261025-dark.png\",\"keywords\":[\"Tutorial\",\"Web Development\",\"Web Performance\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\\\/\",\"name\":\"Blocking Scripts: What Twenty HTML Responses Reveal\u2014and What They Do Not | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-15759-parser-blocking-20261025-dark.png\",\"datePublished\":\"2026-11-11T07:05:00+00:00\",\"description\":\"660 script tags on twenty front pages sorted into blocking, defer, async, module and data; where the parser stops last, and the one page that never stops it.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-15759-parser-blocking-20261025-dark.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-15759-parser-blocking-20261025-dark.png\",\"width\":1200,\"height\":630,\"caption\":\"Blocking Scripts: What Twenty HTML Responses Reveal\u2014and What They Do Not\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blocking Scripts: What Twenty HTML Responses Reveal\u2014and What They Do Not\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Blocking Scripts: What Twenty HTML Responses Reveal\u2014and What They Do Not | Lukas Wojcik","description":"660 script tags on twenty front pages sorted into blocking, defer, async, module and data; where the parser stops last, and the one page that never stops it.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\/","og_locale":"en_US","og_type":"article","og_title":"Blocking Scripts: What Twenty HTML Responses Reveal\u2014and What They Do Not | Lukas Wojcik","og_description":"660 script tags on twenty front pages sorted into blocking, defer, async, module and data; where the parser stops last, and the one page that never stops it.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-11-11T07:05:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-15759-parser-blocking-20261025-dark.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Blocking Scripts: What Twenty HTML Responses Reveal\u2014and What They Do Not","datePublished":"2026-11-11T07:05:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\/"},"wordCount":787,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-15759-parser-blocking-20261025-dark.png","keywords":["Tutorial","Web Development","Web Performance"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\/","name":"Blocking Scripts: What Twenty HTML Responses Reveal\u2014and What They Do Not | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-15759-parser-blocking-20261025-dark.png","datePublished":"2026-11-11T07:05:00+00:00","description":"660 script tags on twenty front pages sorted into blocking, defer, async, module and data; where the parser stops last, and the one page that never stops it.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-15759-parser-blocking-20261025-dark.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-15759-parser-blocking-20261025-dark.png","width":1200,"height":630,"caption":"Blocking Scripts: What Twenty HTML Responses Reveal\u2014and What They Do Not"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/blocking-scripts-what-twenty-html-responses-reveal-and-what-they-do-not\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Blocking Scripts: What Twenty HTML Responses Reveal\u2014and What They Do Not"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/15759","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=15759"}],"version-history":[{"count":6,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/15759\/revisions"}],"predecessor-version":[{"id":27104,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/15759\/revisions\/27104"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/24941"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=15759"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=15759"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=15759"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}