-
-
Save 84em/d9c5592afb2ba57bd2cba9a3eb5da508 to your computer and use it in GitHub Desktop.
Example report for link check
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Link Check Report - January 12, 2026 at 2:34 PM</title> | |
| <style> | |
| * { box-sizing: border-box; } | |
| body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; margin: 20px; background: #f5f5f5; font-size: 14px; } | |
| .container { margin: 0 auto; background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } | |
| h1 { color: #333; margin-bottom: 10px; } | |
| .summary { display: flex; gap: 20px; margin-bottom: 20px; padding: 15px; background: #f8f9fa; border-radius: 4px; } | |
| .summary-item { text-align: center; } | |
| .summary-item .number { font-size: 2em; font-weight: bold; } | |
| .summary-item .label { color: #666; font-size: 0.9em; } | |
| .ok { color: #28a745; } | |
| .error { color: #dc3545; } | |
| .table-wrapper { overflow-x: auto; margin-top: 20px; } | |
| table { border-collapse: collapse; } | |
| th, td { padding: 5px 10px; text-align: left; border-bottom: 1px solid #dee2e6; vertical-align: top; white-space: nowrap; } | |
| th { background: #f8f9fa; font-weight: 600; cursor: pointer; } | |
| th:hover { background: #e9ecef; } | |
| tr:hover { background: #f8f9fa; } | |
| td a { color: #007bff; text-decoration: none; font-family: monospace; font-size: 12px; } | |
| td a:hover { text-decoration: underline; } | |
| .badge { display: inline-block; padding: 4px 8px; border-radius: 4px; font-size: 0.85em; font-weight: 500; text-align: center; min-width: 45px; } | |
| .status-ok { background: #d4edda; color: #155724; } | |
| .status-error { background: #f8d7da; color: #721c24; } | |
| .status-redirect { background: #fff3cd; color: #856404; } | |
| .meta { color: #666; font-size: 0.9em; margin-bottom: 20px; } | |
| .actions { margin-bottom: 20px; display: flex; gap: 10px; align-items: center; flex-wrap: wrap; } | |
| .btn { display: inline-block; padding: 8px 16px; background: #007bff; color: white; text-decoration: none; border-radius: 4px; cursor: pointer; border: none; font-size: 14px; } | |
| .btn:hover { background: #0056b3; } | |
| .btn-secondary { background: #6c757d; } | |
| .btn-secondary:hover { background: #545b62; } | |
| .search-box { padding: 8px 12px; border: 1px solid #dee2e6; border-radius: 4px; font-size: 14px; min-width: 250px; } | |
| .fixed-cell { text-align: center; } | |
| .fixed-checkbox { appearance: none; width: 20px; height: 20px; border: 2px solid #dee2e6; border-radius: 4px; cursor: pointer; position: relative; } | |
| .fixed-checkbox:checked { background: #28a745; border-color: #28a745; } | |
| .fixed-checkbox:checked::after { content: ""; position: absolute; left: 6px; top: 2px; width: 5px; height: 10px; border: solid white; border-width: 0 2px 2px 0; transform: rotate(45deg); } | |
| </style> | |
| </head> | |
| <body> | |
| <div class="container"> | |
| <h1>84EM Link Check Report</h1> | |
| <p class="meta">Site: <a href="https://84em.com">https://84em.com</a></p> | |
| <p class="meta">Scanned: January 12, 2026 at 2:34 PM</p> | |
| <div class="summary"> | |
| <div class="summary-item"><div class="number">2</div><div class="label">Total URLs</div></div> | |
| <div class="summary-item"><div class="number ok">0</div><div class="label">OK</div></div> | |
| <div class="summary-item"><div class="number error">2</div><div class="label">Problems</div></div> | |
| </div> | |
| <div class="actions"> | |
| <input type="text" id="searchFilter" class="search-box" placeholder="Filter results..." onkeyup="filterTable()"> | |
| <button class="btn" onclick="saveAllAsCSV()">Save All as CSV</button> | |
| <button class="btn btn-secondary" onclick="window.print()">Print</button> | |
| </div> | |
| <div class="table-wrapper"> | |
| <table id="results"> | |
| <thead><tr><th style="width:60px">Fixed</th><th onclick="sortTable(1)">Status</th><th onclick="sortTable(2)">URL</th><th onclick="sortTable(3)">Error</th><th onclick="sortTable(4)">Locations</th></tr></thead> | |
| <tbody><tr> | |
| <td class="fixed-cell"><input type="checkbox" class="fixed-checkbox" data-url="https://widget.clutch.co/"></td> | |
| <td><span class="badge status-error">404</span></td> | |
| <td><a href="https://widget.clutch.co/" target="_blank">https://widget.clutch.co/</a></td> | |
| <td>Not Found</td> | |
| <td><a href="https://84em.com/testimonials/" target="_blank">https://84em.com/testimonials/</a> (ID: 986)<br></td> | |
| </tr><tr> | |
| <td class="fixed-cell"><input type="checkbox" class="fixed-checkbox" data-url="https://84em.com/wp-content/uploads/84em-logo.png"></td> | |
| <td><span class="badge status-error">404</span></td> | |
| <td><a href="https://84em.com/wp-content/uploads/84em-logo.png" target="_blank">https://84em.com/wp-content/uploads/84em-logo.png</a></td> | |
| <td>Not Found</td> | |
| <td><a href="https://84em.com/wordpress-development-services-usa/alabama/" target="_blank">https://84em.com/wordpress-development-services-usa/alabama/</a> (ID: 2448)<br><a href="https://84em.com/wordpress-development-services-usa/alaska/" target="_blank">https://84em.com/wordpress-development-services-usa/alaska/</a> (ID: 2449)<br><a href="https://84em.com/wordpress-development-services-usa/arizona/" target="_blank">https://84em.com/wordpress-development-services-usa/arizona/</a> (ID: 2450)<br><a href="https://84em.com/wordpress-development-services-usa/arkansas/" target="_blank">https://84em.com/wordpress-development-services-usa/arkansas/</a> (ID: 2451)<br><a href="https://84em.com/wordpress-development-services-usa/california/" target="_blank">https://84em.com/wordpress-development-services-usa/california/</a> (ID: 2452)<br>... and 544 more</td> | |
| </tr></tbody> | |
| </table> | |
| </div> | |
| </div> | |
| <script> | |
| const STORAGE_KEY = "84em-linkcheck-fixed"; | |
| function getFixedUrls() { try { return new Set(JSON.parse(localStorage.getItem(STORAGE_KEY) || "[]")); } catch (e) { return new Set(); } } | |
| function saveFixedUrl(url, isFixed) { const fixed = getFixedUrls(); if (isFixed) { fixed.add(url); } else { fixed.delete(url); } localStorage.setItem(STORAGE_KEY, JSON.stringify([...fixed])); } | |
| function initCheckboxes() { const fixed = getFixedUrls(); document.querySelectorAll(".fixed-checkbox").forEach(cb => { cb.checked = fixed.has(cb.dataset.url); cb.addEventListener("change", function() { saveFixedUrl(this.dataset.url, this.checked); }); }); } | |
| document.addEventListener("DOMContentLoaded", initCheckboxes); | |
| function filterTable() { const filter = document.getElementById("searchFilter").value.toLowerCase(); const rows = document.getElementById("results").tBodies[0].rows; for (let i = 0; i < rows.length; i++) { let match = false; for (let j = 0; j < rows[i].cells.length; j++) { if (rows[i].cells[j].textContent.toLowerCase().indexOf(filter) > -1) { match = true; break; } } rows[i].style.display = match ? "" : "none"; } } | |
| function sortTable(n) { const table = document.getElementById("results"); const tbody = table.tBodies[0]; const rows = Array.from(tbody.rows); const dir = table.dataset.sortDir === "asc" ? "desc" : "asc"; table.dataset.sortDir = dir; rows.sort((a, b) => { const aVal = a.cells[n].textContent.trim(); const bVal = b.cells[n].textContent.trim(); return dir === "asc" ? aVal.localeCompare(bVal) : bVal.localeCompare(aVal); }); rows.forEach(row => tbody.appendChild(row)); } | |
| function saveAllAsCSV() { const rows = document.getElementById("results").querySelectorAll("tr"); let csv = []; rows.forEach((row, i) => { if (i === 0) { csv.push("Fixed,Status,URL,Error,Locations"); return; } const cols = row.querySelectorAll("td"); const cb = row.querySelector(".fixed-checkbox"); csv.push([cb && cb.checked ? "X" : "", ...Array.from(cols).slice(1).map(c => "\"" + c.textContent.trim().replace(/"/g, "\"\"") + "\"")].join(",")); }); const blob = new Blob([csv.join("\n")], {type: "text/csv"}); const link = document.createElement("a"); link.href = URL.createObjectURL(blob); link.download = "linkcheck-" + new Date().toISOString().slice(0,10) + ".csv"; link.click(); } | |
| </script> | |
| </body> | |
| </html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment