{"id":280753,"date":"2026-02-16T09:36:28","date_gmt":"2026-02-16T09:36:28","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/edge-link-router\/"},"modified":"2026-03-03T13:11:07","modified_gmt":"2026-03-03T13:11:07","slug":"edge-link-router","status":"publish","type":"plugin","link":"https:\/\/fy.wordpress.org\/plugins\/edge-link-router\/","author":23448903,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.23","stable_tag":"1.0.23","tested":"6.9.4","requires":"6.2","requires_php":"8.0","requires_plugins":null,"header_name":"Edge Link Router","header_author":"301.st","header_description":"Simple redirect management with optional Cloudflare edge acceleration. Works immediately in WP-only mode, edge is optional.","assets_banners_color":"bcb5c9","last_updated":"2026-03-03 13:11:07","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/301.st","header_plugin_uri":"https:\/\/github.com\/investblog\/edge-link-router","header_author_uri":"https:\/\/301.st","rating":0,"author_block_rating":0,"active_installs":0,"downloads":235,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.20":{"tag":"1.0.20","author":"301st","date":"2026-02-16 09:35:53"},"1.0.21":{"tag":"1.0.21","author":"301st","date":"2026-02-21 21:03:00"},"1.0.23":{"tag":"1.0.23","author":"301st","date":"2026-03-03 13:11:07"}},"upgrade_notice":{"1.0.23":"<p>New feature: URL Normalization \u2014 automatically fix uppercase paths, duplicate slashes, and trailing slash mismatches.<\/p>","1.0.22":"<p>New feature: strip tracking parameters from URLs to prevent duplicate pages in search indexes.<\/p>","1.0.21":"<p>New feature: redirect all 404 pages to homepage or custom URL. Settings link on Plugins page.<\/p>","1.0.20":"<p>WP.org review fixes: external services docs, file upload sanitization, JSON escaping, ZIP filename.<\/p>","1.0.19":"<p>Complete uninstall cleanup \u2014 no orphan options left.<\/p>","1.0.18":"<p>Fix edge mode showing &quot;WP Only&quot; after plugin update. Diagnostics now check worker and route.<\/p>","1.0.16":"<p>Clear cached health status on plugin update.<\/p>","1.0.15":"<p>Fix false &quot;Edge Degraded&quot; status when worker is actually running.<\/p>","1.0.14":"<p>UI polish: responsive table, toolbar layout, form alignment.<\/p>","1.0.13":"<p>WordPress 6.9 compatible, Plugin Check fixes.<\/p>","1.0.11":"<p>Ready for WordPress.org: improved readme, plugin assets.<\/p>","1.0.10":"<p>Added snapshot version headers for debugging.<\/p>","1.0.9":"<p>Minor polish: slash normalization, target trim.<\/p>","1.0.8":"<p>Worker improvements: dynamic prefix, better validation.<\/p>","1.0.7":"<p>Complete edge hardening with documented requirements.<\/p>","1.0.6":"<p>Worker security hardening.<\/p>","1.0.5":"<p>Fixed fail-open mode for Cloudflare routes.<\/p>","1.0.4":"<p>Fixed constant redefinition warning during updates.<\/p>","1.0.3":"<p>Route mismatch detection and fail-open mode for better reliability.<\/p>","1.0.2":"<p>Improved Cloudflare setup instructions and edge statistics notice.<\/p>","1.0.0":"<p>Initial release. Welcome to Edge Link Router!<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3462351,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3462351,"resolution":"256x256","location":"assets","locale":""},"icon.svg":{"filename":"icon.svg","revision":3462351,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3462351,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3462351,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.20","1.0.21","1.0.23"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3473667,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3473667,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3473667,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3473667,"resolution":"4","location":"assets","locale":""},"screenshot-5.jpg":{"filename":"screenshot-5.jpg","revision":3473667,"resolution":"5","location":"assets","locale":""},"screenshot-6.jpg":{"filename":"screenshot-6.jpg","revision":3473667,"resolution":"6","location":"assets","locale":""},"screenshot-7.jpg":{"filename":"screenshot-7.jpg","revision":3473667,"resolution":"7","location":"assets","locale":""}},"screenshots":{"1":"Links management screen","2":"Edit link with UTM parameters","3":"Click statistics dashboard","4":"Settings page","5":"Cloudflare Edge integration \u2014 Edge Active status","6":"Cloudflare diagnostics \u2014 all checks passed","7":"Cloudflare Workers metrics dashboard"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[932,3882,727,11104,24188],"plugin_category":[],"plugin_contributors":[255945],"plugin_business_model":[],"class_list":["post-280753","plugin","type-plugin","status-publish","hentry","plugin_tags-932","plugin_tags-cloudflare","plugin_tags-redirect","plugin_tags-shortlinks","plugin_tags-utm","plugin_contributors-301st","plugin_committers-301st"],"banners":{"banner":"https:\/\/ps.w.org\/edge-link-router\/assets\/banner-772x250.jpg?rev=3462351","banner_2x":"https:\/\/ps.w.org\/edge-link-router\/assets\/banner-1544x500.jpg?rev=3462351","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/edge-link-router\/assets\/icon.svg?rev=3462351","icon":"https:\/\/ps.w.org\/edge-link-router\/assets\/icon.svg?rev=3462351","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/edge-link-router\/assets\/screenshot-1.png?rev=3473667","caption":"Links management screen"},{"src":"https:\/\/ps.w.org\/edge-link-router\/assets\/screenshot-2.png?rev=3473667","caption":"Edit link with UTM parameters"},{"src":"https:\/\/ps.w.org\/edge-link-router\/assets\/screenshot-3.png?rev=3473667","caption":"Click statistics dashboard"},{"src":"https:\/\/ps.w.org\/edge-link-router\/assets\/screenshot-4.png?rev=3473667","caption":"Settings page"},{"src":"https:\/\/ps.w.org\/edge-link-router\/assets\/screenshot-5.jpg?rev=3473667","caption":"Cloudflare Edge integration \u2014 Edge Active status"},{"src":"https:\/\/ps.w.org\/edge-link-router\/assets\/screenshot-6.jpg?rev=3473667","caption":"Cloudflare diagnostics \u2014 all checks passed"},{"src":"https:\/\/ps.w.org\/edge-link-router\/assets\/screenshot-7.jpg?rev=3473667","caption":"Cloudflare Workers metrics dashboard"}],"raw_content":"<!--section=description-->\n<p><strong>Simple redirect management that works immediately.<\/strong> Create <code>\/go\/your-slug<\/code> redirects in WordPress admin \u2014 no configuration required. Optionally accelerate with Cloudflare Workers.<\/p>\n\n<p>Built by <a href=\"https:\/\/301.st\">301.st<\/a> \u2014 your redirect management experts.<\/p>\n\n<h4>What It Does<\/h4>\n\n<ul>\n<li><strong>Instant redirects<\/strong> \u2014 Works right after activation. No setup, no external services needed.<\/li>\n<li><strong>Full control<\/strong> \u2014 301\/302\/307\/308 codes, UTM auto-append, query passthrough.<\/li>\n<li><strong>404 catch-all<\/strong> \u2014 Redirect all 404 pages to your homepage or any URL (WP-only).<\/li>\n<li><strong>CSV import\/export<\/strong> \u2014 Migrate affiliate links between sites in seconds.<\/li>\n<\/ul>\n\n<h4>How It Works<\/h4>\n\n<ol>\n<li><strong>WordPress handles everything by default<\/strong> \u2014 Redirects work via WP rewrite rules<\/li>\n<li><strong>Enable edge mode (optional)<\/strong> \u2014 Connect Cloudflare for sub-millisecond redirects<\/li>\n<li><strong>Fail-open design<\/strong> \u2014 If edge fails, WordPress takes over. Redirects never break.<\/li>\n<\/ol>\n\n<h4>Privacy First<\/h4>\n\n<ul>\n<li>Aggregated click stats only (daily totals)<\/li>\n<li>No IP addresses, no cookies, no User-Agent<\/li>\n<li>GDPR compliant \u2014 no consent required<\/li>\n<\/ul>\n\n<h4>Testing Your Redirects<\/h4>\n\n<p>Use our free <a href=\"https:\/\/chromewebstore.google.com\/detail\/redirect-inspector\/jkeijlkbgkdnhmejgofbbapdbhjljdgg\">Redirect Inspector<\/a> Chrome extension to verify your redirects are working correctly and see the full redirect chain.<\/p>\n\n<h4>Links<\/h4>\n\n<ul>\n<li><a href=\"https:\/\/301.st\">Project Home<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/investblog\/edge-link-router\">GitHub<\/a><\/li>\n<li><a href=\"https:\/\/chromewebstore.google.com\/detail\/redirect-inspector\/jkeijlkbgkdnhmejgofbbapdbhjljdgg\">Redirect Inspector<\/a> \u2014 free Chrome extension<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin optionally connects to the Cloudflare API when the user explicitly enables \"Edge Mode\" in the Integrations settings page. This feature is entirely opt-in and the plugin works fully without it.<\/p>\n\n<h4>Cloudflare API<\/h4>\n\n<p>Cloudflare is a web infrastructure and security company that provides CDN, DNS, and edge computing services. This plugin uses the Cloudflare API to deploy a Worker script that handles redirects at the network edge (before requests reach your WordPress server), resulting in faster redirect responses.<\/p>\n\n<p>Data sent to Cloudflare (only when edge mode is enabled by the user):<\/p>\n\n<ul>\n<li>API token (provided by the user) \u2014 sent with each API request for authentication.<\/li>\n<li>Redirect rules (slugs, target URLs, status codes, UTM parameters) \u2014 sent when publishing or updating the Worker snapshot.<\/li>\n<li>Worker JavaScript code \u2014 uploaded once during edge mode setup.<\/li>\n<\/ul>\n\n<p>No visitor data, IP addresses, cookies, or personal information is ever sent to Cloudflare by this plugin.<\/p>\n\n<ul>\n<li><a href=\"https:\/\/www.cloudflare.com\/terms\/\">Cloudflare Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/www.cloudflare.com\/privacypolicy\/\">Cloudflare Privacy Policy<\/a><\/li>\n<li><a href=\"https:\/\/developers.cloudflare.com\/api\/\">Cloudflare API Documentation<\/a><\/li>\n<\/ul>\n\n<h3>Privacy Policy<\/h3>\n\n<p>This plugin does not collect, store, or transmit any personal data. Click statistics are aggregated daily totals only \u2014 no IP addresses, cookies, user agents, or personal data are recorded. No consent banner is required.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/edge-link-router\/<\/code><\/li>\n<li>Activate the plugin through the 'Plugins' screen in WordPress<\/li>\n<li>Go to <strong>Link Router &gt; Links<\/strong> to create your first redirect<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20cloudflare%20to%20use%20this%20plugin%3F\"><h3>Do I need Cloudflare to use this plugin?<\/h3><\/dt>\n<dd><p>No. The plugin works perfectly with just WordPress. Cloudflare integration is optional for users who want edge acceleration.<\/p><\/dd>\n<dt id=\"what%20redirect%20types%20are%20supported%3F\"><h3>What redirect types are supported?<\/h3><\/dt>\n<dd><p>The plugin supports 301 (permanent), 302 (temporary), 307 (temporary, preserve method), and 308 (permanent, preserve method) redirects.<\/p><\/dd>\n<dt id=\"can%20i%20add%20utm%20parameters%20automatically%3F\"><h3>Can I add UTM parameters automatically?<\/h3><\/dt>\n<dd><p>Yes! Each redirect can have its own UTM parameters (source, medium, campaign) that are automatically appended to the target URL.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20cloudflare%20edge%20fails%3F\"><h3>What happens if Cloudflare edge fails?<\/h3><\/dt>\n<dd><p>The plugin is designed with a \"fail-open\" approach. If edge has any issues, requests automatically fall back to WordPress handling. Your redirects keep working.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20collect%20user%20data%3F\"><h3>Does this plugin collect user data?<\/h3><\/dt>\n<dd><p>No personal data is collected. Statistics are aggregated (total clicks per day) with no IP addresses, user agents, or cookies stored.<\/p><\/dd>\n<dt id=\"how%20can%20i%20verify%20my%20redirects%20work%20correctly%3F\"><h3>How can I verify my redirects work correctly?<\/h3><\/dt>\n<dd><p>Use our free <a href=\"https:\/\/chromewebstore.google.com\/detail\/redirect-inspector\/jkeijlkbgkdnhmejgofbbapdbhjljdgg\">Redirect Inspector<\/a> Chrome extension to see the full redirect chain and HTTP status codes.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.23<\/h4>\n\n<ul>\n<li>New: URL Normalization \u2014 301-redirect uppercase paths, duplicate slashes, and trailing slash mismatches to canonical form<\/li>\n<li>Bump stable tag to 1.0.23<\/li>\n<\/ul>\n\n<h4>1.0.22<\/h4>\n\n<ul>\n<li>New: Strip Tracking Parameters \u2014 remove ad-platform click IDs (fbclid, gclid, etc.) from URLs<\/li>\n<li>Internal cleanup and version bump<\/li>\n<\/ul>\n\n<h4>1.0.21<\/h4>\n\n<ul>\n<li>New: 404 Catch-All Redirect \u2014 automatically redirect all 404 pages to a specified URL<\/li>\n<li>New: Settings link on the Plugins page<\/li>\n<li>CI: Plugin Check added as pre-release gate<\/li>\n<\/ul>\n\n<h4>1.0.20<\/h4>\n\n<ul>\n<li>Add External services section to readme (WP.org review)<\/li>\n<li>Fix: Sanitize and validate CSV file upload before import<\/li>\n<li>Fix: Remove wp_json_encode flags per review feedback<\/li>\n<li>Fix: ZIP filename now matches WP.org expectation (no version suffix)<\/li>\n<li>Change sample link from 301.st to wordpress.org<\/li>\n<\/ul>\n\n<h4>1.0.19<\/h4>\n\n<ul>\n<li>Fix: Clean up cfelr_plugin_version option on uninstall<\/li>\n<\/ul>\n\n<h4>1.0.18<\/h4>\n\n<ul>\n<li>Fix: Edge mode detection after plugin update (no longer shows \"WP Only\" when edge is active)<\/li>\n<li>Add worker deployment and route existence checks to diagnostics<\/li>\n<li>Smart health cache: schedule immediate re-check on update instead of clearing cache<\/li>\n<\/ul>\n\n<h4>1.0.17<\/h4>\n\n<ul>\n<li>Move inline styles to enqueued admin.css (review compliance)<\/li>\n<li>Migrate SQL queries to %i identifier placeholder (WP 6.2+)<\/li>\n<li>Plugin Check: zero errors, zero warnings<\/li>\n<li>Fix clicks column alignment<\/li>\n<li>Updated banner assets<\/li>\n<\/ul>\n\n<h4>1.0.16<\/h4>\n\n<ul>\n<li>Fix: Clear health status cache on plugin update to prevent stale \"Edge Degraded\" status<\/li>\n<\/ul>\n\n<h4>1.0.15<\/h4>\n\n<ul>\n<li>Fix: Edge health check now correctly detects worker (use \/settings API endpoint)<\/li>\n<\/ul>\n\n<h4>1.0.14<\/h4>\n\n<ul>\n<li>UI: hide Target URL column on narrow screens (&lt; 1200px)<\/li>\n<li>UI: move action buttons to toolbar row with search<\/li>\n<li>UI: align inline form inputs with buttons<\/li>\n<li>Fix: CI build ZIP structure for WordPress installer<\/li>\n<\/ul>\n\n<h4>1.0.13<\/h4>\n\n<ul>\n<li>Updated \"Tested up to\" to WordPress 6.9<\/li>\n<li>Fixed Plugin Check errors (fopen\/fclose, variable prefixes)<\/li>\n<\/ul>\n\n<h4>1.0.11<\/h4>\n\n<ul>\n<li>Improved readme for WordPress.org submission<\/li>\n<li>Unified admin badge styles<\/li>\n<li>Added plugin assets (banners, icons)<\/li>\n<\/ul>\n\n<h4>1.0.10<\/h4>\n\n<ul>\n<li>Worker: add snapshot version headers for debugging (X-CFELR-Snapshot-Version, X-CFELR-Snapshot-Updated)<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Worker: remove all trailing slashes, trim target URL<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Worker: dynamic prefix from SNAPSHOT (not hardcoded in regex)<\/li>\n<li>Worker: pre-decode length check to prevent DoS<\/li>\n<li>Worker: UTM key charset validation (alphanumeric + underscore)<\/li>\n<li>Worker: try-catch around new URL() for malformed targets<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Complete edge hardening: slug length limit, UTM validation, synced status codes with WP<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Worker hardening: protocol validation, options normalization, status code whitelist<\/li>\n<li>Better error handling for malformed URL slugs<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Fixed fail-open mode API parameter (request_limit_fail_open)<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Fixed constant redefinition warning during updates<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Route pattern mismatch detection and warning<\/li>\n<li>\"Fix Route Now\" button to repair mismatched routes<\/li>\n<li>Auto-update CF route when prefix changes<\/li>\n<li>Routes now use fail_open mode (true fail-open design)<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Simplified Cloudflare API token setup (Custom Token with 4 permissions)<\/li>\n<li>Added edge mode notice on Stats page with link to Cloudflare metrics<\/li>\n<li>Fixed Cloudflare Worker upload multipart format<\/li>\n<li>Added Git Updater support<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>WP-only redirect handling<\/li>\n<li>Links CRUD management<\/li>\n<li>CSV import\/export<\/li>\n<li>UTM parameter support<\/li>\n<li>Aggregated click statistics<\/li>\n<li>Dashboard widget<\/li>\n<li>Cloudflare edge integration<\/li>\n<li>Diagnostic tools<\/li>\n<li>REST API<\/li>\n<\/ul>","raw_excerpt":"Simple redirect management with optional Cloudflare edge acceleration. Create short links, track clicks, add UTM parameters.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/280753","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=280753"}],"author":[{"embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/301st"}],"wp:attachment":[{"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=280753"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=280753"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=280753"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=280753"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=280753"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=280753"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}