PageSourceSearch

https://stack.hu/sitemap-generator

html stack.hu collected 2026-10-02 03:10:46 UTC 25,887 bytes, 566 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4  <meta charset="UTF-8" />
5  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6  <title>Fast Sitemap Generator — Free sitemap.xml Generator for Any Website</title>
7  <meta name="description" content="Fast sitemap generator. Enter any domain and instantly crawl up to 200 pages to produce a ready-to-submit sitemap.xml. No account needed — paste a URL and download." />
8  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tabler/[email protected]/dist/tabler-icons.min.css" />
9  <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><rect width='32' height='32' rx='8' fill='%23534AB7'/><rect x='7' y='8' width='18' height='4' rx='2' fill='%23EEEDFE'/><rect x='7' y='14' width='18' height='4' rx='2' fill='%23AFA9EC'/><rect x='7' y='20' width='18' height='4' rx='2' fill='%237F77DD'/></svg>" />
10	
10<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5595808001740123" crossorigin="anonymous"></script>
10
11    
11<script defer data-site="thqmc3iy" src="https://piqo.app/piqo.js"></script>
11
12  <style>
13    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
14
15    body {
16      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
17      background: #f5f5f3;
18      min-height: 100vh;
19      padding: 2rem 1rem 4rem;
20      color: #1a1a1a;
21    }
22
23    .page { max-width: 560px; margin: 0 auto; }
24
25    /* ── Header ── */
26    .header { text-align: center; margin-bottom: 2rem; }
27
28    .back-link {
29      display: inline-flex;
30      align-items: center;
31      gap: 5px;
32      font-size: 12px;
33      color: #888;
34      text-decoration: none;
35      margin-bottom: 1.25rem;
36      transition: color 0.12s;
37    }
38    .back-link:hover { color: #534AB7; }
39
40    .avatar {
41      width: 76px; height: 76px;
42      border-radius: 50%;
43      background: #534AB7;
44      display: flex; align-items: center; justify-content: center;
45      margin: 0 auto 0.75rem;
46      border: 3px solid #AFA9EC;
47    }
48    .avatar span { font-size: 22px; font-weight: 800; color: #EEEDFE; letter-spacing: -1px; }
49
50    .name { font-size: 22px; font-weight: 700; color: #1a1a1a; margin-bottom: 0.25rem; }
51    .bio  { font-size: 13px; color: #666; }
52
53    /* ── Search card ── */
54    .search-card {
55      background: #fff;
56      border-radius: 16px;
57      padding: 20px;
58      border: 0.5px solid #e0e0dc;
59      margin-bottom: 16px;
60    }
61
62    .search-row { display: flex; gap: 8px; }
63
64    .url-input {
65      flex: 1; height: 44px;
66      border: 1.5px solid #ddd;
67      border-radius: 10px;
68      padding: 0 14px;
69      font-size: 14px;
70      font-family: inherit;
71      color: #1a1a1a;
72      background: #fafafa;
73      outline: none;
74      transition: border-color 0.15s;
75    }
76    .url-input:focus { border-color: #534AB7; background: #fff; }
77    .url-input::placeholder { color: #bbb; }
78
79    .check-btn {
80      height: 44px; padding: 0 18px;
81      background: #534AB7; color: #EEEDFE;
82      border: none; border-radius: 10px;
83      font-size: 14px; font-weight: 600; font-family: inherit;
84      cursor: pointer;
85      display: flex; align-items: center; gap: 6px;
86      transition: background 0.15s, transform 0.1s;
87      white-space: nowrap;
88    }
89    .check-btn:hover  { background: #4239a6; }
90    .check-btn:active { transform: scale(0.97); }
91    .check-btn:disabled { background: #AFA9EC; cursor: not-allowed; transform: none; }
92
93    /* ── Examples ── */
94    .examples { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; }
95    .example-chip {
96      font-size: 11px;
97      background: #EEEDFE; color: #534AB7;
98      border: 0.5px solid #AFA9EC;
99      border-radius: 20px; padding: 3px 10px;
100      cursor: pointer; transition: background 0.12s;
101    }
102    .example-chip:hover { background: #DDD9FC; }
103
104    /* ── Error ── */
105    .error-msg {
106      background: #FFF0F0; border: 0.5px solid #F5BCBC;
107      border-radius: 10px; padding: 12px 14px;
108      font-size: 13px; color: #9B2727;
109      margin-bottom: 16px;
110      display: flex; align-items: center; gap: 8px;
111    }
112
113    /* ── Stats row (result header) ── */
114    .result-card {
115      background: #fff;
116      border-radius: 16px;
117      border: 0.5px solid #e0e0dc;
118      padding: 12px 18px;
119      margin-bottom: 16px;
120    }
121    .result-summary {
122      font-size: 13px; color: #888;
123      display: flex; flex-wrap: wrap; align-items: center; gap: 4px;
124    }
125    .result-summary strong { color: #1a1a1a; }
126    .result-sep { color: #ddd; }
127    .result-stat { color: #555; }
128    .result-time { color: #aaa; font-size: 12px; }
129    .badge {
130      display: inline-flex; align-items: center; gap: 5px;
131      font-size: 11px; font-weight: 600;
132      padding: 3px 10px; border-radius: 20px;
133    }
134    .badge-header { background: #CCFBF1; color: #0F766E; border: 0.5px solid #0D948840; }
135    .badge-html   { background: #FEF3C7; color: #92400E; border: 0.5px solid #D9770640; }
136    .badge-error  { background: #FEE2E2; color: #991B1B; border: 0.5px solid #DC262640; }
137    .badge-skip   { background: #F3F4F6; color: #6B7280; border: 0.5px solid #9CA3AF40; }
138
139    /* ── Page list ── */
140    .pages-card {
141      background: #fff;
142      border-radius: 16px;
143      border: 0.5px solid #e0e0dc;
144      padding: 20px 20px 8px;
145      margin-bottom: 16px;
146    }
147    .pages-card h3 {
148      font-size: 12px; font-weight: 700;
149      text-transform: uppercase; letter-spacing: 0.08em;
150      color: #aaa; margin-bottom: 10px;
151    }
152    .page-item {
153      display: flex; align-items: center; justify-content: space-between;
154      padding: 7px 0;
155      border-bottom: 1px solid #f5f5f3;
156      gap: 8px;
157    }
158    .page-item:last-child { border-bottom: none; }
159    .page-url {
160      font-size: 12px; color: #534AB7;
161      word-break: break-all; flex: 1;
162      font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', monospace;
163      text-decoration: none;
164      text-underline-offset: 2px;
165    }
166    .page-url:hover { text-decoration: underline; }
167    .page-status {
168      font-size: 11px; font-weight: 700;
169      min-width: 32px; text-align: right; flex-shrink: 0;
170    }
171    .status-2xx { color: #10B981; }
172    .status-3xx { color: #F59E0B; }
173    .status-4xx { color: #EF4444; }
174    .status-5xx { color: #DC2626; }
175    .status-err { color: #9CA3AF; }
176
177    .page-src {
178      font-size: 10px; font-weight: 600;
179      min-width: 44px; text-align: right; flex-shrink: 0;
180    }
181    .src-header { color: #0D9488; }
182    .src-html   { color: #D97706; }
183    .src-error  { color: #9CA3AF; }
184
185    /* ── Share / download card ── */
186    .share-card {
187      background: #fff;
188      border-radius: 16px;
189      border: 0.5px solid #e0e0dc;
190      padding: 16px 20px;
191      margin-bottom: 16px;
192    }
193    .share-label {
194      font-size: 10px; font-weight: 700;
195      text-transform: uppercase; letter-spacing: 0.08em;
196      color: #aaa; margin-bottom: 8px;
197    }
198    .share-row { display: flex; gap: 8px; flex-wrap: wrap; }
199
200    .share-btn {
201      height: 36px; padding: 0 14px;
202      border: 0.5px solid #e0e0dc;
203      border-radius: 8px;
204      background: #fff;
205      font-size: 12px; font-weight: 600;
206      font-family: inherit;
207      color: #444;
208      cursor: pointer;
209      display: flex; align-items: center; gap: 5px;
210      transition: background 0.12s, border-color 0.12s;
211      white-space: nowrap;
212      text-decoration: none;
213    }
214    .share-btn:hover { background: #f5f5f3; border-color: #ccc; }
215    .share-btn.primary { background: #534AB7; color: #EEEDFE; border-color: #534AB7; }
216    .share-btn.primary:hover { background: #4239a6; }
217    .share-btn.copied { background: #EEEDFE; color: #534AB7; border-color: #AFA9EC; }
218    .share-btn i { font-size: 14px; }
219
220    /* ── XML preview ── */
221    .xml-card {
222      background: #fff;
223      border-radius: 16px;
224      border: 0.5px solid #e0e0dc;
225      padding: 16px 20px;
226      margin-bottom: 16px;
227    }
228    .xml-card h3 {
229      font-size: 12px; font-weight: 700;
230      text-transform: uppercase; letter-spacing: 0.08em;
231      color: #aaa; margin-bottom: 10px;
232    }
233    .xml-pre {
234      background: #f5f5f3;
235      border-radius: 8px;
236      padding: 12px;
237      font-size: 11px;
238      font-family: ui-monospace, 'Cascadia Code', monospace;
239      color: #555;
240      overflow-x: auto;
241      white-space: pre;
242      max-height: 260px;
243      overflow-y: auto;
244      line-height: 1.55;
245      border: 1px solid #eee;
246    }
247
248    /* ── Content cards ── */
249    .content-card {
250      background: #fff;
251      border-radius: 16px;
252      border: 0.5px solid #e0e0dc;
253      padding: 24px;
254      margin-bottom: 16px;
255    }
256    .content-card h2 {
257      font-size: 16px; font-weight: 700; color: #1a1a1a;
258      margin-bottom: 12px;
259      display: flex; align-items: center; gap: 8px;
260    }
261    .content-card h2 i { color: #534AB7; font-size: 18px; }
262    .content-card p { font-size: 13.5px; color: #555; line-height: 1.65; margin-bottom: 10px; }
263    .content-card p:last-child { margin-bottom: 0; }
264
265    /* ── FAQ ── */
266    .faq-item { border-bottom: 1px solid #f0f0ee; }
267    .faq-item:last-child { border-bottom: none; }
268    .faq-q {
269      width: 100%; background: none; border: none;
270      text-align: left; font-family: inherit;
271      font-size: 13.5px; font-weight: 600; color: #1a1a1a;
272      padding: 14px 0; cursor: pointer;
273      display: flex; justify-content: space-between; align-items: center; gap: 12px;
274    }
275    .faq-q:hover { color: #534AB7; }
276    .faq-q i { font-size: 16px; color: #aaa; flex-shrink: 0; transition: transform 0.2s; }
277    .faq-item.open .faq-q i { transform: rotate(180deg); color: #534AB7; }
278    .faq-a {
279      font-size: 13px; color: #666; line-height: 1.65;
280      max-height: 0; overflow: hidden;
281      transition: max-height 0.3s ease, padding-bottom 0.3s;
282    }
283    .faq-item.open .faq-a { max-height: 400px; padding-bottom: 14px; }
284
285    /* ── Loading overlay ── */
286    .loading-overlay {
287      display: none;
288      position: fixed; inset: 0;
289      background: rgba(245,245,243,0.85);
290      z-index: 100;
291      align-items: center; justify-content: center;
292      flex-direction: column; gap: 12px;
293    }
294    .loading-overlay.visible { display: flex; }
295    .spinner-lg {
296      width: 36px; height: 36px;
297      border: 3px solid #AFA9EC;
298      border-top-color: #534AB7;
299      border-radius: 50%;
300      animation: spin 0.7s linear infinite;
301    }
302    .loading-text { font-size: 13px; color: #666; font-weight: 500; }
303    @keyframes spin { to { transform: rotate(360deg); } }
304
305    /* ── Recent crawls card ── */
306    .recent-card {
307      background: #fff;
308      border-radius: 16px;
309      border: 0.5px solid #e0e0dc;
310      padding: 20px 20px 12px;
311      margin-bottom: 16px;
312    }
313    .recent-card h3 {
314      font-size: 12px; font-weight: 700;
315      text-transform: uppercase; letter-spacing: 0.08em;
316      color: #aaa; margin-bottom: 10px;
317      display: flex; align-items: center; gap: 6px;
318    }
319    .recent-item {
320      display: flex; align-items: center; justify-content: space-between;
321      padding: 7px 6px;
322      border-bottom: 1px solid #f5f5f3;
323      border-radius: 6px;
324      margin: 0 -6px;
325      cursor: default;
326      transition: background 0.1s;
327      gap: 8px;
328    }
329    .recent-item:last-child { border-bottom: none; }
330    .recent-item:hover { background: #f9f9f7; }
331    .recent-domain {
332      font-size: 13px; font-weight: 500; color: #3B82F6; flex: 1;
333    }
334    .recent-right { display: flex; align-items: center; gap: 10px; flex-shrink: 0; }
335    .recent-urls {
336      font-size: 13px; font-weight: 700; min-width: 28px; text-align: right;
337    }
338    .recent-time { font-size: 11px; color: #bbb; min-width: 56px; text-align: right; }
339    .recent-empty { font-size: 13px; color: #bbb; text-align: center; padding: 10px 0; }
340
341    /* ── Footer ── */
342    .footer { text-align: center; font-size: 11px; color: #bbb; margin-top: 20px; }
343    .footer a { color: #AFA9EC; text-decoration: none; }
344    .footer a:hover { text-decoration: underline; }
345  </style>
346</head>
347<body>
348
349<!-- Loading overlay (shown on form submit) -->
350<div class="loading-overlay" id="loadingOverlay">
351  <div class="spinner-lg"></div>
352  <div class="loading-text">Crawling pages…</div>
353</div>
354
355<div class="page">
356
357  <!-- Header -->
358  <div class="header">
359    <a class="back-link" href="/"><i class="ti ti-arrow-left"></i> stack.hu</a>
360    <a href="/sitemap-generator" style="display:block;text-decoration:none;">
361      <div class="avatar"><span>SM</span></div>
362    </a>
363    <p class="name">Fast Sitemap Generator</p>
364    <p class="bio">Header-first crawling — fast, no HTML parsing when possible</p>
365  </div>
366
367  <!-- Search card -->
368  <div class="search-card">
369    <form method="POST" action="" onsubmit="showLoading()">
370      <div class="search-row">
371        <input
372          class="url-input"
373          name="domain"
374          type="text"
375          placeholder="https://example.com"
376          autocomplete="off"
377          spellcheck="false"
378          value=""
379          required
380        />
381        <button class="check-btn" type="submit">
382          <i class="ti ti-sitemap"></i>
383          <span>Generate</span>
384        </button>
385      </div>
386      <div class="examples">
387        <span class="example-chip" onclick="fillAndSubmit('jimpl.com')">jimpl.com</span>
388        <span class="example-chip" onclick="fillAndSubmit('hexeditor.com')">hexeditor.com</span>
389        <span class="example-chip" onclick="fillAndSubmit('stack.hu')">stack.hu</span>
390      </div>
391    </form>
392  </div>
393
394  
395  
396  
397  <!-- Recently checked -->
398  <div class="recent-card">
399    <h3><i class="ti ti-history" style="font-size:13px;color:#aaa"></i> Recently checked</h3>
400            <div class="recent-item">
401      <span class="recent-domain">jimpl.com</span>
402      <span class="recent-right">
403        <span class="recent-urls" style="color:#10B981">8</span>
404        <span class="recent-time">2d ago</span>
405      </span>
406    </div>
407        <div class="recent-item">
408      <span class="recent-domain">avrswarnamahal.com</span>
409      <span class="recent-right">
410        <span class="recent-urls" style="color:#10B981">0</span>
411        <span class="recent-time">9d ago</span>
412      </span>
413    </div>
414        <div class="recent-item">
415      <span class="recent-domain">andj.)('),(,,&quot;</span>
416      <span class="recent-right">
417        <span class="recent-urls" style="color:#10B981">0</span>
418        <span class="recent-time">18d ago</span>
419      </span>
420    </div>
421        <div class="recent-item">
422      <span class="recent-domain">andj'kdaaqp&lt;'&quot;&gt;)ofdbpl</span>
423      <span class="recent-right">
424        <span class="recent-urls" style="color:#10B981">0</span>
425        <span class="recent-time">18d ago</span>
426      </span>
427    </div>
428        <div class="recent-item">
429      <span class="recent-domain">andj</span>
430      <span class="recent-right">
431        <span class="recent-urls" style="color:#10B981">0</span>
432        <span class="recent-time">18d ago</span>
433      </span>
434    </div>
435        <div class="recent-item">
436      <span class="recent-domain">stack.hu</span>
437      <span class="recent-right">
438        <span class="recent-urls" style="color:#10B981">113</span>
439        <span class="recent-time">21d ago</span>
440      </span>
441    </div>
442        <div class="recent-item">
443      <span class="recent-domain">b2b.cellect.hu</span>
444      <span class="recent-right">
445        <span class="recent-urls" style="color:#10B981">201</span>
446        <span class="recent-time">28d ago</span>
447      </span>
448    </div>
449        <div class="recent-item">
450      <span class="recent-domain">cellect.hu</span>
451      <span class="recent-right">
452        <span class="recent-urls" style="color:#10B981">0</span>
453        <span class="recent-time">28d ago</span>
454      </span>
455    </div>
456        <div class="recent-item">
457      <span class="recent-domain">flow.depto.in</span>
458      <span class="recent-right">
459        <span class="recent-urls" style="color:#10B981">185</span>
460        <span class="recent-time">36d ago</span>
461      </span>
462    </div>
463        <div class="recent-item">
464      <span class="recent-domain">oplive.in</span>
465      <span class="recent-right">
466        <span class="recent-urls" style="color:#10B981">1</span>
467        <span class="recent-time">36d ago</span>
468      </span>
469    </div>
470          </div>
471
472  <!-- What is a sitemap -->
473  <div class="content-card">
474    <h2><i class="ti ti-map"></i> What is a sitemap?</h2>
475    <p>A sitemap is a file — usually named <code style="background:#f5f5f3;padding:1px 5px;border-radius:4px;font-size:12px">sitemap.xml</code> — that lists all the important URLs on your website. It tells search engine crawlers like Googlebot exactly which pages exist, so they don't have to discover everything by following links alone.</p>
476    <p>The most common format is the <strong>XML sitemap</strong>, defined by the <a href="https://www.sitemaps.org/protocol.html" target="_blank" rel="noopener" style="color:#534AB7">Sitemaps protocol</a>. Each entry is a <code>&lt;url&gt;</code> element containing at minimum a <code>&lt;loc&gt;</code> tag with the full page address. You can optionally add <code>&lt;lastmod&gt;</code> (last modified date), <code>&lt;changefreq&gt;</code>, and <code>&lt;priority&gt;</code> hints, though Google has stated it mostly uses <code>&lt;loc&gt;</code> and <code>&lt;lastmod&gt;</code>.</p>
477    <p>Once generated, place the file at <code>https://yourdomain.com/sitemap.xml</code> and submit it via <strong>Google Search Console</strong> under Indexing → Sitemaps. This is the most reliable way to ensure all your pages are discovered and indexed — especially new content, deep pages, or URLs that aren't well linked internally.</p>
478  </div>
479
480  <!-- Info cards (always visible) -->
481  <div class="content-card">
482    <h2><i class="ti ti-info-circle"></i> How it works</h2>
483    <p>This tool uses a <strong>header-first crawling</strong> technique inspired by <a href="https://metehan.ai/blog/http-headers-internal-links/" target="_blank" rel="noopener" style="color:#534AB7">Metehan Yesilyurt's experiment</a> at SEO Week 2026. HTTP response headers travel before any HTML body — and some servers publish structured link data there.</p>
484    <p>For each page the crawler checks for an <code style="background:#f5f5f3;padding:1px 5px;border-radius:4px;font-size:12px">X-Internal-Links</code> header containing a base64url-encoded JSON array of internal URLs. If found, link discovery happens with <strong>zero HTML parsing</strong> — just decode and go. If the header is absent, it falls back to scanning <code>&lt;a href&gt;</code> tags in the page body as usual.</p>
485    <p>The result is a standard <code>sitemap.xml</code> file you can submit to Google Search Console or place at <code>yourdomain.com/sitemap.xml</code>.</p>
486  </div>
487
488  <div class="content-card">
489    <h2><i class="ti ti-bolt"></i> Speed via the X-Internal-Links header</h2>
490    <p>The article describes crawling 65,000 pages in <strong>99 seconds</strong> by reading only HTTP headers. When a server publishes <code>X-Internal-Links</code>, a crawler can discover all internal links on a page without downloading or parsing the full HTML — the links arrive as compact JSON in the header, before even one byte of body is sent.</p>
491    <p>Most sites today don't emit this header yet, so the tool falls back to HTML parsing. You can add it to your own site using a Cloudflare Worker, nginx <code>add_header</code>, or PHP <code>header()</code> — see the <a href="https://github.com/metehan777/http-header-link-graph" target="_blank" rel="noopener" style="color:#534AB7">open-source code on GitHub</a>.</p>
492  </div>
493
494  <div class="content-card">
495    <h2><i class="ti ti-help-circle"></i> Frequently Asked Questions</h2>
496
497    <div class="faq-item">
498      <button class="faq-q" onclick="toggleFaq(this)">Do I need a sitemap if my site is well linked?<i class="ti ti-chevron-down"></i></button>
499      <div class="faq-a">Even on a tightly linked site, a sitemap is still worth having. Search engines use it as a cross-check: if a page isn't reachable by following links from the homepage within a few clicks, the sitemap is often its only guaranteed path to being crawled. It also tells Google when pages were last updated, which helps with recrawl scheduling for frequently changing content.</div>
500    </div>
501    <div class="faq-item">
502      <button class="faq-q" onclick="toggleFaq(this)">Where should I put my sitemap.xml?<i class="ti ti-chevron-down"></i></button>
503      <div class="faq-a">The standard location is the root of your domain: <code>https://yourdomain.com/sitemap.xml</code>. You should also reference it in your <code>robots.txt</code> file with a line like <code>Sitemap: https://yourdomain.com/sitemap.xml</code> — this lets any crawler discover it automatically, without you having to submit it manually to each search engine.</div>
504    </div>
505    <div class="faq-item">
506      <button class="faq-q" onclick="toggleFaq(this)">How often should I update my sitemap?<i class="ti ti-chevron-down"></i></button>
507      <div class="faq-a">Regenerate your sitemap whenever you add, remove, or significantly update pages. For blogs or e-commerce sites that publish frequently, a daily or weekly regeneration is typical. Static sites can get away with updating it only when content changes. The <code>&lt;lastmod&gt;</code> tag is useful here: Google uses it to decide whether to recrawl a URL, so keeping it accurate matters more than regenerating on a fixed schedule.</div>
508    </div>
509    <div class="faq-item">
510      <button class="faq-q" onclick="toggleFaq(this)">Why is there a limit of 200 pages?<i class="ti ti-chevron-down"></i></button>
511      <div class="faq-a">PHP processes requests synchronously, so large crawls run in a single thread. The 200-page cap keeps the request within server time limits. For bigger sites, run this from the command line or split the crawl by section. Depth is also capped at 4 clicks from the homepage.</div>
512    </div>
513    <div class="faq-item">
514      <button class="faq-q" onclick="toggleFaq(this)">What does "Via Header" mean in the stats?<i class="ti ti-chevron-down"></i></button>
515      <div class="faq-a">"Via Header" counts pages where the <code>X-Internal-Links</code> HTTP response header was present and decoded successfully. For those pages, no HTML body parsing was needed at all — links were extracted directly from the header. "Via HTML" means the header was absent and the tool fell back to parsing <code>&lt;a href&gt;</code> tags in the page body.</div>
516    </div>
517    <div class="faq-item">
518      <button class="faq-q" onclick="toggleFaq(this)">Does this crawl JavaScript-rendered pages?<i class="ti ti-chevron-down"></i></button>
519      <div class="faq-a">No — the crawler fetches raw HTTP responses without a headless browser, so JavaScript-rendered links won't be discovered via HTML parsing. However, if a site publishes <code>X-Internal-Links</code> headers (as the article proposes), those links are visible even on JS-heavy pages, because headers are sent before any script runs.</div>
520    </div>
521    <div class="faq-item">
522      <button class="faq-q" onclick="toggleFaq(this)">Will this respect robots.txt?<i class="ti ti-chevron-down"></i></button>
523      <div class="faq-a">Currently this tool does not parse <code>robots.txt</code>. It only crawls pages on the same domain you entered and does not follow external links. Use the generated sitemap only for sites you own or have permission to crawl.</div>
524    </div>
525    <div class="faq-item">
526      <button class="faq-q" onclick="toggleFaq(this)">Why are some pages missing from the sitemap?<i class="ti ti-chevron-down"></i></button>
527      <div class="faq-a">
527Pages can be missed if they are only reachable via JavaScript navigation, if they are deeper than 4 clicks from the homepage, if the total page budget of 200 was reached, or if the server returned a 4xx/5xx error. Only 2xx HTTP responses are included in the final sitemap.xml.</div>
528    </div>
529  </div>
530
531  
532  <!-- Footer -->
533  <p class="footer">
534    Technique by <a href="https://metehan.ai/blog/http-headers-internal-links/" target="_blank" rel="noopener">Metehan Yesilyurt</a> &middot;
535    <a href="https://stack.hu/">stack.hu</a>
536  </p>
537
538</div><!-- /page -->
539
540<script>
541  function showLoading() {
542    document.getElementById('loadingOverlay').classList.add('visible');
543  }
544  function fillAndSubmit(domain) {
545    document.querySelector('input[name="domain"]').value = domain;
546    showLoading();
547    document.querySelector('form').submit();
548  }
549  function toggleFaq(btn) {
550    btn.closest('.faq-item').classList.toggle('open');
551  }
552  function copyXml() {
553    var xml = document.getElementById('xmlPreview').textContent;
554    navigator.clipboard.writeText(xml).then(function() {
555      var btn = document.getElementById('copyXmlBtn');
556      btn.classList.add('copied');
557      document.getElementById('copyXmlLabel').textContent = 'Copied!';
558      setTimeout(function() {
559        btn.classList.remove('copied');
560        document.getElementById('copyXmlLabel').textContent = 'Copy XML';
561      }, 2000);
562    });
563  }
564</script>
564
565</body>
566</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.