{"id":276071,"date":"2026-01-27T13:33:28","date_gmt":"2026-01-27T13:33:28","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/royal-links\/"},"modified":"2026-04-29T04:47:49","modified_gmt":"2026-04-29T04:47:49","slug":"royal-links","status":"publish","type":"plugin","link":"https:\/\/eo.wordpress.org\/plugins\/royal-links\/","author":23435753,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.0.5","stable_tag":"2.0.5","tested":"7.0","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"Royal Links","header_author":"Royal Plugins","header_description":"A powerful WordPress link management plugin for shortening, tracking, and organizing your links.","assets_banners_color":"141e2a","last_updated":"2026-04-29 04:47:49","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/royal-links\/","header_author_uri":"https:\/\/royalplugins.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":386,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.2":{"tag":"1.1.2","author":"royalpluginsteam","date":"2026-01-27 13:33:06"},"2.0.1":{"tag":"2.0.1","author":"royalpluginsteam","date":"2026-04-02 08:52:13"},"2.0.2":{"tag":"2.0.2","author":"royalpluginsteam","date":"2026-04-18 08:07:53"},"2.0.3":{"tag":"2.0.3","author":"royalpluginsteam","date":"2026-04-27 23:50:03"},"2.0.5":{"tag":"2.0.5","author":"royalpluginsteam","date":"2026-04-29 04:47:49"}},"upgrade_notice":{"2.0.5":"<p>Recommended hot-fix release. Resolves a PHP 8+ fatal error on the Edit Link screen for links with existing A\/B Testing variants, fixes a save-blocking HTML5 validation error on the A\/B Testing fields when A\/B Testing was off, and adds a dismissable Royal Plugins Founders Bundle banner on the Settings and Analytics pages.<\/p>","2.0.3":"<p>Adds a per-link &quot;is affiliate?&quot; toggle so Royal Links can be used for non-affiliate purposes (WhatsApp buttons, internal redirects) without injecting FTC disclosure language on every page where they appear. Existing links auto-flag as affiliate during upgrade \u2014 disclosure behavior is preserved by default.<\/p>","2.0.0":"<p>Massive free upgrade! All premium link management features are now included at no cost. Geo-targeting, A\/B testing, QR codes, auto-linking, product displays, and more \u2014 no paid tier, no upsells.<\/p>","1.0.4":"<p>Security hardening release with proper SQL escaping and output sanitization.<\/p>","1.0.3":"<p>Improved import error handling and dismissible admin notices.<\/p>","1.0.0":"<p>Initial release of Royal Links.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3447917,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3447917,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3516880,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3516880,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3517950,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"meta\":{\"title\":\"Royal Links \\u2014 Live Demo\",\"description\":\"Create custom short URLs, track clicks, and manage link health. This demo loads a WordPress admin in your browser with Royal Links installed and 10 sample links pre-seeded.\",\"author\":\"royalplugins\",\"categories\":[\"Link Management\"]},\"landingPage\":\"\\\/wp-admin\\\/edit.php?post_type=royal_link\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"features\":{\"networking\":true},\"login\":{\"username\":\"admin\",\"password\":\"password\"},\"steps\":[{\"step\":\"setSiteOptions\",\"options\":{\"blogname\":\"Royal Links Demo\",\"blogdescription\":\"Live preview \\u2014 create short links, track clicks, manage redirects.\"}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"royal-links\"},\"options\":{\"activate\":true}},{\"step\":\"runPHP\",\"code\":\"<?php\\nrequire_once '\\\/wordpress\\\/wp-load.php';\\n\\n$samples = [\\n  ['Royal Plugins Home',   'royal',   'https:\\\/\\\/royalplugins.com\\\/'],\\n  ['SEObolt Pro',          'seobolt', 'https:\\\/\\\/royalplugins.com\\\/seobolt\\\/'],\\n  ['SiteVault Backup',     'backup',  'https:\\\/\\\/royalplugins.com\\\/sitevault\\\/'],\\n  ['ForgeCache',           'cache',   'https:\\\/\\\/royalplugins.com\\\/forgecache\\\/'],\\n  ['Free Tools',           'tools',   'https:\\\/\\\/royalplugins.com\\\/tools\\\/'],\\n  ['GitHub',               'gh',      'https:\\\/\\\/github.com\\\/royalplugins'],\\n  ['Blog',                 'blog',    'https:\\\/\\\/royalplugins.com\\\/blog\\\/'],\\n  ['Pricing',              'pricing', 'https:\\\/\\\/royalplugins.com\\\/pricing\\\/'],\\n  ['Support',              'help',    'https:\\\/\\\/royalplugins.com\\\/support\\\/'],\\n  ['WP.org listing',       'wporg',   'https:\\\/\\\/wordpress.org\\\/plugins\\\/royal-links\\\/'],\\n];\\n\\n$link_ids = [];\\nforeach ( $samples as $row ) {\\n  list( $title, $slug, $dest ) = $row;\\n  $post_id = wp_insert_post( [\\n    'post_title'  => $title,\\n    'post_name'   => $slug,\\n    'post_type'   => 'royal_link',\\n    'post_status' => 'publish',\\n  ] );\\n  if ( $post_id && ! is_wp_error( $post_id ) ) {\\n    update_post_meta( $post_id, '_royal_links_destination_url', $dest );\\n    update_post_meta( $post_id, '_royal_links_slug', $slug );\\n    update_post_meta( $post_id, '_royal_links_redirect_type', '301' );\\n    update_post_meta( $post_id, '_royal_links_nofollow', 0 );\\n    update_post_meta( $post_id, '_royal_links_sponsored', 0 );\\n    update_post_meta( $post_id, '_royal_links_new_tab', 0 );\\n    $link_ids[] = $post_id;\\n  }\\n}\\n\\nglobal $wpdb;\\n$table = $wpdb->prefix . 'royal_links_clicks';\\n\\\/\\\/ Table is created on plugin activation; seed clicks so analytics charts render non-empty.\\nif ( $wpdb->get_var( \\\"SHOW TABLES LIKE '{$table}'\\\" ) === $table ) {\\n  $browsers   = [ 'Chrome', 'Firefox', 'Safari', 'Edge' ];\\n  $oses       = [ 'Windows', 'macOS', 'Linux', 'iOS', 'Android' ];\\n  $devices    = [ 'desktop', 'mobile', 'tablet' ];\\n  $countries  = [ 'US', 'GB', 'DE', 'CA', 'AU', 'FR', 'BR', 'JP' ];\\n  foreach ( $link_ids as $idx => $lid ) {\\n    $clicks = 30 + ( count( $link_ids ) - $idx ) * 8 + wp_rand( 0, 20 );\\n    for ( $i = 0; $i < $clicks; $i++ ) {\\n      $days_ago   = wp_rand( 0, 29 );\\n      $click_date = gmdate( 'Y-m-d H:i:s', time() - ( $days_ago * 86400 ) - wp_rand( 0, 86399 ) );\\n      $wpdb->insert( $table, [\\n        'link_id'      => $lid,\\n        'click_date'   => $click_date,\\n        'ip_address'   => sprintf( '192.0.2.%d', wp_rand( 1, 254 ) ),\\n        'user_agent'   => 'Mozilla\\\/5.0 (demo)',\\n        'browser'      => $browsers[ array_rand( $browsers ) ],\\n        'os'           => $oses[ array_rand( $oses ) ],\\n        'device_type'  => $devices[ array_rand( $devices ) ],\\n        'country'      => $countries[ array_rand( $countries ) ],\\n        'is_unique'    => ( wp_rand( 0, 10 ) > 2 ) ? 1 : 0,\\n        'click_source' => 'direct',\\n      ] );\\n    }\\n  }\\n}\\n\\n\\\/\\\/ Flush permalinks so \\\/royal, \\\/seobolt etc short-slug redirects work in the demo.\\nflush_rewrite_rules();\\n\"}]}"}},"all_blocks":{"royal-links\/link":{"name":"royal-links\/link","title":"Royal Link"},"royal-links\/product":{"name":"royal-links\/product","title":"Product"}},"tagged_versions":["1.1.2","2.0.1","2.0.2","2.0.3","2.0.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3495612,"resolution":"1","location":"assets","locale":""},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3509516,"resolution":"10","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3495612,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3495612,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3495612,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3495612,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3509516,"resolution":"6","location":"assets","locale":""},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3509516,"resolution":"7","location":"assets","locale":""},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3509516,"resolution":"8","location":"assets","locale":""},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3509516,"resolution":"9","location":"assets","locale":""}},"screenshots":{"1":"Link management dashboard with click stats","2":"Create\/edit link with all options","3":"Geo-targeting with country-based redirects","4":"A\/B split testing results","5":"QR code generator","6":"Product display boxes","7":"Analytics dashboard with charts","8":"Auto keyword linker settings","9":"Migration wizard \u2014 import from Pretty Links, ThirstyAffiliates, BetterLinks","10":"Link health monitoring"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[5362,5375,5353,17938,5530],"plugin_category":[35],"plugin_contributors":[253970],"plugin_business_model":[],"class_list":["post-276071","plugin","type-plugin","status-publish","hentry","plugin_tags-affiliate-links","plugin_tags-click-tracking","plugin_tags-link-cloaking","plugin_tags-link-management","plugin_tags-url-shortener","plugin_category-advertising","plugin_contributors-royalpluginsteam","plugin_committers-royalpluginsteam"],"banners":{"banner":"https:\/\/ps.w.org\/royal-links\/assets\/banner-772x250.png?rev=3516880","banner_2x":"https:\/\/ps.w.org\/royal-links\/assets\/banner-1544x500.png?rev=3516880","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/royal-links\/assets\/icon-128x128.png?rev=3447917","icon_2x":"https:\/\/ps.w.org\/royal-links\/assets\/icon-256x256.png?rev=3447917","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/royal-links\/assets\/screenshot-1.png?rev=3495612","caption":"Link management dashboard with click stats"},{"src":"https:\/\/ps.w.org\/royal-links\/assets\/screenshot-2.png?rev=3495612","caption":"Create\/edit link with all options"},{"src":"https:\/\/ps.w.org\/royal-links\/assets\/screenshot-3.png?rev=3495612","caption":"Geo-targeting with country-based redirects"},{"src":"https:\/\/ps.w.org\/royal-links\/assets\/screenshot-4.png?rev=3495612","caption":"A\/B split testing results"},{"src":"https:\/\/ps.w.org\/royal-links\/assets\/screenshot-5.png?rev=3495612","caption":"QR code generator"},{"src":"https:\/\/ps.w.org\/royal-links\/assets\/screenshot-6.png?rev=3509516","caption":"Product display boxes"},{"src":"https:\/\/ps.w.org\/royal-links\/assets\/screenshot-7.png?rev=3509516","caption":"Analytics dashboard with charts"},{"src":"https:\/\/ps.w.org\/royal-links\/assets\/screenshot-8.png?rev=3509516","caption":"Auto keyword linker settings"},{"src":"https:\/\/ps.w.org\/royal-links\/assets\/screenshot-9.png?rev=3509516","caption":"Migration wizard \u2014 import from Pretty Links, ThirstyAffiliates, BetterLinks"},{"src":"https:\/\/ps.w.org\/royal-links\/assets\/screenshot-10.png?rev=3509516","caption":"Link health monitoring"}],"raw_content":"<!--section=description-->\n<p><strong>The most powerful free affiliate link management and URL shortener plugin for WordPress.<\/strong><\/p>\n\n<p>https:\/\/youtu.be\/1dPJ7uNaiWk<\/p>\n\n<p>Royal Links is a complete link cloaking, click tracking, and link management solution that gives you every tool you need to shorten, cloak, track, and optimize your affiliate links and marketing URLs \u2014 without paying a cent. No \"lite\" version, no feature gates, no upsells. Everything competitors charge $200\/yr for is included free.<\/p>\n\n<p>Whether you manage affiliate links, run marketing campaigns, track click performance, or just want clean branded short URLs on your own domain, Royal Links has you covered.<\/p>\n\n<h4>What You Can Use Royal Links For<\/h4>\n\n<p>Royal Links works with any URL \u2014 cloak, shorten, track, redirect, or A\/B test it. Common use cases:<\/p>\n\n<ul>\n<li><strong>Affiliate networks<\/strong> \u2014 Cloak and track clicks for Amazon Associates, ShareASale, CJ Affiliate (Commission Junction), Impact, Rakuten Advertising, Awin, ClickBank, Skimlinks, Shopify Affiliate, Bluehost Affiliate, ConvertKit Affiliate, FlexOffers, PartnerStack, and any other affiliate program.<\/li>\n<li><strong>Link in bio<\/strong> \u2014 Track clicks from your Instagram, TikTok, Twitter (X), YouTube, LinkedIn, Pinterest, or Threads bio links and route to specific destinations on your site.<\/li>\n<li><strong>Marketing campaigns<\/strong> \u2014 Build UTM-tagged URLs for Google Analytics 4, Plausible, Fathom, or Matomo without leaving WordPress and measure campaign performance per source.<\/li>\n<li><strong>Branded short URLs<\/strong> \u2014 Replace ugly tracking URLs with clean links on your own domain (e.g., <code>yoursite.com\/go\/product<\/code> instead of <code>network.com\/ref?id=12345<\/code>). A free alternative to Bitly, Rebrandly, TinyURL, or Switchy.<\/li>\n<li><strong>A\/B testing<\/strong> \u2014 Test multiple landing page destinations and see which converts best \u2014 replaces paid tools like Bitly Pro and Rebrandly Premium.<\/li>\n<li><strong>QR code campaigns<\/strong> \u2014 Generate QR codes for business cards, flyers, packaging, posters, or in-store signage and track scan-through performance separately from web clicks.<\/li>\n<li><strong>Geo-targeted offers<\/strong> \u2014 Send US visitors to amazon.com, EU visitors to amazon.de, UK visitors to amazon.co.uk \u2014 region-specific storefronts and promo offers from a single shareable link.<\/li>\n<li><strong>WooCommerce \/ Easy Digital Downloads \/ Shopify<\/strong> \u2014 Track clicks from your store to external partners, suppliers, or affiliate offers. Auto-link product names to tracked Royal Links.<\/li>\n<li><strong>YouTube descriptions and podcast show notes<\/strong> \u2014 One short link per episode that you can re-route as offers expire, without re-uploading or editing the description.<\/li>\n<\/ul>\n\n<h4>Link Management<\/h4>\n\n<ul>\n<li><strong>Branded Short URLs<\/strong> \u2014 Create clean links using your own domain<\/li>\n<li><strong>Multiple Redirect Types<\/strong> \u2014 301, 302, and 307 redirects<\/li>\n<li><strong>Link Categories &amp; Tags<\/strong> \u2014 Organize everything with taxonomies<\/li>\n<li><strong>Nofollow \/ Sponsored \/ UGC Attributes<\/strong> \u2014 Stay compliant with search engine guidelines<\/li>\n<li><strong>Password-Protected Links<\/strong> \u2014 Gate access to sensitive destinations<\/li>\n<li><strong>Link Scheduling<\/strong> \u2014 Set start and end dates for any link<\/li>\n<li><strong>Affiliate Disclosure Notices<\/strong> \u2014 Automatically display FTC-compliant disclosures<\/li>\n<\/ul>\n\n<h4>Click Tracking &amp; Analytics<\/h4>\n\n<ul>\n<li><strong>Detailed Click Analytics<\/strong> \u2014 Browser, device, OS, referrer, and country data<\/li>\n<li><strong>Dashboard Widget<\/strong> \u2014 At-a-glance stats with period-over-period comparison<\/li>\n<li><strong>QR Scan Tracking<\/strong> \u2014 See how many clicks come from your QR codes<\/li>\n<li><strong>UTM Parameter Builder<\/strong> \u2014 Build campaign-tagged URLs without leaving WordPress<\/li>\n<\/ul>\n\n<h4>Advanced Redirects<\/h4>\n\n<ul>\n<li><strong>Geo-Targeting<\/strong> \u2014 Redirect visitors to different URLs based on their country<\/li>\n<li><strong>Device-Based Redirects<\/strong> \u2014 Send desktop, mobile, and tablet users to different destinations<\/li>\n<li><strong>Time-Based Redirects<\/strong> \u2014 Automatically swap destinations on a schedule<\/li>\n<li><strong>A\/B Split Testing<\/strong> \u2014 Test multiple destinations and track which converts best<\/li>\n<\/ul>\n\n<h4>Content &amp; Display<\/h4>\n\n<ul>\n<li><strong>QR Code Generator<\/strong> \u2014 Generate downloadable QR codes for any link<\/li>\n<li><strong>Product Display Boxes<\/strong> \u2014 Eye-catching product cards with images and CTAs<\/li>\n<li><strong>Automatic Keyword Linking<\/strong> \u2014 Define keywords and Royal Links auto-links them across your content<\/li>\n<li><strong>Gutenberg Block &amp; Classic Editor<\/strong> \u2014 Insert links from either editor<\/li>\n<\/ul>\n\n<h4>Site Health<\/h4>\n\n<ul>\n<li><strong>Broken Link Checker<\/strong> \u2014 Automatic monitoring flags dead destinations<\/li>\n<li><strong>Link Health Dashboard<\/strong> \u2014 See all link issues at a glance<\/li>\n<\/ul>\n\n<h4>Migration Wizard<\/h4>\n\n<p>Switching from another plugin? Royal Links imports your links, categories, and click data in one click:<\/p>\n\n<ul>\n<li><strong>Pretty Links<\/strong> \u2014 Full import including groups and clicks<\/li>\n<li><strong>ThirstyAffiliates<\/strong> \u2014 Full import including categories and click data<\/li>\n<li><strong>BetterLinks<\/strong> \u2014 Full import including analytics<\/li>\n<\/ul>\n\n<h4>Why Royal Links?<\/h4>\n\n<p>Most link management plugins offer basic features for free and lock the good stuff behind a paid upgrade. Royal Links takes a different approach \u2014 every feature is included from day one. Geo-targeting, A\/B testing, QR codes, auto-linking, product displays, device redirects, and link scheduling are all built in with no restrictions.<\/p>\n\n<h4>Powered by Royal Plugins<\/h4>\n\n<p>Royal Links is built by the team behind <a href=\"https:\/\/wordpress.org\/plugins\/royal-mcp\/\">Royal MCP<\/a> and <a href=\"https:\/\/wordpress.org\/plugins\/sitevault-backup-restore-migration\/\">SiteVault<\/a> \u2014 free WordPress plugins trusted by thousands of sites. We believe powerful tools should be accessible to everyone.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to the following external service under specific conditions:<\/p>\n\n<h4>ip-api.com<\/h4>\n\n<p>Royal Links uses the <a href=\"http:\/\/ip-api.com\">ip-api.com<\/a> geolocation API to determine a visitor's country for the geo-targeting feature. This service is <strong>only contacted when a site administrator has configured country-based redirect rules on a specific link<\/strong>. If no geo-targeting rules are configured, no data is sent to this service.<\/p>\n\n<p>When geo-targeting is active on a link and a visitor clicks that link, the visitor's IP address is sent to ip-api.com to determine their country. The country result is then used to decide which destination URL the visitor should be redirected to.<\/p>\n\n<ul>\n<li><strong>Service URL:<\/strong> <a href=\"http:\/\/ip-api.com\">http:\/\/ip-api.com<\/a><\/li>\n<li><strong>Terms of Service \/ Privacy Policy:<\/strong> <a href=\"https:\/\/ip-api.com\/docs\/legal\">https:\/\/ip-api.com\/docs\/legal<\/a><\/li>\n<li><strong>Data sent:<\/strong> Visitor IP address (only when geo-targeting rules exist on the clicked link)<\/li>\n<li><strong>Data received:<\/strong> Country code for the visitor's IP address<\/li>\n<li><strong>Data retention:<\/strong> Royal Links does not store the IP-to-country lookup. The country is used only for the redirect decision. IP addresses are only stored in the click log if the \"Store IP Addresses\" setting is enabled (disabled by default).<\/li>\n<li><strong>When it is used:<\/strong> Only when a visitor clicks a link that has geo-targeting redirect rules configured by the site admin<\/li>\n<li><strong>When it is NOT used:<\/strong> If no links have geo-targeting rules, this service is never contacted<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>royal-links<\/code> folder to <code>\/wp-content\/plugins\/<\/code> or install directly from the WordPress plugin directory.<\/li>\n<li>Activate Royal Links through the <strong>Plugins<\/strong> menu.<\/li>\n<li>Go to <strong>Royal Links<\/strong> in your admin sidebar and start creating links.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20makes%20royal%20links%20different%20from%20other%20link%20management%20plugins%3F\"><h3>What makes Royal Links different from other link management plugins?<\/h3><\/dt>\n<dd><p>Royal Links gives you every feature for free. Geo-targeting, A\/B split testing, QR codes, automatic keyword linking, product displays, device-based redirects, link scheduling \u2014 features that other plugins charge $100-200\/yr for are all included at no cost. There is no premium tier and no upsell.<\/p><\/dd>\n<dt id=\"can%20i%20import%20my%20links%20from%20pretty%20links%2C%20thirstyaffiliates%2C%20or%20betterlinks%3F\"><h3>Can I import my links from Pretty Links, ThirstyAffiliates, or BetterLinks?<\/h3><\/dt>\n<dd><p>Yes. Go to <strong>Royal Links &gt; Tools<\/strong> and use the Migration Wizard. It imports your links, categories, and click history from Pretty Links, ThirstyAffiliates, or BetterLinks in one click. Your existing short URLs and redirects will keep working.<\/p><\/dd>\n<dt id=\"is%20geo-targeting%20really%20free%3F\"><h3>Is geo-targeting really free?<\/h3><\/dt>\n<dd><p>Yes. Configure country-based redirect rules on any link at no cost. When a visitor clicks that link, their country is detected and they are redirected to the appropriate destination. No API key needed, no usage limits.<\/p><\/dd>\n<dt id=\"does%20royal%20links%20work%20with%20amazon%20associates%3F\"><h3>Does Royal Links work with Amazon Associates?<\/h3><\/dt>\n<dd><p>Yes. Amazon's terms require that affiliate links are not cloaked (the destination must be visible). Royal Links supports uncloaked redirects \u2014 just set the redirect type and Amazon links will work within their guidelines. You can also use the nofollow attribute for compliance.<\/p><\/dd>\n<dt id=\"what%20redirect%20types%20are%20supported%3F\"><h3>What redirect types are supported?<\/h3><\/dt>\n<dd><p>Royal Links supports 301 (permanent), 302 (temporary), and 307 (temporary, preserves method) redirects. On top of that, you can layer device-based redirects, geo-targeting redirects, and time-based redirects that automatically switch destinations on a schedule.<\/p><\/dd>\n<dt id=\"is%20there%20a%20pro%20version%3F\"><h3>Is there a Pro version?<\/h3><\/dt>\n<dd><p>No. Royal Links is the full version. Every feature is included and there is no paid upgrade. We built this as a completely free plugin.<\/p><\/dd>\n<dt id=\"how%20does%20the%20automatic%20keyword%20linker%20work%3F\"><h3>How does the automatic keyword linker work?<\/h3><\/dt>\n<dd><p>Define keywords and associate them with your links. Royal Links automatically scans your post and page content and turns matching keywords into linked text pointing to the destinations you configured. You control the maximum number of links per keyword, which post types to scan, and which content areas to target.<\/p><\/dd>\n<dt id=\"is%20my%20data%20private%3F\"><h3>Is my data private?<\/h3><\/dt>\n<dd><p>Your links, analytics, and settings are stored entirely in your own WordPress database. The only external service Royal Links contacts is ip-api.com, and only when you have configured geo-targeting rules on a specific link. If you don't use geo-targeting, no external requests are made. See the External Services section for full details.<\/p><\/dd>\n<dt id=\"what%20is%20link%20cloaking%20and%20why%20do%20i%20need%20it%3F\"><h3>What is link cloaking and why do I need it?<\/h3><\/dt>\n<dd><p>Link cloaking replaces long, ugly affiliate URLs with clean, branded short links on your own domain (e.g., yoursite.com\/go\/product-name instead of affiliate-network.com\/ref?id=12345&amp;tracking=abc). This makes links more trustworthy to visitors, easier to share, and protects your affiliate commissions from being stripped. Royal Links handles all of this automatically with 301, 302, or 307 redirects.<\/p><\/dd>\n<dt id=\"how%20do%20i%20track%20affiliate%20link%20clicks%20in%20wordpress%3F\"><h3>How do I track affiliate link clicks in WordPress?<\/h3><\/dt>\n<dd><p>Install Royal Links and create a new link with your affiliate URL as the destination. Royal Links automatically tracks every click with detailed analytics \u2014 browser, device, operating system, country, referrer, and timestamp. View performance in the analytics dashboard with charts, top-performing links, and referrer breakdowns. You can also track QR code scans separately.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20existing%20links%20if%20i%20deactivate%20the%20plugin%3F\"><h3>What happens to my existing links if I deactivate the plugin?<\/h3><\/dt>\n<dd><p>Your links and click data remain in the database. If you reactivate Royal Links, everything will be restored. If you want to permanently remove all data, use the standard WordPress uninstall process (delete the plugin from the Plugins page).<\/p><\/dd>\n<dt id=\"how%20does%20royal%20links%20compare%20to%20pretty%20links%20pro%20or%20thirstyaffiliates%20pro%3F\"><h3>How does Royal Links compare to Pretty Links Pro or ThirstyAffiliates Pro?<\/h3><\/dt>\n<dd><p>Pretty Links Pro and ThirstyAffiliates Pro are paid plugins that charge $99\u2013200\/yr for features like geo-targeting, A\/B testing, QR codes, automatic keyword linking, and product display boxes. Royal Links includes all of those features for free with no upgrade tier. The Migration Wizard imports your existing Pretty Links or ThirstyAffiliates links, categories, and click history in one click \u2014 no manual re-creation needed.<\/p><\/dd>\n<dt id=\"can%20i%20create%20a%20link-in-bio%20page%20using%20royal%20links%3F\"><h3>Can I create a link-in-bio page using Royal Links?<\/h3><\/dt>\n<dd><p>Yes. Create a Royal Link for each destination (your shop page, latest blog post, YouTube video, lead magnet, podcast, etc.) and use those Royal Links wherever you put a single bio link \u2014 Instagram, TikTok, Twitter (X), YouTube, LinkedIn, Pinterest, Threads. Royal Links tracks every click with referrer, country, and device data so you can see which platform drives traffic. Rotate destinations by editing the Royal Link without changing the bio URL \u2014 perfect for promoting different campaigns from the same shareable link.<\/p><\/dd>\n<dt id=\"will%20royal%20links%20slow%20down%20my%20wordpress%20site%3F\"><h3>Will Royal Links slow down my WordPress site?<\/h3><\/dt>\n<dd><p>No. The redirect handler is lightweight and the auto-keyword linker runs once per post on save (not on every page load). Click logging happens asynchronously after the redirect fires, so visitor experience is unaffected. The admin UI, analytics, and migration tools do not run on visitor-facing pages.<\/p><\/dd>\n<dt id=\"does%20royal%20links%20work%20with%20caching%20plugins%20like%20wp%20rocket%2C%20w3%20total%20cache%2C%20or%20litespeed%20cache%3F\"><h3>Does Royal Links work with caching plugins like WP Rocket, W3 Total Cache, or LiteSpeed Cache?<\/h3><\/dt>\n<dd><p>Yes. Royal Links short URLs are processed by WordPress's redirect layer before any page caching kicks in, so cached content does not interfere with link redirects, click tracking, or geo-targeting. The plugin's admin pages are not cached (caching plugins exclude <code>\/wp-admin\/<\/code> by default).<\/p><\/dd>\n<dt id=\"can%20i%20use%20royal%20links%20with%20woocommerce%20or%20easy%20digital%20downloads%3F\"><h3>Can I use Royal Links with WooCommerce or Easy Digital Downloads?<\/h3><\/dt>\n<dd><p>Yes. Royal Links is store-agnostic \u2014 use it to track clicks from product pages to external suppliers, affiliate offers, or partner sites. The Auto-Keyword Linker can scan product descriptions and turn brand or model names into tracked outbound links automatically.<\/p><\/dd>\n<dt id=\"is%20royal%20links%20gdpr-compliant%3F\"><h3>Is Royal Links GDPR-compliant?<\/h3><\/dt>\n<dd><p>Royal Links can be configured to be GDPR-friendly. By default the plugin does NOT store IP addresses in the click log (the \"Store IP Addresses\" setting is opt-in and disabled out of the box). Browser, device, country, and referrer data are stored without tying them to a specific identifiable visitor. With IP storage disabled, the click log retains only aggregate analytics suitable for GDPR-compliant reporting under legitimate interest.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.5<\/h4>\n\n<ul>\n<li>New: Royal Plugins Founders Bundle banner on the Royal Links Settings and Analytics pages. Shows the six-plugin bundle with a single primary CTA. Per-user dismissable; never injects on the front end.<\/li>\n<li>Fix: Fatal error on the Edit Link screen under PHP 8+ when an existing A\/B Testing variant was saved with a string-keyed array index. <code>render_variant_row()<\/code> now casts the index to int before computing the variant letter, eliminating the <code>Unsupported operand types: int + string<\/code> TypeError.<\/li>\n<li>Fix: Editing a Royal Link no longer blocks saving when A\/B Testing is disabled. Removed misleading HTML5 min\/max attributes on the A\/B Testing duration and winner-threshold fields that fired browser validation even when A\/B Testing was off, preventing the link from being saved.<\/li>\n<\/ul>\n\n<h4>2.0.3<\/h4>\n\n<ul>\n<li>New: Per-link \"This is an affiliate link\" checkbox on every Royal Link. Uncheck to use a Royal Link for non-affiliate purposes (WhatsApp click-to-chat, internal redirects, app deep links) without triggering FTC affiliate disclosure language on the pages where it appears.<\/li>\n<li>New: Master \"Enable Disclosure\" toggle in Settings \u2192 Royal Links. Cleanly turns the entire automatic disclosure system on or off, separate from the disclosure text content.<\/li>\n<li>New: \"Default new links to affiliate\" setting controls how the per-link flag is initialized when you create a new Royal Link.<\/li>\n<li>Improved: Disclosure detection now only fires when at least one Royal Link in the post content is flagged as an affiliate link, rather than on any post that mentions any Royal Link.<\/li>\n<li>Migration: One-time backfill on upgrade flags every existing Royal Link as <code>is_affiliate=true<\/code> so disclosures continue rendering as they did before. No action required.<\/li>\n<\/ul>\n\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>New: WordPress Playground live preview \u2014 click \"Live Preview\" on the plugin listing to try Royal Links in a browser sandbox with 10 sample links and click history pre-seeded.<\/li>\n<li>New: Video walkthrough embedded on the plugin listing page.<\/li>\n<li>New: Ten screenshots showcasing link management, analytics, geo-targeting, A\/B testing, QR codes, product boxes, auto-linking, migration wizard, and link health.<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Fix: Settings page now renders with white card background<\/li>\n<li>Fix: Dashicon alignment on Short URL copy\/test buttons<\/li>\n<li>Fix: Geo-targeting country selector now uses bundled Select2 (no longer depends on WP core)<\/li>\n<li>Fix: Geo-targeting backward compatibility with legacy single-country rules<\/li>\n<li>Improved: Bundled Chart.js locally (removed CDN dependency)<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>MAJOR: All premium features are now completely free \u2014 no paid tier, no upsells<\/li>\n<li>New: Geo-targeting \u2014 redirect visitors based on country using ip-api.com<\/li>\n<li>New: A\/B split testing with conversion tracking<\/li>\n<li>New: QR code generation for any link<\/li>\n<li>New: Product display boxes with images and CTAs<\/li>\n<li>New: Automatic keyword linking across your content<\/li>\n<li>New: UTM parameter builder<\/li>\n<li>New: Device-based redirects (desktop, mobile, tablet)<\/li>\n<li>New: Time-based redirects with scheduling<\/li>\n<li>New: Password-protected links<\/li>\n<li>New: Affiliate disclosure notices<\/li>\n<li>New: Link scheduling with start\/end dates<\/li>\n<li>New: Migration wizard for Pretty Links, ThirstyAffiliates, and BetterLinks<\/li>\n<li>Improved: Enhanced analytics with QR scan tracking<\/li>\n<li>Improved: Dashboard widget with period comparison<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: Migration wizard \u2014 import links from Pretty Links, ThirstyAffiliates, and BetterLinks<\/li>\n<li>Fixed: Migrate button was non-functional (form handler was missing)<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>New: Redesigned dashboard widget with period-over-period comparison (30d vs previous 30d)<\/li>\n<li>New: Change badges showing click trends, new links, and unique links clicked<\/li>\n<li>New: Broken links warning bar with direct link to health checker<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Security: Improved sanitization of $_GET and $_FILES superglobals<\/li>\n<li>Fix: Moved all inline CSS to external stylesheet (WP.org compliance)<\/li>\n<li>Fix: Inline JavaScript now uses wp_add_inline_script() properly<\/li>\n<li>Fix: PHP limits (set_time_limit, ini_set) now scoped to batch processing only<\/li>\n<li>Updated: Chart.js upgraded to v4.5.1 (from v4.4.0)<\/li>\n<li>Updated: Contributors field corrected for WP.org username<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Fixed remaining \"WP Links\" text in comments, Gutenberg block descriptions, and admin notices<\/li>\n<li>All code references now correctly use \"Royal Links\" branding<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Rebranded internal references from wp_link to royal_link<\/li>\n<li>Updated post type slug for consistency with Royal Links Pro<\/li>\n<li>Updated all CSS classes and JS handles to use royal-links prefix<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Security: Additional output escaping (intval) for numeric values<\/li>\n<li>Security: Changed wp_redirect to wp_safe_redirect for safer redirects<\/li>\n<li>Security: Proper SQL query preparation with single prepare() call<\/li>\n<li>Fix: Bundled Chart.js locally (WP.org disallows external scripts)<\/li>\n<li>Fix: Moved documentation link to plugin row meta<\/li>\n<li>Fix: Removed deprecated load_plugin_textdomain (WordPress handles automatically)<\/li>\n<li>Compatibility: Tested up to WordPress 6.9<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Fix: Redirect 404 issue - rewrite rules now properly registered on activation<\/li>\n<li>Fix: Admin menu now displays \"Royal Links\" instead of \"WP Links\"<\/li>\n<li>Fix: Added documentation link to plugins page<\/li>\n<li>Added: Import limits info (500 links per batch) to Import\/Export page<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Security: Fixed SQL injection vulnerabilities in analytics queries using proper $wpdb-&gt;prepare()<\/li>\n<li>Security: Added proper output escaping throughout plugin (esc_html, intval, wp_kses_post)<\/li>\n<li>Code quality: Added PHPCS ignore comments for valid file operations<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Added dismissible admin notices for broken link warnings<\/li>\n<li>Improved import error handling with specific error messages<\/li>\n<li>Added validation for required CSV columns on import<\/li>\n<li>Added skipped count display for import results<\/li>\n<li>Added BOM handling for Excel-exported CSV files<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fixed table formatting issues on All Links page<\/li>\n<li>Improved column alignment<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Bug fixes and improvements<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Link shortening with custom slugs<\/li>\n<li>301, 302, 307 redirect support<\/li>\n<li>Click tracking and analytics<\/li>\n<li>Categories and tags<\/li>\n<li>Nofollow\/sponsored attributes<\/li>\n<li>Gutenberg block<\/li>\n<li>Classic Editor integration<\/li>\n<li>Import\/Export functionality<\/li>\n<li>Broken link detection<\/li>\n<\/ul>","raw_excerpt":"Free affiliate link management, URL shortener, and link cloaking plugin with geo-targeting, A\/B testing, QR codes, and auto-linking. No premium tier.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/eo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/276071","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/eo.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/eo.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=276071"}],"author":[{"embeddable":true,"href":"https:\/\/eo.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/royalpluginsteam"}],"wp:attachment":[{"href":"https:\/\/eo.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=276071"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/eo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=276071"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/eo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=276071"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/eo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=276071"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/eo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=276071"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/eo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=276071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}