{"id":338739,"date":"2026-08-16T04:07:48","date_gmt":"2026-08-16T04:07:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/external-links-to-footnotes\/"},"modified":"2026-08-16T04:07:40","modified_gmt":"2026-08-16T04:07:40","slug":"external-links-to-footnotes","status":"publish","type":"plugin","link":"https:\/\/ltz.wordpress.org\/plugins\/external-links-to-footnotes\/","author":1177975,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.9.31","stable_tag":"1.9.31","tested":"7.0.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"External Links to Footnotes","header_author":"Enok SEO","header_description":"Converts external links in post content into numbered footnotes while keeping internal links inline.","assets_banners_color":"b6c0c6","last_updated":"2026-08-16 04:07:40","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.enokseo.com\/seo-services\/wordpress-seo-plugins\/external-links-to-footnotes","header_author_uri":"https:\/\/www.enokseo.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":27,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.9.31":{"tag":"1.9.31","author":"parisvega","date":"2026-08-16 04:07:40"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3649265,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3649265,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3649265,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3649265,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.9.31"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3649265,"resolution":"1","location":"assets","locale":"","width":1280,"height":1160},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3649265,"resolution":"2","location":"assets","locale":"","width":1238,"height":496},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3649265,"resolution":"3","location":"assets","locale":"","width":1200,"height":891},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3649265,"resolution":"4","location":"assets","locale":"","width":1200,"height":1091}},"screenshots":{"1":"Frontend article with compact numbered references and the generated Footnotes section.","2":"Free-plugin Overview with processing status and optimized pages.","3":"Options for domains, placement, typography, post types, and link behavior.","4":"Stats summary with expandable operational and builder diagnostics."}},"plugin_section":[],"plugin_tags":[529,1850,175,1847,186],"plugin_category":[55],"plugin_contributors":[90908],"plugin_business_model":[],"class_list":["post-338739","plugin","type-plugin","status-publish","hentry","plugin_tags-content","plugin_tags-footnotes","plugin_tags-links","plugin_tags-references","plugin_tags-seo","plugin_category-seo-and-marketing","plugin_contributors-parisvega","plugin_committers-parisvega"],"banners":{"banner":"https:\/\/ps.w.org\/external-links-to-footnotes\/assets\/banner-772x250.png?rev=3649265","banner_2x":"https:\/\/ps.w.org\/external-links-to-footnotes\/assets\/banner-1544x500.png?rev=3649265","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/external-links-to-footnotes\/assets\/icon-128x128.png?rev=3649265","icon_2x":"https:\/\/ps.w.org\/external-links-to-footnotes\/assets\/icon-256x256.png?rev=3649265","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/external-links-to-footnotes\/assets\/screenshot-1.png?rev=3649265","caption":"Frontend article with compact numbered references and the generated Footnotes section."},{"src":"https:\/\/ps.w.org\/external-links-to-footnotes\/assets\/screenshot-2.png?rev=3649265","caption":"Free-plugin Overview with processing status and optimized pages."},{"src":"https:\/\/ps.w.org\/external-links-to-footnotes\/assets\/screenshot-3.png?rev=3649265","caption":"Options for domains, placement, typography, post types, and link behavior."},{"src":"https:\/\/ps.w.org\/external-links-to-footnotes\/assets\/screenshot-4.png?rev=3649265","caption":"Stats summary with expandable operational and builder diagnostics."}],"raw_content":"<!--section=description-->\n<p>External Links to Footnotes converts external links in article content into compact numbered references such as <code>[1]<\/code>. It keeps the original linked words in the article, then displays each external destination in a Footnotes list at the end of the content or at a shortcode location.<\/p>\n\n<p>The plugin is published by Enok SEO and runs entirely on your WordPress site.<\/p>\n\n<p>Key features:<\/p>\n\n<ul>\n<li>Keeps same-site, relative, and configured always-inline domains unchanged.<\/li>\n<li>Converts external text links into accessible numbered references.<\/li>\n<li>Preserves the original anchor text in the article body.<\/li>\n<li>Deduplicates repeated external URLs by default.<\/li>\n<li>Removes common tracking parameters from displayed Footnotes URLs by default.<\/li>\n<li>Supports automatic placement and <code>[enok_extref_resources]<\/code> placement.<\/li>\n<li>Supports posts, pages, and selected public post types.<\/li>\n<li>Supports URL, APA 7, MLA 9, Chicago\/Turabian, and IEEE-style display templates.<\/li>\n<li>Includes accessible marker labels, back links, selected-Footnote highlighting, focus styles, and stable IDs.<\/li>\n<li>Includes optional citation JSON-LD, disabled by default.<\/li>\n<li>Includes background indexing and local statistics with no external data transmission.<\/li>\n<li>Includes layout-level compatibility for popular page builders.<\/li>\n<\/ul>\n\n<p>Links remain inline when they are:<\/p>\n\n<ul>\n<li>Internal or relative URLs.<\/li>\n<li>On a domain listed under Internal \/ Always Inline Domains, including its subdomains.<\/li>\n<li>Amazon product or affiliate links when that option is enabled.<\/li>\n<li>Inside code, preformatted text, scripts, styles, known embeds, or plugin-owned Footnotes markup.<\/li>\n<li>Wrapped around an image.<\/li>\n<li>Marked with the configured exclude class.<\/li>\n<li><code>mailto:<\/code>, <code>tel:<\/code>, <code>javascript:<\/code>, or fragment-only links.<\/li>\n<\/ul>\n\n<p>The plugin modifies rendered content only. It does not rewrite post content stored in the database and does not modify destination URLs in the editor.<\/p>\n\n<h3>How to Use<\/h3>\n\n<p>The default configuration processes published posts and automatically appends a Footnotes section after the article content.<\/p>\n\n<p>To keep a destination inline, add its root domain under <strong>Internal \/ Always Inline Domains<\/strong>. Subdomains are included automatically. You can also add the <code>no-footnote<\/code> class to an individual link.<\/p>\n\n<p>To place Footnotes manually, change Append Mode to <strong>Shortcode Only<\/strong> and add:<\/p>\n\n<pre><code>[enok_extref_resources]\n<\/code><\/pre>\n\n<p>The shortcode renders the collected Footnotes list at that location without appending a duplicate section.<\/p>\n\n<h3>Builder Compatibility<\/h3>\n\n<p>The plugin processes complete content layouts rather than individual builder modules whenever the builder provides a layout-level render hook.<\/p>\n\n<ul>\n<li>WordPress Classic Editor and Block Editor: supported through <code>the_content<\/code>.<\/li>\n<li>Elementor: supported through its frontend content hook and wrapper-aware placement.<\/li>\n<li>Beaver Builder: supported through its complete layout content hook.<\/li>\n<li>Divi: supported through its complete layout render hook.<\/li>\n<li>Bricks: supported through its frontend content hook.<\/li>\n<li>WPBakery, Oxygen, and Avada: supported through the core content path and wrapper-aware placement.<\/li>\n<\/ul>\n\n<p>Builder diagnostics and a compatibility self-test are available under <strong>Footnotes &gt; Stats &gt; Diagnostics<\/strong>.<\/p>\n\n<p>For safety, HTML parsing fails open when one content value is larger than 2 MiB or contains more than 2,000 links. The original content remains unchanged. Developers can adjust these limits with <code>enok_extref_dom_max_content_bytes<\/code> and <code>enok_extref_dom_max_anchor_count<\/code>.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>External Links to Footnotes processes post content locally. The plugin does not send post content, link data, usage data, or personal information to external servers.<\/p>\n\n<p>The plugin stores settings, aggregate statistics, per-post indexing metadata, and temporary render-cache entries in the WordPress database. Plugin-owned options, scheduled events, and indexing metadata are removed when the plugin is uninstalled.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin ZIP through <strong>Plugins &gt; Add Plugin &gt; Upload Plugin<\/strong>, or install it from the WordPress Plugin Directory.<\/li>\n<li>Activate <strong>External Links to Footnotes<\/strong>.<\/li>\n<li>Open <strong>Footnotes &gt; Overview<\/strong> and confirm that Footnotes are enabled.<\/li>\n<li>Open <strong>Footnotes &gt; Options<\/strong> to adjust domains, post types, placement, typography, and link attributes.<\/li>\n<li>Allow the initial site scan to finish in the background so Overview and Stats counts become current.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20change%20links%20in%20the%20editor%20or%20database%3F\"><h3>Does this change links in the editor or database?<\/h3><\/dt>\n<dd><p>No. Links are classified and transformed only when WordPress renders eligible frontend content.<\/p><\/dd>\n<dt id=\"can%20i%20keep%20affiliate%20or%20partner%20links%20inline%3F\"><h3>Can I keep affiliate or partner links inline?<\/h3><\/dt>\n<dd><p>Yes. Add the root domain under <strong>Internal \/ Always Inline Domains<\/strong>, enable the Amazon option, or add the configured exclude class to an individual link.<\/p><\/dd>\n<dt id=\"are%20subdomains%20included%20when%20i%20add%20an%20always-inline%20domain%3F\"><h3>Are subdomains included when I add an always-inline domain?<\/h3><\/dt>\n<dd><p>Yes. Adding <code>example.com<\/code> also keeps links to <code>www.example.com<\/code>, <code>shop.example.com<\/code>, and other subdomains inline.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20linked%20images%20and%20embedded%20social%20posts%3F\"><h3>What happens to linked images and embedded social posts?<\/h3><\/dt>\n<dd><p>They remain unchanged. Image links and links inside recognized embed wrappers are not converted to Footnotes.<\/p><\/dd>\n<dt id=\"can%20i%20limit%20processing%20to%20posts%20only%3F\"><h3>Can I limit processing to posts only?<\/h3><\/dt>\n<dd><p>Yes. Choose the eligible post types under <strong>Footnotes &gt; Options<\/strong>. Posts are selected by default.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20wordpress%20cron%20is%20disabled%3F\"><h3>What happens if WordPress cron is disabled?<\/h3><\/dt>\n<dd><p>Frontend Footnotes still work. Background statistics require WordPress cron or a server cron that calls <code>wp-cron.php<\/code>; the Stats screen shows a warning when cron is disabled.<\/p><\/dd>\n<dt id=\"where%20can%20i%20get%20support%3F\"><h3>Where can I get support?<\/h3><\/dt>\n<dd><p>Visit the Enok SEO plugin page at https:\/\/www.enokseo.com\/seo-services\/wordpress-seo-plugins\/external-links-to-footnotes.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.9.31<\/h4>\n\n<ul>\n<li>Preserved non-tracking query parameters exactly when cleaning Footnotes URLs.<\/li>\n<li>Serialized statistics updates and added automatic recovery when simultaneous requests compete.<\/li>\n<li>Kept Overview requests read-only while background indexing is scheduled.<\/li>\n<li>Added safe HTML parsing limits, stronger mixed-layout exclusions, safer CSV exports, and context-aware render caching.<\/li>\n<li>Prefixed the manual placement shortcode as <code>[enok_extref_resources]<\/code> to prevent conflicts with other plugins.<\/li>\n<\/ul>\n\n<h4>1.9.30<\/h4>\n\n<ul>\n<li>Made release ZIP output reproducible across supported build systems.<\/li>\n<li>Kept all frontend and administration behavior unchanged.<\/li>\n<\/ul>\n\n<h4>1.9.29<\/h4>\n\n<ul>\n<li>Hardened filtered Footnotes markup and browser-rendered JSON payloads against unsafe output.<\/li>\n<li>Removed avoidable raw admin output while preserving extension hooks and existing frontend behavior.<\/li>\n<li>Prepared ownership metadata for the official Enok SEO WordPress.org account.<\/li>\n<\/ul>\n\n<h4>1.9.28<\/h4>\n\n<ul>\n<li>Limited the selected-Footnote highlight to the destination link instead of the full list row.<\/li>\n<li>Removed the inset edge accent so the highlight cannot overlap link text.<\/li>\n<li>Hardened production packaging with an explicit runtime-file allowlist and zero-warning Plugin Check gates.<\/li>\n<\/ul>\n\n<h4>1.9.27<\/h4>\n\n<ul>\n<li>Replaced the return glyph with a simpler text-style up arrow while preserving accessible labels and screen-reader text.<\/li>\n<li>Added a lightweight CSS-only highlight for the Footnote selected from an article marker.<\/li>\n<li>Added sticky-header scroll clearance and theme-overridable highlight variables without frontend JavaScript.<\/li>\n<\/ul>\n\n<h4>1.9.26<\/h4>\n\n<ul>\n<li>Prepared a clean standalone WordPress.org release package.<\/li>\n<li>Removed development-only content seeding from production WP-CLI commands.<\/li>\n<li>Added a unique plugin homepage, verified contributor metadata, focused documentation, and stricter release gates.<\/li>\n<li>Prevented background initial scans and simultaneous post-save events from double-counting statistics.<\/li>\n<li>Normalized production archive permissions for reliable installation across common hosting environments.<\/li>\n<li>Ensured uninstall removes temporary render-cache entries along with plugin settings and statistics.<\/li>\n<li>Preserved all frontend link-processing, shortcode, accessibility, stats, and builder-placement behavior.<\/li>\n<\/ul>\n\n<h4>1.9.25<\/h4>\n\n<ul>\n<li>Kept anchors containing images inline so linked images retain their destination and never become Footnotes.<\/li>\n<li>Added regression coverage for responsive linked images alongside normal external text links.<\/li>\n<\/ul>\n\n<p>Full release history is available in <code>changelog.txt<\/code>.<\/p>","raw_excerpt":"Turn external links into numbered Footnotes while keeping internal links inline and article content readable.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/338739","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=338739"}],"author":[{"embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/parisvega"}],"wp:attachment":[{"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=338739"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=338739"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=338739"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=338739"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=338739"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=338739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}