================================================================
  BROKEN LINK SCANNER
  Cyber Link Integrity Monitor
  Version 1.2.0
================================================================


WHAT IT DOES
------------
Dead links are the quiet kind of website rot. A page gets
renamed, an external site shuts down, an image path stops
resolving -- and nothing tells you. Your visitors just hit a
404, and search engines quietly count it against you.

Broken Link Scanner finds those before they cost you anything.
Give it a single page or a whole site and it walks through
every link, image, and resource, recording exactly what each
one answers with: a healthy 200, a redirect, a 404, a server
error, or dead silence.

Two things make it more than a pass/fail checker:

  - It reports the real HTTP status and response time for
    every URL -- so you can tell a moved page from a truly
    dead one, and a working link from a painfully slow server.

  - When a broken link turns up deep inside a recursive crawl,
    it traces the full chain of pages that led to it. You find
    out precisely which page to open and fix -- not just that
    something, somewhere, is wrong.

It all runs on your own computer. No account, no sign-up,
nothing uploaded -- the sites you scan stay between you and
your machine.


GETTING STARTED IN 30 SECONDS
-----------------------------
1. Paste one or more URLs into the URL TARGETS box at the top.
   One URL per line. The "https://" prefix is added automatically
   if you leave it off.

2. Choose your domain scope:
     - Domain Only        Scan within the same root domain only
     - Subdomain Only     Scan within the exact subdomain only
     - All Domains        Follow links anywhere (default)

3. Pick what to check:
     [x] Detect Hyperlinks    <a href="..."> links on the page
     [x] Include Images       <img src="..."> images
     [ ] Recursive URL Scan   Follow links to find more pages
     [ ] Include CSS/JS       <link>, <script>, <iframe>

4. Click START SCAN. Watch results appear in real time.


READING THE RESULTS
-------------------
Each row in the results table shows:

  STATUS  Color-coded HTTP status:
              Green  2xx  Working
              Amber  3xx  Redirected
              Pink   4xx  Broken (404 Not Found is the classic)
              Red    5xx  Server error
              ERR         Network error / unreachable

  URL     The link that was checked
  SOURCE  The page where this link was found (the parent)
  TIME    How many milliseconds the response took
  TYPE    Where the link came from (link, image, script, etc.)

The header pills (OK / REDIR / BROKEN / ERROR / TOTAL) keep a
running tally as the scan progresses.


CLICKING RESULTS
----------------
LEFT-CLICK any row    Opens that URL in your default browser

RIGHT-CLICK any row   Context menu with five options:
                        - Open URL in Browser
                        - Show Source Trace   <-- see below
                        - Copy URL
                        - Copy Source URL
                        - Copy Full Trace


SOURCE TRACE -- WHERE DID THIS LINK COME FROM?
----------------------------------------------
When a recursive scan finds a broken link buried 4 pages deep,
"Source Trace" shows you the entire discovery chain:

   SEED    [200] https://yoursite.com/
              v
   HOP 1   [200] https://yoursite.com/blog/
              v
   HOP 2   [200] https://yoursite.com/blog/2024-recap
              v
   TARGET  [404] https://yoursite.com/old/missing-page.html

Click any step in the trace to open it in your browser.
"Copy Full Trace" puts the whole chain on your clipboard --
perfect for bug reports or sending to whoever owns the page
that's linking to a broken target.


FILE MENU
---------
Load HTML File...     Extract every <a href> from a saved HTML
                      file and use them as scan targets

Load JSON File...     Find every URL inside a JSON structure
                      (any depth, any field) and use them

Load URL List...      Plain text file, one URL per line

Export to TXT/CSV/    Save your scan results in your preferred
XLS/JSON              format. XLS opens directly in Excel.

Exit                  Close the app


SETTINGS
--------
Click the SETTINGS button (or use the Settings menu) to tune:

  NETWORK TIMING
    Connection Timeout      How long to wait to connect (ms)
    Response Timeout        How long to wait for a response (ms)
    Max Redirects           Stop following after this many hops
    Max Recursion Depth     How deep to crawl (recursive mode)
    Concurrent Requests     How many URLs to check in parallel
                            (1-20; higher = faster but heavier)
    Max URLs to Scan        Hard cap to avoid runaway scans

  USER AGENT
    Choose a preset (Chrome, Firefox, Edge, Googlebot, etc.) or
    type your own. Some servers respond differently to different
    user agents.

  FILTERS
    Ignore Extensions       File types to skip (default skips
                            images and downloadable files)
    Ignore URL Patterns     Wildcard patterns to skip
                              example.com/admin/*
                              */wp-content/*

  REQUEST METHOD
    HEAD    Fastest -- asks for status code only, no body
    GET     Slower but always works -- some servers reject HEAD

    [x] Auto-fallback to GET when HEAD fails (recommended)


FILTERING THE RESULTS VIEW
--------------------------
ALL / OK / 3xx / 4xx / 5xx-ERR    Quick chips above the table
                                    show only matching results

filter URL... box                  Live text filter -- type to
                                    narrow the table to URLs
                                    containing your text


KEYBOARD SHORTCUTS
------------------
Ctrl + Enter      Start scan (when not already scanning)
Esc               Close any open modal / context menu


THE STATUS BAR (BOTTOM)
-----------------------
SYSTEM READY     Idle and waiting
SCANNING         Active scan in progress, see current URL
SCAN COMPLETE    Finished -- summary in the toast notification
SCAN STOPPED     You hit STOP

The right side shows elapsed time, plus your license status
(green LICENSED, or amber UNREGISTERED with the URL limit).
Click the license indicator to open the About dialog.


UNREGISTERED VS REGISTERED
--------------------------
The unregistered version is fully functional with two limits:

  - Each scan is capped at 100 URLs total
  - Exports include a "Register" notice line/row

Registering removes both. To register:
  1. Click the UNREGISTERED indicator at the bottom right
     (or open Help -> About from the menu)
  2. Click "Register now"
  3. Enter your registration details
  4. The app updates immediately -- no restart needed


TIPS AND TRICKS
---------------
* For a quick check of a single page, leave Recursive UNCHECKED.
  The scanner will check every link found ON that page (one hop)
  but won't dive into the linked pages.

* For a full site audit, CHECK Recursive and set Max Depth to 3
  or 4. Use Domain Only as the scope so it doesn't try to
  crawl the entire internet.

* Concurrent Requests = 5 is a good default. Bump it to 10 for
  fast servers; drop to 2-3 if your target rate-limits you.

* HEAD requests are faster but some servers (notably some CDNs
  and CMSs) refuse them with a 405. Leave the auto-fallback ON.

* The Ignore Extensions list is your friend -- by default it
  skips images and document downloads, which dramatically
  speeds up scans of media-heavy sites.

* If a scan is taking forever, use STOP -- partial results are
  saved and you can export what you have so far.

* When you find a broken link, RIGHT-CLICK -> Show Source Trace
  to see exactly which page you need to fix.


TROUBLESHOOTING
---------------
"Every URL shows ERR / NETWORK ERROR"
  Check your internet connection. If you're behind a corporate
  proxy or firewall, the scanner may need to be allowed through.

"CORS blocked direct fetch -- using PowerShell fallback (slower)"
  This is a one-time toast. The scanner detected your WebView2
  CORS settings are restrictive and switched to a slower-but-
  bulletproof PowerShell-based check. The scan still works.

"Some links report 403 Forbidden but they work in my browser"
  Try changing the User Agent in Settings -- some sites block
  non-browser-looking requests. Try the "Chrome (Windows)"
  preset.

"The recursive scan keeps going forever"
  Lower Max Recursion Depth in Settings, narrow the Domain
  Scope, or add aggressive Ignore URL Patterns.


SUPPORT AND FEEDBACK
--------------------
This app was built with WebExeBuilder. If something isn't
working as expected, your scan results, settings, and any
error messages from the status bar are the most useful info
to include when reporting a problem.

thanks for your support!

Brad Larned
ezWareLab
https://ezwarelab.com/contact

================================================================
  Happy link hunting.
================================================================
