{"id":238878,"date":"2025-11-02T19:35:19","date_gmt":"2025-11-02T19:35:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/meshr-ai-internal-linking\/"},"modified":"2026-04-19T20:51:40","modified_gmt":"2026-04-19T20:51:40","slug":"meshr-ai-internal-linking","status":"publish","type":"plugin","link":"https:\/\/kin.wordpress.org\/plugins\/meshr-ai-internal-linking\/","author":23314577,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.2.0","stable_tag":"1.2.0","tested":"6.8.5","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"WPLink - AI Internal Linking","header_author":"WPLink","header_description":"AI-powered automated internal linking for WordPress. Works with Yoast SEO, RankMath & all major SEO plugins. Setup in 2 minutes.","assets_banners_color":"28203b","last_updated":"2026-04-19 20:51:40","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wplink.ai\/wordpress\/docs","header_author_uri":"https:\/\/wplink.ai","rating":0,"author_block_rating":0,"active_installs":0,"downloads":343,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"linkwithmeshr","date":"2025-11-02 19:47:32"},"1.1.0":{"tag":"1.1.0","author":"linkwithmeshr","date":"2026-04-16 22:27:31"},"1.1.1":{"tag":"1.1.1","author":"linkwithmeshr","date":"2026-04-17 13:39:24"},"1.2.0":{"tag":"1.2.0","author":"linkwithmeshr","date":"2026-04-19 20:51:40"}},"upgrade_notice":{"1.2.0":"<p>Adds native Elementor, WPBakery, and Beaver Builder support. All existing integrations continue to work.<\/p>","1.1.1":"<p>WPLink branding update. Webhook now accepts WPLINK_WEBHOOK_SECRET and X-WPLink-Signature (legacy constants still work).<\/p>","1.1.0":"<p>Renamed to WPLink and adds native Bricks Builder support. Existing <code>\/meshr\/v1\/<\/code> endpoints continue to work.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3508946,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3508946,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0","1.1.1","1.2.0"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[2353,569,19933,1084,186],"plugin_category":[55],"plugin_contributors":[250138],"plugin_business_model":[],"class_list":["post-238878","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-automation","plugin_tags-internal-linking","plugin_tags-page-builder","plugin_tags-seo","plugin_category-seo-and-marketing","plugin_contributors-linkwithmeshr","plugin_committers-linkwithmeshr"],"banners":{"banner":"https:\/\/ps.w.org\/meshr-ai-internal-linking\/assets\/banner-772x250.png?rev=3508946","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/meshr-ai-internal-linking\/assets\/icon-256x256.png?rev=3508946","icon_2x":"https:\/\/ps.w.org\/meshr-ai-internal-linking\/assets\/icon-256x256.png?rev=3508946","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Formerly known as Meshr - AI Internal Linking.<\/strong> This plugin was rebranded to WPLink in 2026. The plugin slug (<code>meshr-ai-internal-linking<\/code>) and the original <code>\/meshr\/v1\/<\/code> REST API namespace are preserved for backwards compatibility; a new <code>\/wplink\/v1\/<\/code> namespace has been added alongside.<\/p>\n\n<p>WPLink - AI Internal Linking is the companion WordPress plugin for the WPLink desktop app. It exposes REST API endpoints that let WPLink discover your site, extract content from supported page builders (Bricks, Elementor, WPBakery, and Beaver Builder), and safely insert internal links - including into pages that store content in page-builder metadata rather than <code>post_content<\/code>.<\/p>\n\n<p>Unlike keyword-based linkers, WPLink uses semantic AI analysis to understand content meaning and context. Most websites miss 60%+ of their internal linking potential; WPLink finds them automatically and this plugin is what lets the AI reach content stored inside page builders.<\/p>\n\n<p><strong>Why WordPress Users Choose WPLink:<\/strong><\/p>\n\n<ul>\n<li><strong>Native Bricks Builder support<\/strong> - Reads and writes <code>_bricks_page_content_2<\/code> so Bricks pages are fully indexed and linkable<\/li>\n<li><strong>Native Elementor support<\/strong> - Reads and writes the <code>_elementor_data<\/code> JSON tree so Elementor pages work like standard posts<\/li>\n<li><strong>Native WPBakery support<\/strong> - Reads and links directly inside <code>[vc_column_text]<\/code> shortcode blocks in <code>post_content<\/code><\/li>\n<li><strong>Native Beaver Builder support<\/strong> - Reads and writes the <code>_fl_builder_data<\/code> PHP object graph so Beaver Builder modules are fully supported<\/li>\n<li><strong>Yoast SEO &amp; RankMath compatible<\/strong> - Works alongside your existing SEO plugins<\/li>\n<li><strong>Custom post type support<\/strong> - Analyzes and links all your content types<\/li>\n<li><strong>2-minute setup<\/strong> - Connect your site via Application Passwords, no coding required<\/li>\n<li><strong>AI-powered analysis<\/strong> - Semantic topic clustering and context-aware link scoring (done in the WPLink desktop app)<\/li>\n<li><strong>Automatic updates<\/strong> - Link changes are applied directly to your WordPress posts and pages via secure REST API<\/li>\n<\/ul>\n\n<p>This lightweight plugin provides REST API endpoints that allow WPLink to discover your site, read content from standard posts and page-builder-built pages, and apply internal links safely using builder-native write paths.<\/p>\n\n<p><strong>Supported page builders:<\/strong><\/p>\n\n<ul>\n<li><strong>Bricks Builder<\/strong> - content in <code>_bricks_page_content_2<\/code><\/li>\n<li><strong>Elementor<\/strong> - content in <code>_elementor_data<\/code><\/li>\n<li><strong>WPBakery Page Builder<\/strong> - content in <code>post_content<\/code> as shortcodes (<code>[vc_column_text]<\/code>)<\/li>\n<li><strong>Beaver Builder<\/strong> - content in <code>_fl_builder_data<\/code><\/li>\n<li><strong>Gutenberg \/ Classic Editor<\/strong> - standard <code>post_content<\/code><\/li>\n<\/ul>\n\n<p><strong>Features:<\/strong><\/p>\n\n<ul>\n<li><strong>Multi-builder support<\/strong> - Bricks, Elementor, WPBakery, Beaver Builder, Gutenberg, and Classic Editor<\/li>\n<li><strong>Works with Yoast SEO &amp; RankMath<\/strong> - Compatible with major WordPress SEO plugins<\/li>\n<li><strong>AI-powered semantic linking<\/strong> - Understands content meaning, not just keywords (analysis runs in the WPLink desktop app)<\/li>\n<li><strong>Custom post type support<\/strong> - Analyzes and links all your WordPress content types<\/li>\n<li><strong>Bulk link management<\/strong> - Review and approve AI suggestions from the WPLink app<\/li>\n<li><strong>Orphan page detection<\/strong> - Find and fix pages with zero internal links<\/li>\n<li><strong>2-minute setup<\/strong> - Configure entirely via WordPress Application Passwords<\/li>\n<li><strong>REST API integration<\/strong> - Secure, automatic link updates without manual work<\/li>\n<li><strong>Minimal footprint<\/strong> - Doesn't store data locally<\/li>\n<li><strong>Security-first design<\/strong> - Proper capability checks and sanitization<\/li>\n<\/ul>\n\n<p><strong>How It Works:<\/strong><\/p>\n\n<ol>\n<li>Generate a WordPress Application Password in your user profile<\/li>\n<li>Configure the credentials in the WPLink desktop app<\/li>\n<li>WPLink discovers your site and reads from and writes to Bricks, Elementor, WPBakery, Beaver Builder, Gutenberg, and classic posts<\/li>\n<li>All communication happens securely via WordPress REST API with Basic Authentication<\/li>\n<\/ol>\n\n<h3>API Endpoints<\/h3>\n\n<p>All endpoints are available under both <code>\/wp-json\/wplink\/v1\/<\/code> and <code>\/wp-json\/meshr\/v1\/<\/code> (legacy).<\/p>\n\n<p><strong>Health Check<\/strong><\/p>\n\n<pre><code>GET \/wp-json\/wplink\/v1\/check\n<\/code><\/pre>\n\n<p>Returns site info, plugin version, and capability flags (including which builders are detected and supported).<\/p>\n\n<p><strong>Get Post Content (builder-aware)<\/strong><\/p>\n\n<pre><code>GET \/wp-json\/wplink\/v1\/posts\/{post_id}\/content\n<\/code><\/pre>\n\n<p>Returns extracted plain text and an element-level breakdown. Routes to the appropriate builder handler (Bricks, Elementor, WPBakery, Beaver Builder) or falls back to <code>post_content<\/code> for Gutenberg\/classic posts.<\/p>\n\n<p><strong>Insert Link (builder-aware)<\/strong><\/p>\n\n<pre><code>POST \/wp-json\/wplink\/v1\/posts\/{post_id}\/insert-link\n<\/code><\/pre>\n\n<p>Request body:\n    <code>json\n{\n  \"keyword\": \"digital marketing\",\n  \"target_url\": \"https:\/\/example.com\/services\/digital-marketing\/\",\n  \"occurrence\": 1\n}<\/code><\/p>\n\n<p>For Bricks pages, finds the keyword in a text-bearing element and wraps it with an anchor inside the Bricks JSON. For Elementor, mutates the <code>_elementor_data<\/code> widget tree. For WPBakery, replaces inside <code>[vc_column_text]<\/code> blocks. For Beaver Builder, modifies <code>_fl_builder_data<\/code> module settings. Cache regeneration is triggered automatically for each builder.<\/p>\n\n<p><strong>Bulk Link Update (URL migration)<\/strong><\/p>\n\n<pre><code>POST \/wp-json\/wplink\/v1\/bulk-link-update\n<\/code><\/pre>\n\n<p>Unchanged from 1.0.0. Used for URL-replacement migrations in standard <code>post_content<\/code>.<\/p>\n\n<p><strong>Webhook (Optional)<\/strong><\/p>\n\n<pre><code>POST \/wp-json\/wplink\/v1\/webhook\n<\/code><\/pre>\n\n<p>Requires HMAC signature verification. Configure <code>WPLINK_WEBHOOK_SECRET<\/code> in <code>wp-config.php<\/code>. Requests include an <code>X-WPLink-Signature<\/code> header. The legacy <code>MESHR_WEBHOOK_SECRET<\/code> constant and <code>X-Meshr-Signature<\/code> header are still accepted.<\/p>\n\n<h3>Privacy Policy<\/h3>\n\n<p>This plugin does not collect, store, or transmit any personal data. All communication occurs between your WordPress site and the WPLink desktop app via REST API endpoints. No external services are contacted by the plugin itself.<\/p>\n\n<h3>Support<\/h3>\n\n<p>For support, documentation, and more information, visit:<\/p>\n\n<ul>\n<li><a href=\"https:\/\/wplink.ai\/wordpress\/docs\">WPLink Documentation<\/a><\/li>\n<li><a href=\"https:\/\/wplink.ai\/support\">WPLink Support<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/meshr-ai-internal-linking<\/code> directory, or install the plugin through the WordPress plugins screen directly.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<li>Generate a WordPress Application Password:\n\n<ul>\n<li>Go to Users \u2192 Your Profile<\/li>\n<li>Scroll to \"Application Passwords\"<\/li>\n<li>Enter a name (e.g., \"WPLink\") and click \"Add New Application Password\"<\/li>\n<li>Copy the generated username and password<\/li>\n<\/ul><\/li>\n<li>In the WPLink desktop app, enter your WordPress site URL and the Application Password credentials<\/li>\n<li>WPLink will automatically discover your site, including pages built with Bricks, Elementor, WPBakery, and Beaver Builder<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20store%20any%20data%3F\"><h3>Does this plugin store any data?<\/h3><\/dt>\n<dd><p>No. This plugin does not store any data locally. It only provides API endpoints for WPLink to communicate with your WordPress site.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20configure%20anything%20in%20wordpress%3F\"><h3>Do I need to configure anything in WordPress?<\/h3><\/dt>\n<dd><p>No admin UI is required. You only need to generate a WordPress Application Password in your user profile and provide it to the WPLink desktop app.<\/p><\/dd>\n<dt id=\"is%20my%20site%20secure%3F\"><h3>Is my site secure?<\/h3><\/dt>\n<dd><p>Yes. The plugin uses WordPress's built-in authentication system (Application Passwords), proper capability checks (<code>current_user_can<\/code>), and sanitizes all inputs. Webhook endpoints use HMAC signature verification when enabled.<\/p><\/dd>\n<dt id=\"can%20i%20test%20the%20connection%3F\"><h3>Can I test the connection?<\/h3><\/dt>\n<dd><p>Yes. Once configured, you can test the health check endpoint:<\/p>\n\n<pre><code>GET https:\/\/your-site.com\/wp-json\/wplink\/v1\/check\n<\/code><\/pre>\n\n<p>You'll need to authenticate using Basic Auth with your Application Password credentials.<\/p><\/dd>\n<dt id=\"how%20do%20i%20enable%20webhook%20support%3F\"><h3>How do I enable webhook support?<\/h3><\/dt>\n<dd><p>Add this constant to your <code>wp-config.php<\/code> file:<\/p>\n\n<pre><code>define( 'WPLINK_WEBHOOK_SECRET', 'your-secret-key-here' );\n<\/code><\/pre>\n\n<p>Replace <code>your-secret-key-here<\/code> with a strong, random string. Webhook requests will include an <code>X-WPLink-Signature<\/code> header for verification.<\/p>\n\n<p>Note: the legacy constant <code>MESHR_WEBHOOK_SECRET<\/code> is still accepted for backwards compatibility.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added native Elementor support: reads and writes <code>_elementor_data<\/code> JSON tree<\/li>\n<li>Added native WPBakery support: reads and inserts links inside <code>[vc_column_text]<\/code> shortcode blocks<\/li>\n<li>Added native Beaver Builder support: reads and writes <code>_fl_builder_data<\/code> PHP object graph<\/li>\n<li>Capability flags in <code>\/check<\/code> now report <code>supports_wpbakery<\/code>, <code>supports_beaver<\/code>, <code>wpbakery_detected<\/code>, <code>beaver_detected<\/code><\/li>\n<li>Builder detection extended: WPBakery and Beaver Builder posts are now auto-detected and routed correctly<\/li>\n<li>Plugin version bumped to 1.2.0<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Updated plugin icons and banner to WPLink branding<\/li>\n<li>Webhook: accept WPLINK_WEBHOOK_SECRET (preferred) alongside MESHR_WEBHOOK_SECRET (legacy)<\/li>\n<li>Webhook: accept X-WPLink-Signature header alongside legacy X-Meshr-Signature<\/li>\n<li>readme: update examples to use \/wplink\/v1\/ namespace<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Renamed to WPLink - AI Internal Linking<\/li>\n<li>Added native Bricks Builder support: reads and writes <code>_bricks_page_content_2<\/code><\/li>\n<li>New endpoint: <code>GET \/posts\/{id}\/content<\/code> returns builder-aware extracted text<\/li>\n<li>New endpoint: <code>POST \/posts\/{id}\/insert-link<\/code> safely inserts a link into Bricks or standard posts<\/li>\n<li>Routes now registered under both <code>\/meshr\/v1\/<\/code> (legacy) and <code>\/wplink\/v1\/<\/code> (preferred)<\/li>\n<li>Backwards compatible: existing integrations continue to work without changes<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Health check endpoint (<code>GET \/meshr\/v1\/check<\/code>)<\/li>\n<li>Bulk link update endpoint (<code>POST \/meshr\/v1\/bulk-link-update<\/code>)<\/li>\n<li>Optional webhook endpoint with HMAC verification (<code>POST \/meshr\/v1\/webhook<\/code>)<\/li>\n<\/ul>","raw_excerpt":"AI-powered internal linking for WordPress with page builder support.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/kin.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/238878","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kin.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/kin.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/kin.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=238878"}],"author":[{"embeddable":true,"href":"https:\/\/kin.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/linkwithmeshr"}],"wp:attachment":[{"href":"https:\/\/kin.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=238878"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/kin.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=238878"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/kin.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=238878"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/kin.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=238878"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/kin.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=238878"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/kin.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=238878"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}