[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fu_HD0DHkLm7bOrFQuQxPJUqP_4m-3B4x8PRZXVXF1y0":3},{"slug":4,"display_name":5,"profile_url":6,"plugin_count":7,"total_installs":8,"avg_security_score":9,"avg_patch_time_days":10,"trust_score":11,"computed_at":12,"plugins":13},"seotune","SeoTune","https:\u002F\u002Fprofiles.wordpress.org\u002Fseotune\u002F",1,0,100,30,94,"2026-05-20T01:25:45.630Z",[14],{"slug":15,"name":16,"version":17,"author":5,"author_profile":6,"description":18,"short_description":19,"active_installs":8,"downloaded":20,"rating":9,"num_ratings":7,"last_updated":21,"tested_up_to":22,"requires_at_least":23,"requires_php":24,"tags":25,"homepage":31,"download_link":32,"security_score":9,"vuln_count":8,"unpatched_count":8,"last_vuln_date":33,"fetched_at":34},"seotune-search-insights","Seotune Search Insights","1.0.1","\u003Cp>Seotune Search Insights connects to Google Search Console, stores search analytics in your WordPress database, and provides an admin dashboard with KPIs, reports, and actionable SEO insights.\u003C\u002Fp>\n\u003Cp>For setup help, see the \u003Ca href=\"https:\u002F\u002Fseotune.app\u002Fdocumentation\u002F\" rel=\"nofollow ugc\">Documentation\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Without external accounts:\u003C\u002Fstrong> The plugin installs and activates like any other plugin, but \u003Cstrong>reports and sync require\u003C\u002Fstrong> a Google Cloud OAuth client and a Google account with access to a Search Console property for your site. Until you complete connection in \u003Cstrong>Seotune Search Insights \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Settings\u003C\u002Fstrong>, no Search Console data is fetched and dashboards stay empty.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Features\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Connection\u003C\u002Fstrong>: OAuth connection to GSC; automatic detection of the property matching your site domain (no manual property picker).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Dashboard\u003C\u002Fstrong>: Overview with clicks, impressions, CTR, position; charts; top queries and pages; recent alerts.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Keywords\u003C\u002Fstrong>: Filterable, sortable report with export to CSV.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Pages\u003C\u002Fstrong>: Same for page URLs with export to CSV.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Opportunities\u003C\u002Fstrong>: Two reports — high impressions \u002F low CTR, and keywords in positions 8–20 (quick wins); CSV export.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Cannibalization\u003C\u002Fstrong>: Queries with multiple pages competing; per-query URL list. Normalized by URL (fragment stripped).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Decay\u003C\u002Fstrong>: Pages with declining organic performance vs the previous period; filters, probable-cause hints, CSV export.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Content Refresh\u003C\u002Fstrong>: Pages prioritized for refresh (urgency levels) with reasons and metrics; CSV export.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Internal Links\u003C\u002Fstrong>: Internal linking opportunities from WordPress content and GSC signals; filters; CSV export.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Question Queries\u003C\u002Fstrong>: Question-style search queries with difficulty signals and metrics (from GSC data).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Alerts\u003C\u002Fstrong>: Automatic detection of position drop, CTR drop, traffic drop, impressions spike (runs after daily sync); list on the Dashboard and CSV export.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Export\u003C\u002Fstrong>: CSV export for queries, pages, opportunities, alerts, decay, content refresh, and internal linking (with filters where applicable; UTF-8 BOM for Excel).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Settings\u003C\u002Fstrong>: Google OAuth credentials, connect\u002Fdisconnect, Sync & Import (auto-import last 28 days on first connection, sync now 3\u002F7 days, import range in background), advanced import tuning, and import diagnostics.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Data is synced for the last 3 days on manual run or via a daily cron. After the \u003Cstrong>first successful connection\u003C\u002Fstrong> to Google Search Console, Seotune Search Insights automatically imports the last \u003Cstrong>28 days\u003C\u002Fstrong> so that the Dashboard and reports are not empty; you can then use Sync & Import to extend or restart the import for a larger range. After the first import, data is updated automatically every day via cron. Historical data can be imported in background batches (by default 7 days per batch and 1000 rows per DB write) that stay within sensible Google Search Console usage and are tuned for performance; you can adjust these values from Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Sync & Import if needed. The Sync & Import card also includes an \u003Cstrong>Import diagnostics\u003C\u002Fstrong> panel that shows recent import activity, cron status, and common issues (e.g. cron not running, API quota, PHP\u002FDB limits) without exposing sensitive query data. Custom database tables use a \u003Cstrong>plugin-specific\u003C\u002Fstrong> prefix (in addition to your WordPress table prefix).\u003C\u002Fp>\n\u003Ch3>Privacy\u003C\u002Fh3>\n\u003Cp>This plugin \u003Cstrong>does not\u003C\u002Fstrong> send your site’s front-end visitor traffic to Seotune Search Insights or to a proprietary Seotune API. It \u003Cstrong>does not\u003C\u002Fstrong> add visitor tracking, advertising pixels, or marketing analytics to the public site.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Declared service data (administrators)\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Google OAuth 2.0 & Search Console API\u003C\u002Fstrong> (required for core features): After you add OAuth credentials and connect, the server communicates with Google to authorize and to read Search Console data you are allowed to access. Tokens and imported metrics are stored \u003Cstrong>in your WordPress database\u003C\u002Fstrong>. Google’s terms and privacy policies apply to Google accounts and APIs: \u003Ca href=\"https:\u002F\u002Fpolicies.google.com\u002Fprivacy\" rel=\"nofollow ugc\">Google Privacy Policy\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fdevelopers.google.com\u002Fterms\" rel=\"nofollow ugc\">Google APIs Terms of Service\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Admin UI typography\u003C\u002Fstrong>: The dashboard uses the operating system’s UI fonts (system font stack in local CSS) in the \u003Cstrong>WordPress admin only\u003C\u002Fstrong>; it does not load third-party font stylesheets for Seotune Search Insights screens.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Responsibility\u003C\u002Fstrong>: Site owners should inform end users where required by law (e.g. privacy policy, cookie\u002Fconsent flows) that Search Console-related data is processed when administrators connect Google services.\u003C\u002Fp>\n\u003Cp>Technical map (endpoints, when requests run): \u003Ccode>documentation\u002Fnetwork-and-privacy.txt\u003C\u002Fcode>. Narrative guide: \u003Ccode>documentation\u002Findex.html\u003C\u002Fcode> (Privacy & third-party services).\u003C\u002Fp>\n\u003Ch3>Troubleshooting\u003C\u002Fh3>\n\u003Ch3>Import diagnostics panel\u003C\u002Fh3>\n\u003Cp>In \u003Cstrong>Seotune Search Insights \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Sync & Import\u003C\u002Fstrong> you will find an \u003Cstrong>Import diagnostics\u003C\u002Fstrong> box:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>A status badge (OK \u002F WARNING \u002F ERROR) with a short message and a hint.\u003C\u002Fli>\n\u003Cli>A table of the latest import jobs (manual sync, historical batches, internal links index), showing time, range, rows, duration, and result.\u003C\u002Fli>\n\u003Cli>A \u003Cstrong>Copy log for support\u003C\u002Fstrong> button that copies a plain-text summary (timestamps, job types, technical messages) which you can paste into a support ticket. No search queries, URLs, or user-identifiable data are included.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The panel is read-only and is meant to help you and support quickly understand what is happening on your server.\u003C\u002Fp>\n\u003Ch3>Common messages and what to do\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\n\u003Cp>\u003Cstrong>“Cron may not be running regularly” \u002F “No plugin cron jobs have run in the last few hours”\u003C\u002Fstrong>\u003Cbr \u002F>\nThis usually means WordPress cron is disabled or not being triggered. Check \u003Ccode>wp-config.php\u003C\u002Fcode> for \u003Ccode>DISABLE_WP_CRON\u003C\u002Fcode>. If it is set to \u003Ccode>true\u003C\u002Fcode>, configure a real server cron job that calls \u003Ccode>wp-cron.php\u003C\u002Fcode> every few minutes, or ask your hosting provider to set this up.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>“Historical import is marked as running, but no backfill batches have completed yet”\u003C\u002Fstrong>\u003Cbr \u002F>\nThe backfill state is “running” but no historical batches are logged. This is typically another sign that cron is not firing. Verify the cron configuration as above, then wait a few minutes and refresh the page.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>“Historical import seems stuck (no progress for a while)”\u003C\u002Fstrong>\u003Cbr \u002F>\nIf the progress bar stays at 0% or does not move for a long time, use \u003Cstrong>Stop \u002F Reset import\u003C\u002Fstrong> in the Sync & Import card, then start a new import with smaller batches (lower “Days per batch”). Also make sure cron is running.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Search Console quota \u002F rate limit errors in the log\u003C\u002Fstrong>\u003Cbr \u002F>\nIf recent log entries mention quota or rate-limit errors from the Google Search Console API, try lowering \u003Cstrong>Days per batch\u003C\u002Fstrong> for the historical import, and consider running imports at quieter times of day. If the issue persists, you may need to wait for quotas to reset or use a dedicated Google Cloud project.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>PHP execution time, memory, or database errors in the log\u003C\u002Fstrong>\u003Cbr \u002F>\nMessages mentioning maximum execution time, memory limits, or database connection issues indicate that the server limits are too strict for large imports. Try reducing \u003Cstrong>Days per batch\u003C\u002Fstrong> and, if needed, ask your hosting provider to increase PHP \u003Ccode>memory_limit\u003C\u002Fcode> and \u003Ccode>max_execution_time\u003C\u002Fcode>, or to relax database limits for background jobs.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Hosting requirements (for smooth import)\u003C\u002Fh3>\n\u003Cp>Seotune Search Insights’ \u003Cstrong>historical import\u003C\u002Fstrong> runs in the background via WordPress cron: each cron run processes one batch (a few days of data), then schedules the next. For the import to complete without blocking or stalling, the hosting environment must meet the following.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Default settings\u003C\u002Fstrong> (7 days per batch, 60 seconds delay between batches, 1000 rows per DB batch) are chosen to work on most hosting. On servers with more resources you can increase \u003Cstrong>Days per batch\u003C\u002Fstrong> and reduce \u003Cstrong>Delay between batches\u003C\u002Fstrong> in Seotune Search Insights \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Sync & Import for a faster import.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Minimum (plugin runs, import may be slow or need tuning)\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>PHP\u003C\u002Fstrong>: 8.0 or higher (required by the plugin).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>PHP memory_limit\u003C\u002Fstrong>: at least \u003Cstrong>128 MB\u003C\u002Fstrong>. Lower values can cause out-of-memory errors during import.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>PHP max_execution_time\u003C\u002Fstrong>: at least \u003Cstrong>60 seconds\u003C\u002Fstrong> for each cron run (single batch). Many shared hosts use 30s; that can be enough for small batches but may cause timeouts on heavier batches.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>WordPress cron\u003C\u002Fstrong>: Must run regularly (at least every 5–10 minutes). If \u003Ccode>DISABLE_WP_CRON\u003C\u002Fcode> is set to \u003Ccode>true\u003C\u002Fcode> in \u003Ccode>wp-config.php\u003C\u002Fcode>, a \u003Cstrong>system cron job\u003C\u002Fstrong> must call \u003Ccode>wp-cron.php\u003C\u002Fcode> (or trigger WordPress cron) every few minutes; otherwise the import never advances.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>MySQL\u003C\u002Fstrong>: Standard WordPress requirements; no extra extensions needed. The plugin writes data in batches (configurable: 100–2000 rows per batch).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Recommended (smooth, reliable import)\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>PHP memory_limit\u003C\u002Fstrong>: \u003Cstrong>256 MB\u003C\u002Fstrong> or more.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>PHP max_execution_time\u003C\u002Fstrong>: \u003Cstrong>120–300 seconds\u003C\u002Fstrong> for cron\u002FCLI so each batch has enough time to fetch data from Google and write to the database.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Cron\u003C\u002Fstrong>: Triggered every \u003Cstrong>1–2 minutes\u003C\u002Fstrong> (e.g. system cron every 2 minutes) so batches run frequently and the import completes in a reasonable time.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Network\u003C\u002Fstrong>: Outbound HTTPS to Google APIs (Search Console) without long timeouts or blocks.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Restrictive shared hosting (e.g. some Aruba, or low-resource plans)\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>On hosting with strict limits (low memory, 30s execution time, or cron that rarely runs), the import can block, time out, or appear stuck. To improve reliability:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>Cron\u003C\u002Fstrong>: Ensure WordPress cron actually runs. If the host uses \u003Ccode>DISABLE_WP_CRON\u003C\u002Fcode>, set up a real cron job (e.g. \u003Ccode>*\u002F5 * * * *\u003C\u002Fcode> to hit \u003Ccode>https:\u002F\u002Fyoursite.com\u002Fwp-cron.php?doing_wp_cron\u003C\u002Fcode> or run \u003Ccode>wp cron event run --due-now\u003C\u002Fcode> via WP-CLI every few minutes). Ask the host (e.g. Aruba) how to add a cron job and what the URL\u002Fcommand should be.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Days per batch\u003C\u002Fstrong>: In \u003Cstrong>Seotune Search Insights \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Sync & Import\u003C\u002Fstrong>, set \u003Cstrong>Days per batch\u003C\u002Fstrong> to \u003Cstrong>3–5\u003C\u002Fstrong> (or even 1 for very slow hosts). Smaller batches reduce memory and execution time per run.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Rows per DB batch\u003C\u002Fstrong>: In the same section, set \u003Cstrong>Rows per DB batch\u003C\u002Fstrong> to \u003Cstrong>500\u003C\u002Fstrong> (or 100 if you still see timeouts or DB errors). Lower values reduce load per request.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>PHP limits\u003C\u002Fstrong>: Ask the hosting provider to raise \u003Cstrong>memory_limit\u003C\u002Fstrong> to at least 256 MB and \u003Cstrong>max_execution_time\u003C\u002Fstrong> to at least 120 seconds for PHP (or for the cron\u002FCLI context, if they differentiate).\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>If the import still fails or gets stuck, use \u003Cstrong>Import diagnostics\u003C\u002Fstrong> in Settings (and \u003Cstrong>Copy log for support\u003C\u002Fstrong>) to see whether the cause is cron not running, timeouts, memory, or API quota; then adjust the above or contact the host with the requested limits.\u003C\u002Fp>\n\u003Ch3>Development\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Backend (Composer)\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>From the plugin root: \u003Ccode>composer install\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Keep the \u003Ccode>vendor\u002F\u003C\u002Fcode> directory when deploying (plugin requires it for the Google API client).\u003C\u002Fli>\n\u003Cli>Autoload: \u003Ccode>composer.json\u003C\u002Fcode> uses a \u003Cstrong>classmap\u003C\u002Fstrong> for \u003Ccode>includes\u002F\u003C\u002Fcode> (no PSR-4 path mismatch warnings).\u003C\u002Fli>\n\u003Cli>\u003Ccode>monolog\u002Fmonolog\u003C\u002Fcode> is required by \u003Ccode>google\u002Fapiclient\u003C\u002Fcode>; it stays in \u003Ccode>composer.json\u003C\u002Fcode> as \u003Ccode>^2.9\u003C\u002Fcode> to pin Monolog 2.x and remain compatible with PHP 8.0 (Monolog 3 needs PHP 8.1+).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Frontend (React)\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>From \u003Ccode>admin\u002Freact-app\u003C\u002Fcode>: \u003Ccode>npm install\u003C\u002Fcode> then \u003Ccode>npm run build\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Build outputs a \u003Cstrong>single\u003C\u002Fstrong> \u003Ccode>admin\u002Fassets\u002Fjs\u002Fadmin-app.js\u003C\u002Fcode> (IIFE bundle for classic \u003Ccode>wp_enqueue_script\u003C\u002Fcode>, no \u003Ccode>import.meta\u003C\u002Fcode>) plus \u003Ccode>admin\u002Fassets\u002Fjs\u002Fadmin-app.css\u003C\u002Fcode> (extracted CSS). Deploy both files; without the built JS, a placeholder script is loaded.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>WordPress.org \u002F source access:\u003C\u002Fstrong> The default release zip \u003Cstrong>includes\u003C\u002Fstrong> \u003Ccode>admin\u002Freact-app\u002F\u003C\u002Fcode> (Vite\u002FReact sources, \u003Ccode>package-lock.json\u003C\u002Fcode>; \u003Ccode>node_modules\u003C\u002Fcode> excluded — run \u003Ccode>npm ci\u003C\u002Fcode> inside \u003Ccode>admin\u002Freact-app\u003C\u002Fcode> to rebuild). Compiled \u003Ccode>admin-app.js\u003C\u002Fcode> + \u003Ccode>admin-app.css\u003C\u002Fcode> are also present. Optional: add a \u003Cstrong>public git mirror\u003C\u002Fstrong> URL below for convenience. Details: \u003Ccode>documentation\u002Fsource-and-build.txt\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Public source code repository:\u003C\u002Fstrong> \u003Cem>(Optional — add GitHub\u002FGitLab URL if you publish a mirror; not required for review because sources ship in the plugin package.)\u003C\u002Fem>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Release zip(s) (from plugin root, after \u003Ccode>composer\u003C\u002Fcode> \u002F \u003Ccode>npm\u003C\u002Fcode> as needed)\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Version bump & SVN:\u003C\u002Fstrong> see \u003Ccode>scripts\u002FREADME-release.txt\u003C\u002Fcode> (Stable tag, version constant in \u003Ccode>seotune-search-insights.php\u003C\u002Fcode> aligned with the plugin header, changelog, Subversion tag folder).\u003C\u002Fli>\n\u003Cli>\u003Ccode>npm run release\u003C\u002Fcode> — creates a zip in \u003Ccode>dist\u002F\u003C\u002Fcode> (includes \u003Ccode>admin\u002Freact-app\u003C\u002Fcode> sources; excludes \u003Ccode>node_modules\u003C\u002Fcode> and \u003Ccode>documentation\u002F\u003C\u002Fcode>).\u003C\u002Fli>\n\u003Cli>\u003Ccode>npm run release:src\u003C\u002Fcode> — creates only the \u003Ccode>*-with-sources.zip\u003C\u002Fcode> variant with the \u003Cstrong>same contents\u003C\u002Fstrong> (alias for workflows that expect the filename).\u003C\u002Fli>\n\u003Cli>\u003Ccode>npm run release:all\u003C\u002Fcode> — writes both filenames; the archives are identical (duplicate name for compatibility).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Translations (i18n)\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Text domain: \u003Ccode>seotune-search-insights\u003C\u002Fcode>. PHP uses \u003Ccode>load_plugin_textdomain\u003C\u002Fcode> with \u003Ccode>languages\u002F\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Admin UI strings use \u003Ccode>@wordpress\u002Fi18n\u003C\u002Fcode> (\u003Ccode>__()\u003C\u002Fcode>, \u003Ccode>sprintf\u003C\u002Fcode>, \u003Ccode>_n\u003C\u002Fcode>) in JSX; \u003Ccode>wp_set_script_translations()\u003C\u002Fcode> loads Jed JSON for the built script.\u003C\u002Fli>\n\u003Cli>Regenerate templates (from plugin root, WP-CLI):\u003Cbr \u002F>\n  wp i18n make-pot . languages\u002Fseotune-search-insights.pot –slug=seotune-search-insights –domain=seotune-search-insights –exclude=vendor,admin\u002Freact-app\u002Fnode_modules,dist,admin\u002Fassets,documentation,scripts\u003Cbr \u002F>\nUpdate \u003Ccode>languages\u002Fseotune-search-insights-en_US.po\u003C\u002Fcode> with \u003Ccode>wp i18n update-po languages\u002Fseotune-search-insights.pot languages\u002Fseotune-search-insights-en_US.po\u003C\u002Fcode>.\u003Cbr \u002F>\nBuild JS JSON (maps all React sources to the single bundle):\u003Cbr \u002F>\n  wp i18n make-json languages\u002Fseotune-search-insights-en_US.po –use-map=languages\u002Fwp-i18n-map.json –domain=seotune-search-insights –extensions=jsx,js\u003Cbr \u002F>\nCommit \u003Ccode>languages\u002Fseotune-search-insights.pot\u003C\u002Fcode>, \u003Ccode>languages\u002Fseotune-search-insights-en_US.po\u003C\u002Fcode>, \u003Ccode>languages\u002Fwp-i18n-map.json\u003C\u002Fcode>, and \u003Ccode>languages\u002Fseotune-search-insights-*-*.json\u003C\u002Fcode> with the plugin.\u003C\u002Fli>\n\u003C\u002Ful>\n","Search Console analytics and SEO insights in your WordPress admin. Connect with OAuth; data stored in your DB. Not affiliated with Google.",90,"2026-04-15T07:53:00.000Z","6.9.4","6.2","8.0",[26,27,28,29,30],"analytics","google-search-console","keywords","queries","seo","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fseotune-search-insights\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fseotune-search-insights.1.0.1.zip",null,"2026-04-16T10:56:18.058Z"]