{"id":370153,"date":"2026-11-08T18:06:32","date_gmt":"2026-11-08T18:06:32","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/dawn-auto-links\/"},"modified":"2026-11-08T18:06:20","modified_gmt":"2026-11-08T18:06:20","slug":"rootlinkd","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/rootlinkd\/","author":23459297,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.5.24","stable_tag":"2.5.24","tested":"7.1.4","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"rootlinkd","header_author":"rootlinkd","header_description":"Automatic internal linking for WordPress. Free provides unlimited exact-match internal links; paid editions add control, analytics, monetization, and workflow features.","assets_banners_color":"0c4561","last_updated":"2026-11-08 18:06:20","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/rootlinkd.com\/","header_author_uri":"https:\/\/rootlinkd.com\/about\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":102,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.5.24":{"tag":"2.5.24","author":"vyscocity","date":"2026-11-08 18:06:20","revision":3791320}},"upgrade_notice":{"2.5.24":"<p>Fixes rule editing in Free. No data or settings changes.<\/p>","2.5.23":"<p>Header correction only. No functional changes.<\/p>","2.5.22":"<p>Text corrections in the upgrade panels and settings examples. No functional changes.<\/p>","2.5.21":"<p>Renamed to rootlinkd. Your rules and settings carry over unchanged. If you update from a copy installed under the old dawn-auto-links folder, deactivate the old plugin before activating rootlinkd.<\/p>","2.5.20":"<p>Paid-edition code cleanup; Free behavior is unchanged.<\/p>","2.5.19":"<p>Compatibility and code-quality cleanup; no feature changes.<\/p>","2.5.18":"<p>Fixes Premium first-paragraph exclusion so Elementor opening content cannot be linked before the assembled page is processed.<\/p>","2.5.17":"<p>Corrects historical release-note wording for the 2.5.15 prefix migration. Runtime behavior is unchanged from 2.5.16.<\/p>","2.5.16":"<p>Corrects Premium AJAX\/admin-post hook registrations so all renamed <code>dawnal_*<\/code> actions function after the prefix migration.<\/p>","2.5.15":"<p>Internal prefix update with automatic settings migration, title escaping, and a fix for query-string URLs in links.<\/p>","2.5.14":"<p>Premium admin correctness and defensive hardening; Free-tier behavior is unchanged.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3791351,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3791351,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3791351,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3791351,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.5.24"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3791351,"resolution":"1","location":"assets","locale":"","width":2560,"height":3038},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3791351,"resolution":"2","location":"assets","locale":"","width":2560,"height":1930},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3791351,"resolution":"3","location":"assets","locale":"","width":2560,"height":2520},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3791351,"resolution":"4","location":"assets","locale":"","width":2560,"height":1800},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3791351,"resolution":"5","location":"assets","locale":"","width":2560,"height":2600}},"screenshots":{"1":"Rules list","2":"Add\/edit rule with keyword variations (paid plans)","3":"Settings (paid plans)","4":"Analytics (paid plans)","5":"Links in published content"}},"plugin_section":[],"plugin_tags":[239951,19933,6681,175,186],"plugin_category":[55],"plugin_contributors":[78154,291533],"plugin_business_model":[],"class_list":["post-370153","plugin","type-plugin","status-publish","hentry","plugin_tags-auto-linking","plugin_tags-internal-linking","plugin_tags-internal-links","plugin_tags-links","plugin_tags-seo","plugin_category-seo-and-marketing","plugin_contributors-freemius","plugin_contributors-vyscocity","plugin_committers-vyscocity"],"banners":{"banner":"https:\/\/ps.w.org\/rootlinkd\/assets\/banner-772x250.png?rev=3791351","banner_2x":"https:\/\/ps.w.org\/rootlinkd\/assets\/banner-1544x500.png?rev=3791351","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/rootlinkd\/assets\/icon-128x128.png?rev=3791351","icon_2x":"https:\/\/ps.w.org\/rootlinkd\/assets\/icon-256x256.png?rev=3791351","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/rootlinkd\/assets\/screenshot-1.png?rev=3791351","caption":"Rules list"},{"src":"https:\/\/ps.w.org\/rootlinkd\/assets\/screenshot-2.png?rev=3791351","caption":"Add\/edit rule with keyword variations (paid plans)"},{"src":"https:\/\/ps.w.org\/rootlinkd\/assets\/screenshot-3.png?rev=3791351","caption":"Settings (paid plans)"},{"src":"https:\/\/ps.w.org\/rootlinkd\/assets\/screenshot-4.png?rev=3791351","caption":"Analytics (paid plans)"},{"src":"https:\/\/ps.w.org\/rootlinkd\/assets\/screenshot-5.png?rev=3791351","caption":"Links in published content"}],"raw_content":"<!--section=description-->\n<p>rootlinkd automatically turns exact keywords and phrases into internal links across your WordPress content.<\/p>\n\n<p>Set one keyword or phrase and one internal destination URL. When that exact text appears in eligible rendered content, rootlinkd creates the internal link automatically. Your posts are never rewritten: links are added as each page is displayed, so changing or deleting a rule updates every page at once.<\/p>\n\n<p><strong>Free includes:<\/strong><\/p>\n\n<ul>\n<li>Unlimited internal-link rules<\/li>\n<li>One exact keyword or phrase and one internal destination URL per rule<\/li>\n<li>Whole-word, case-insensitive matching<\/li>\n<li>Every eligible exact match is linked, including headings (H1-H6) and the main singular post\/page title<\/li>\n<li>Links inherit the active WordPress theme's normal link appearance<\/li>\n<li>Existing links and technical markup are protected from nested or corrupt links<\/li>\n<li>Works with Gutenberg, Elementor and the Classic Editor<\/li>\n<\/ul>\n\n<p><strong>Pro<\/strong> adds placement and volume control: a maximum number of links per page, linking each keyword once per page, skipping headings and titles, skipping the first paragraphs, excluding the current page, and turning auto-links off on individual posts or pages. It also adds external links, trusted domains (your own other sites treated as internal), one keyword variation per rule and five link styles.<\/p>\n\n<p><strong>Business<\/strong> adds affiliate links with <code>rel=\"nofollow sponsored\"<\/code>, automatic affiliate tag appending, click counts and analytics, a link randomizer, CSV import and export, up to five keyword variations per rule and three more link styles.<\/p>\n\n<p><strong>Developer<\/strong> adds unlimited keyword variations and destination URL autocomplete.<\/p>\n\n<p>rootlinkd was previously named DAWN Auto Links.<\/p>\n\n<h3>External Service: Freemius<\/h3>\n\n<p>rootlinkd includes the Freemius SDK for optional account connection, licensing, paid upgrades, payments, software updates, and related account features.<\/p>\n\n<p>On the Free edition's activation screen, you can skip the Freemius connection and continue using the Free plugin. If you choose to opt in, Freemius may receive basic profile, website, WordPress environment, and product-usage information needed for the services you allow. Paid purchases and license activation also communicate with Freemius.<\/p>\n\n<p>Freemius service information: https:\/\/freemius.com\/\nFreemius Terms of Service: https:\/\/freemius.com\/terms\/\nFreemius Privacy Policy: https:\/\/freemius.com\/privacy\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate rootlinkd.<\/li>\n<li>Open rootlinkd -&gt; Rules.<\/li>\n<li>Add an exact keyword or phrase and an internal destination URL.<\/li>\n<li>The Free edition automatically links every eligible exact match it finds.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20many%20rules%20can%20i%20create%20in%20free%3F\"><h3>How many rules can I create in Free?<\/h3><\/dt>\n<dd><p>Unlimited. The Free edition has no rule-count quota.<\/p><\/dd>\n<dt id=\"how%20many%20links%20can%20free%20add%20to%20one%20page%3F\"><h3>How many links can Free add to one page?<\/h3><\/dt>\n<dd><p>Free has no links-per-page or once-per-keyword control. Every eligible exact match can be linked.<\/p><\/dd>\n<dt id=\"will%20free%20link%20inside%20headings%20or%20titles%3F\"><h3>Will Free link inside headings or titles?<\/h3><\/dt>\n<dd><p>Yes. H1-H6 content and the main singular post\/page title are eligible. Paid editions provide placement controls. Archive, navigation, and secondary-loop titles remain protected where linking could create invalid nested anchors.<\/p><\/dd>\n<dt id=\"does%20free%20have%20a%20settings%20or%20analytics%20page%3F\"><h3>Does Free have a Settings or Analytics page?<\/h3><\/dt>\n<dd><p>No. Free provides the exact-match internal-link engine and Rules management.<\/p><\/dd>\n<dt id=\"does%20free%20support%20keyword%20variations%2C%20external%20links%2C%20or%20affiliate%20links%3F\"><h3>Does Free support keyword variations, external links, or affiliate links?<\/h3><\/dt>\n<dd><p>No. Those are paid features.<\/p><\/dd>\n<dt id=\"can%20free%20exclude%20the%20first%20paragraph%20or%20specific%20pages%3F\"><h3>Can Free exclude the first paragraph or specific pages?<\/h3><\/dt>\n<dd><p>No. Placement and exclusion controls are paid features.<\/p><\/dd>\n<dt id=\"what%20does%20free%20protect%3F\"><h3>What does Free protect?<\/h3><\/dt>\n<dd><p>rootlinkd does not create nested links inside an existing <code>&lt;a&gt;<\/code> element and does not modify script, style, code, preformatted, textarea content, or HTML tag attributes.<\/p><\/dd>\n<dt id=\"do%20my%20rules%20carry%20over%20when%20i%20upgrade%3F\"><h3>Do my rules carry over when I upgrade?<\/h3><\/dt>\n<dd><p>Yes. Free and paid editions share the same rules table and settings, so data carries across upgrades.<\/p><\/dd>\n<dt id=\"does%20deleting%20the%20plugin%20delete%20my%20rules%3F\"><h3>Does deleting the plugin delete my rules?<\/h3><\/dt>\n<dd><p>No. Rules and settings stay in your database, so reinstalling brings them back.<\/p><\/dd>\n<dt id=\"was%20this%20plugin%20previously%20called%20dawn%20auto%20links%3F\"><h3>Was this plugin previously called DAWN Auto Links?<\/h3><\/dt>\n<dd><p>Yes. It was renamed to rootlinkd in version 2.5.21. Your rules and settings carry over unchanged.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.5.24<\/h4>\n\n<ul>\n<li>Fixed: editing a rule in Free failed with \"The link you followed has expired\"; the rule form now posts to the clean Rules URL (this also fixes adding a rule right after Delete\/Enable\/Disable)<\/li>\n<li>Removed the legacy DAWN Auto Links icon from the bundled Freemius assets<\/li>\n<li>Plugin classes renamed to the plugin's existing dawnal prefix (Dawnal_Free_Plugin, Dawnal_Premium_Plugin); the Free package no longer references the premium class<\/li>\n<li>No database, option, rule, settings, feature-gate or pricing changes<\/li>\n<\/ul>\n\n<h4>2.5.23<\/h4>\n\n<ul>\n<li>Author URI now points to the About page (https:\/\/rootlinkd.com\/about\/) so it differs from the Plugin URI<\/li>\n<li>No functional, database, option, rule, feature-gate or licensing changes<\/li>\n<\/ul>\n\n<h4>2.5.22<\/h4>\n\n<ul>\n<li>Corrected upgrade promotion text: removed \"Unlimited link rules\" from the PRO upsell (every edition, including Free, has unlimited rules); \"click tracking\" wording now reads \"click counts\" to match what each plan shows<\/li>\n<li>Settings help text and placeholders now use neutral examples (example.com) instead of real site and affiliate IDs<\/li>\n<li>No functional, database, option, rule, feature-gate or licensing changes<\/li>\n<\/ul>\n\n<h4>2.5.21<\/h4>\n\n<ul>\n<li>Renamed from DAWN Auto Links to rootlinkd (plugin name, slug, text domain and admin menu)<\/li>\n<li>Upgrade tab corrected: site counts per plan, removed support-level and \"unlimited rules\" claims<\/li>\n<li>No database, option, rule or settings changes; existing rules and settings carry over<\/li>\n<\/ul>\n\n<h4>2.5.20<\/h4>\n\n<ul>\n<li>Code-quality cleanup in paid editions (input sanitization, output escaping, inline script formatting); no Free changes<\/li>\n<\/ul>\n\n<h4>2.5.19<\/h4>\n\n<ul>\n<li>Plugin Check cleanup: removed a WordPress 6.1-only cache function from the settings migration so the plugin stays compatible with WordPress 5.0+<\/li>\n<li>Debug logging now writes only when WP_DEBUG and WP_DEBUG_LOG are enabled<\/li>\n<li>Tightened input sanitization on the Add\/Edit Rule form<\/li>\n<\/ul>\n\n<h4>2.5.18<\/h4>\n\n<ul>\n<li>Fixed Premium \u201cSkip first paragraphs\u201d leaking auto-links into Elementor opening content when DAL received a widget fragment before the assembled page content<\/li>\n<li>When first-paragraph exclusion is enabled, DAL now defers Elementor per-widget linking and applies the placement rule to assembled content instead<\/li>\n<li>Hardened paragraph-boundary handling so paragraph-less\/fewer-than-requested fallback fragments are left untouched rather than bypassing the exclusion<\/li>\n<\/ul>\n\n<h4>2.5.17<\/h4>\n\n<ul>\n<li>Documentation correction: clarified the 2.5.15 prefix-migration notes so they no longer claim six Premium AJAX\/admin-post hook registrations were migrated before the 2.5.16 fix<\/li>\n<li>No functional, database, Freemius SDK, or plan\/tier behavior changes from 2.5.16<\/li>\n<\/ul>\n\n<h4>2.5.16<\/h4>\n\n<ul>\n<li>Fixed six Premium AJAX\/admin-post hook registrations that were still listening on legacy <code>dal_*<\/code> action names after the 2.5.15 prefix migration<\/li>\n<li>Premium search, bulk toggle, click tracking, CSV export and CSV import now register the same <code>dawnal_*<\/code> action names used by their callers<\/li>\n<\/ul>\n\n<h4>2.5.15<\/h4>\n\n<ul>\n<li>Migrated functions, constants, globals, options, post meta, AJAX action callers and asset handles to the unique <code>dawnal_<\/code> prefix; six Premium AJAX\/admin-post hook registrations remained on legacy <code>dal_*<\/code> names and were corrected in 2.5.16; existing settings migrate automatically on update<\/li>\n<li>Main-title linking now escapes the full returned title<\/li>\n<li>Fixed rule URLs containing query strings (<code>&amp;<\/code>) being double-encoded in rendered links<\/li>\n<li>Updated Plugin URI and Author URI<\/li>\n<\/ul>\n\n<h4>2.5.14<\/h4>\n\n<ul>\n<li>Fixed Premium Add\/Edit Rule handling so duplicate keywords show an error instead of a false success message<\/li>\n<li>Added direct capability checks to Premium Analytics and Upgrade content handlers<\/li>\n<li>Treats leading-slash relative URLs as internal links in Premium URL classification<\/li>\n<li>Updated a stale Developer-only AJAX comment; no Free-tier behavior or Freemius packaging changes<\/li>\n<\/ul>","raw_excerpt":"Automatic internal linking for WordPress. Turn keywords into internal links with unlimited rules in Free.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/370153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=370153"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/vyscocity"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=370153"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=370153"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=370153"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=370153"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=370153"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=370153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}