=== MapMyURL ===
Contributors: danielking
Tags: links, url, broken links, audit, click tracking
Requires at least: 6.0
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.9.46
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Find and audit URLs across WordPress content. Check link health, explore aggregate click activity, export reports, and safely update URLs.

== Description ==

MapMyURL Free helps site administrators find URLs across WordPress content and manage them from a dedicated MapMyURL admin workspace.

The plugin scans public WordPress content and shows where each URL was found, the current URL, link type, link status, last modified date, and a replacement URL field. It is designed for link audits, content cleanups, migration checks, SEO reviews, and manual URL maintenance.

Included in MapMyURL Free:

* Scan database URLs in pages, posts, excerpts, and custom fields.
* Filter by content type, URL domain, uploaded image URLs, link type, link status, and internal/external links.
* Check filtered links for working, redirect, broken, server error, warning, or unchecked statuses.
* Manually update individual URL rows.
* Export audit-ready CSV files for Excel or reporting.
* View a pie chart of visible URL domains.
* Optionally count real front-end link clicks and show totals and last-clicked times in the URL table and CSV export.
* Choose which URL Table columns are visible and resize them to suit the current workspace.
* Use a dedicated Free dashboard for link health, tracked-click totals, a 30-day click chart, top URLs, top content, and recent aggregate activity.
* Explore a dedicated Click Activity page with 24-hour, 48-hour, 7-day, 30-day, and custom ranges; period comparisons; search and sorting; trend charts; top URLs and content; recent activity; matching URL Table links; and CSV/PDF exports.
* Open a support email directly from the plugin page.

= Complete Free version - not a trial =

MapMyURL Free includes URL scanning, search and filters, link-health checking, internal and external link visibility, CSV export, domain charts, and controlled individual URL updates. These features do not expire and do not require a paid subscription.

= Need advanced URL-management tools? =

MapMyURL Pro is available separately and adds:

* Domain find and replace while preserving paths, query strings, and fragments.
* Bulk updates for selected URL rows.
* Change History and Undo.
* Client PDF reports.
* Scheduled weekly monitoring and email reports.
* A WordPress dashboard link-health widget.
* SEO Link Scanner.
* Affiliate Link Finder & Updater.

Learn more about MapMyURL Pro at https://danielking.info/mapmyurl-pro/

MapMyURL Free only appears in the WordPress admin area and is available to administrators with the `manage_options` capability.

Copyright 2026 Daniel King. MapMyURL Free is licensed under GPL-2.0-or-later.

== Installation ==

1. Upload the `mapmyurl-free` folder to the `/wp-content/plugins/` directory, or install the plugin ZIP from Plugins > Add New > Upload Plugin.
2. Activate MapMyURL Free from the Plugins screen.
3. Select MapMyURL from the main WordPress admin menu.
4. Use Scan URLs to view the URL table, filters, chart, export, and link checker.

== Frequently Asked Questions ==

= Where do I find MapMyURL Free? =

Select MapMyURL from the main WordPress admin menu.

= What content does MapMyURL Free scan? =

MapMyURL Free scans public post types, including pages, posts, excerpts, and custom fields. It also checks serialized custom field values where URLs are stored inside arrays or objects.

= Can I filter broken links? =

Yes. First click Check filtered links. After link statuses are saved, use the Link Status filter to show Working, Redirects, Broken, or Unchecked links.

= Can I filter internal and external links? =

Yes. Use the Link Scope filter to show All links, Internal links, or External links.

= Can I update URLs in the free version? =

Yes. MapMyURL Free supports manual per-row URL updates.

= Does click tracking identify visitors or use cookies? =

No. Click tracking is disabled by default. When an administrator enables it, MapMyURL stores only aggregate daily and hourly counts for a link and the WordPress content where it appeared, plus the latest click time. It does not store IP addresses, visitor identities, referrers, browser fingerprints, or cookies, and it does not send click data to an external service.

= Does MapMyURL Free include bulk updates or change history? =

No. Bulk updates, change history, client PDF reports, domain find-and-replace, and scheduled monitoring are part of MapMyURL Pro, which is distributed separately.

= Should I back up my site first? =

Yes. Always make a database backup before running URL replacements on a live website.

== Screenshots ==

1. Main MapMyURL Free admin page with URL table, filters, and update controls.
2. Link status and internal/external filters after checking filtered links.
3. CSV export and chart tools for audit reporting.
4. Per-row manual URL update controls.

== Changelog ==

= 1.9.46 =
* Kept the Dashboard, URL Table, Click Activity, and Diagnostics submenu expanded inside the normal-width WordPress admin sidebar on every admin screen.
* Preserved WordPress's standard flyout behaviour when the entire admin menu is deliberately collapsed.

= 1.9.45 =
* Removed the duplicate automatic MapMyURL submenu item while retaining Dashboard, URL Table, Click Activity, and Diagnostics.

= 1.9.44 =
* Extended the midnight-navy MapMyURL workspace background across the dedicated Click Activity page.

= 1.9.43 =
* Added a dedicated Click Activity submenu page while keeping the Dashboard and URL Table focused on their existing purposes.
* Added 24-hour, 48-hour, 7-day, 30-day, and custom reporting ranges with today, selected-period, previous-period, and all-time totals.
* Added aggregate trend charts, Top Clicked URLs, Top Content by Clicks, recent activity, page-or-URL search, click/recent sorting, and direct links to matching URL Table rows.
* Added dedicated Click Activity CSV and PDF exports plus clear aggregate-data privacy messaging.

= 1.9.42 =
* Added click tracking to the WordPress.org discovery tags to reflect the optional privacy-friendly click reporting feature.

= 1.9.41 =
* Added translator guidance for dynamic URL Table and click-count labels to satisfy WordPress Plugin Check.

= 1.9.40 =
* Added 30-day, 7-day, 48-hour, and 24-hour controls to the dashboard Click Activity chart.
* Added privacy-friendly hourly aggregate storage so the 24-hour and 48-hour views are accurate.
* Preserved existing click totals during the hourly-storage upgrade.

= 1.9.39 =
* Restored clear vertical spacing between the click-breakdown cards and Recent Click Activity.
* Corrected equal-height card sizing so dashboard panels no longer overlap.

= 1.9.38 =
* Matched the width and height of the Top Clicked URLs and Top Content by Clicks dashboard panels.
* Moved Link Health onto a full-width row so the two click-breakdown panels align cleanly beneath it.

= 1.9.37 =
* Added a dedicated MapMyURL Free dashboard without Pro-only management tools.
* Added mapped URL, broken-link, redirect, click, and last-check summary cards.
* Added a detailed privacy-friendly click area with a 30-day activity chart, today, seven-day, and all-time totals.
* Added top clicked URLs, top content, and recent aggregate click activity without collecting visitor identities, IP addresses, locations, referrers, or browser fingerprints.
* Added the click-tracking enable and reset controls directly to the dashboard.

= 1.9.36 =
* Restyled the synchronized table scrollbars with the MapMyURL navy, blue, and cyan interface colours.
* Added rounded tracks, clearer hover feedback, dark native control hints, and matching top-table borders.

= 1.9.35 =
* Added a synchronized horizontal scrollbar above the URL Table so off-screen columns remain reachable without scrolling to the final row.
* Added pixel-width controls inside the column picker for reducing or expanding any column even when its header is off-screen.
* Automatically scrolls a newly restored column into view.

= 1.9.34 =
* Added a column picker for showing and hiding individual URL Table columns.
* Added mouse, touch, and keyboard-accessible column resizing from the table headings.
* Remembered each browser's column visibility and widths, with a one-click reset to the standard layout.

= 1.9.33 =
* Rebalanced all eight URL Table column widths after adding click reporting.
* Added a suitable minimum table width so headers, dates, and update controls remain compact instead of stretching rows vertically.

= 1.9.32 =
* Added optional privacy-friendly front-end link click tracking, disabled by default.
* Added Clicks and Last clicked columns to the URL Table and CSV exports.
* Added controls to enable tracking or reset all stored counts.
* Added suggested privacy-policy text explaining the locally stored aggregate data.

= 1.9.31 =
* Extended the midnight-navy background across the complete Diagnostics workspace instead of leaving WordPress's outer content area light.

= 1.9.30 =
* Restored the complete dark MapMyURL theme and correctly sized logo on the Diagnostics submenu by loading admin assets against WordPress's registered page identifiers.
* Corrected metadata-deletion handling so WordPress can pass multiple deleted metadata IDs without causing a type error.

= 1.9.29 =
* Changed admin notice text to white so stale-index and other messages remain readable against the dark navy interface.

= 1.9.28 =
* Fixed Link Type, Link Status, and Link Scope dropdowns so they submit their filter request instead of leaving the loading screen open indefinitely.
* Kept a compatibility fallback for browsers without the newer form submission method.

= 1.9.27 =
* Stored the URL index in durable, non-autoloaded WordPress data so hosting cache eviction cannot trigger a full rescan during filter changes.
* Kept the existing index available when content changes and clearly marked it for refresh instead of blocking filters with an automatic rebuild.
* Limited full rescans to the initial index creation and the administrator-controlled Scan URLs action.

= 1.9.26 =
* Cached domain and content-type summaries instead of rebuilding them whenever a filter changes.
* Precomputed domain, link-scope, and uploaded-image values while building the URL index.
* Reused one saved link-status map per request instead of loading it again for every URL row.

= 1.9.25 =
* Added a cached URL index so searches and filters no longer rescan all WordPress content on every request.
* Batched the full content scan and primed custom-field data to reduce database queries on larger sites.
* Made Scan URLs explicitly rebuild the index, with automatic cache clearing after content or custom-field changes.

= 1.9.24 =
* Rewrote the WordPress.org short description to explain the link-audit workflow more clearly.

= 1.9.23 =
* Added a concise WordPress.org description section explaining that Free is complete and does not expire.
* Added a factual comparison of separately available Pro features with one direct information link.

= 1.9.22 =
* Changed the top-level WordPress admin menu label from MapMyURL FREE to MapMyURL.
* Updated the plugin action link and menu directions to use the MapMyURL name.

= 1.9.21 =
* Changed the WordPress.org directory listing name from MapMyURL Free to MapMyURL.

= 1.9.20 =
* Moved MapMyURL Free from Tools into its own top-level WordPress admin menu.
* Added direct URL Table and Diagnostics submenu entries and updated internal navigation.

= 1.9.19 =
* Applied the midnight-navy and electric-blue interface across the Free URL Table and Diagnostics pages.
* Changed table labels, controls, dropdown values, and dropdown options to high-contrast light text.
* Added an accessible loading overlay and animated wheel for URL Table searches, filters, checks, pagination, navigation, and updates.
* Restyled Diagnostics to match the shared MapMyURL workspace and corrected the chart data and toggle labels.

= 1.9.18 =
* Added optional privacy-safe diagnostic logging for support requests.
* Added controls to copy, download, and clear a seven-day rolling diagnostic report.

= 1.9.17 =
* Replaced the PRO-badged icon in the Free banner with a dedicated square MapMyURL icon without the PRO label.

= 1.9.16 =
* Replaced the old MU square in the Free banner with the same official map-pin link icon used by Pro.

= 1.9.15 =
* Added the official MapMyURL logo to the Free upgrade panel so its branded header matches Pro.

= 1.9.14 =
* Updated the admin asset cache version so WordPress loads the new MapMyURL colour theme immediately after upgrading.

= 1.9.13 =
* Brought the dark navy and electric blue MapMyURL banner theme into the Free admin hero while keeping tables, filters, and forms light and readable.

= 1.9.12 =
* Removed the obsolete pre-release option-name migration so every stored option uses the unique MapMyURL Free prefix.

= 1.9.11 =
* Renamed the directory listing name to MapMyURL.
* Loaded admin CSS and JavaScript through the WordPress enqueue APIs.
* Strengthened the plugin class and saved-option names to avoid conflicts, with automatic migration of existing link-status data.

= 1.9.10 =
* Corrected the release ZIP packaging so WordPress installs and activates the plugin from the expected folder.

== Upgrade Notice ==

= 1.9.46 =
Keeps the MapMyURL submenu visible inside the WordPress admin sidebar.

= 1.9.45 =
Restores the intended four-item MapMyURL Free submenu.

= 1.9.44 =
Corrects the Click Activity page background to match the MapMyURL interface.

= 1.9.43 =
Adds a dedicated privacy-friendly Click Activity reporting and drill-down page.

= 1.9.42 =
Updates the WordPress.org discovery tags for optional click tracking.

= 1.9.41 =
Adds WordPress translation guidance for dynamic dashboard and table labels.

= 1.9.40 =
Adds selectable daily and hourly Click Activity dashboard ranges.

= 1.9.39 =
Fixes dashboard card overlap and restores consistent spacing between rows.

= 1.9.38 =
Aligns the two detailed click-breakdown dashboard panels to the same dimensions.

= 1.9.37 =
Adds a detailed Free dashboard for link health and privacy-friendly aggregate click insights.

= 1.9.36 =
Integrates the URL Table scroll controls into the MapMyURL dark interface.

= 1.9.35 =
Makes off-screen and oversized columns easy to recover using a top scrollbar, direct width controls, and automatic scrolling.

= 1.9.34 =
Adds a remembered column picker and adjustable URL Table column widths.

= 1.9.33 =
Keeps the expanded click-reporting URL Table compact and readable at desktop and smaller screen sizes.

= 1.9.32 =
Adds optional local click counts to the URL Table and CSV export without cookies or visitor identification.

= 1.9.31 =
Completes the dark Diagnostics theme across the full WordPress content area.

= 1.9.30 =
Restores the styled Diagnostics page and prevents a metadata-deletion type error.

= 1.9.29 =
Improves the contrast and readability of admin notice messages.

= 1.9.28 =
Fixes dropdown filters that could display the loading screen indefinitely without sending a request.

= 1.9.27 =
Prevents content-type, link-type, and link-status changes from unexpectedly starting another full site scan.

= 1.9.26 =
Makes content-type and link-status filter changes respond faster by removing repeated per-row parsing and status lookups.

= 1.9.25 =
Speeds up repeated searches and filters on larger sites by caching the URL index and refreshing it safely when content changes.

= 1.9.24 =
Improves the WordPress.org summary shown in plugin search and installation screens.

= 1.9.23 =
Clarifies the permanent Free feature set and the separately available Pro workflow tools.

= 1.9.22 =
Shows the Free plugin under a clean MapMyURL top-level admin tab.

= 1.9.21 =
Updates the WordPress.org directory listing name to MapMyURL.

= 1.9.20 =
Moves MapMyURL Free into a dedicated top-level admin workspace with direct URL Table and Diagnostics navigation.

= 1.9.19 =
Introduces the refreshed dark Free workspace, clearer controls and tables, updated Diagnostics, and URL Table loading feedback.

= 1.9.18 =
Adds opt-in diagnostic logging so administrators can capture and share useful error details with support.
