{"id":384005,"date":"2026-10-18T01:24:22","date_gmt":"2026-10-18T01:24:22","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/jonnyad-seo-meta-tags-schema-sitemaps\/"},"modified":"2026-10-18T01:24:10","modified_gmt":"2026-10-18T01:24:10","slug":"jonnyad-seo-meta-tags-schema-sitemaps","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/jonnyad-seo-meta-tags-schema-sitemaps\/","author":23577903,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.4.3","stable_tag":"0.4.3","tested":"7.1.3","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"JonnyAD SEO - Meta Tags, Schema & Sitemaps","header_author":"JonnyAD","header_description":"Free WordPress SEO with meta tags, XML sitemaps, schema and social sharing. Connect JonnyAD to sync your business profiles.","assets_banners_color":"b6adf6","last_updated":"2026-10-18 01:24:10","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/jonnyad.com\/wordpress-seo-aeo-geo\/","header_author_uri":"https:\/\/jonnyad.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":47,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.4.3":{"tag":"0.4.3","author":"jonnyad","date":"2026-10-18 01:24:10","revision":3752457}},"upgrade_notice":{"0.3.0":"<p>Authors and contributors no longer change a page&#039;s indexing, robots or schema type; editors, the new SEO roles and administrators do. To let every author change them again, switch it on under JonnyAD SEO \u2192 Tools \u2192 Features.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3752462,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3752462,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3752462,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3752462,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.4.3"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[262246],"plugin_tags":[2988,6487,1117,186,6358],"plugin_category":[55],"plugin_contributors":[287304],"plugin_business_model":[],"class_list":["post-384005","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-meta-tags","plugin_tags-open-graph","plugin_tags-schema","plugin_tags-seo","plugin_tags-xml-sitemap","plugin_category-seo-and-marketing","plugin_contributors-jonnyad","plugin_committers-jonnyad"],"banners":{"banner":"https:\/\/ps.w.org\/jonnyad-seo-meta-tags-schema-sitemaps\/assets\/banner-772x250.png?rev=3752462","banner_2x":"https:\/\/ps.w.org\/jonnyad-seo-meta-tags-schema-sitemaps\/assets\/banner-1544x500.png?rev=3752462","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/jonnyad-seo-meta-tags-schema-sitemaps\/assets\/icon-128x128.png?rev=3752462","icon_2x":"https:\/\/ps.w.org\/jonnyad-seo-meta-tags-schema-sitemaps\/assets\/icon-256x256.png?rev=3752462","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>JonnyAD SEO is a free WordPress SEO plugin for meta tags, schema markup, XML sitemaps and social sharing. Set how your pages describe their content to search engines and social platforms, with controls for individual posts and your whole site.<\/p>\n\n<p>Use the SEO tools on their own, or connect your JonnyAD dashboard to keep your business identity and public social profiles in sync. Changes can flow in both directions, with conflicts shown for you to resolve.<\/p>\n\n<h4>A dashboard that measures, never scores<\/h4>\n\n<p>The JonnyAD SEO menu opens on a dashboard of facts about your site and the tasks they imply: whether search engines are allowed in, whether the sitemap is served, which recent pages have no description, what the home page will show, whether a robots.txt file on disk overrides the one WordPress serves. Each task names its evidence and the screen where it is settled, and disappears when the fact changes. There is no score, no percentage and no traffic light.<\/p>\n\n<h4>Content analysis with evidence<\/h4>\n\n<p>Set a focus keyphrase for a post and the editor lists what the text does and does not do for it: keyphrase in the search title, description, address, opening paragraph, subheadings and image text; how often it appears; whether another published page targets the same phrase; text length, heading structure, long paragraphs and sentences, a readability estimate, transition words, sentence openings and passive voice (in English, Portuguese, Spanish, French, German, Italian and Dutch), images without alt text, internal and external links. Each finding shows the sentence, heading, image or count it was decided on. The analysis runs on this site and updates while you type, through the site's own REST API; nothing is sent elsewhere. A page edited in Elementor is read from its saved widget data, and the widgets that are not read are named.<\/p>\n\n<h4>SEO titles and meta descriptions<\/h4>\n\n<p>Create title and description templates for the site, for each public post type and for each taxonomy's archives, and set a custom SEO title, meta description or canonical URL for each post, page or public custom post type; the per-post fields always win. The editor shows the search result and the shared card exactly as the plugin will print them, says where each value comes from (the field, the excerpt, the featured image, the site default) and how long it is, and updates while you type. Manage indexing rules for post types, archives and search from the Indexing &amp; sitemap screen.<\/p>\n\n<h4>Schema markup and XML sitemaps<\/h4>\n\n<p>Add structured data for your organisation or person, website, pages and articles. Public social profiles become sameAs links. JonnyAD SEO works with the WordPress XML sitemap, adds each post's last-modified date to it and excludes content covered by its privacy and noindex rules.<\/p>\n\n<h4>Social sharing and profile sync<\/h4>\n\n<p>Add Open Graph and X card metadata using the featured image or your site default. Optionally connect JonnyAD to bring in your business identity and sync public social profile links from the dashboard to WordPress and back.<\/p>\n\n<h4>Included SEO features<\/h4>\n\n<p>Every feature is listed in the FAQ, under \"What does JonnyAD SEO include?\".<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin contacts an external service only after you switch it on: JonnyAD after you press Connect JonnyAD (your browser opens JonnyAD with this site's address; the pairing code comes back to this site) or enter a pairing code generated in your JonnyAD dashboard, and IndexNow after you switch it on under Indexing and sitemaps. Before that, the plugin does not send requests to either service. Optional map and video embeds are separate browser requests, described below. The local health checks request only this site itself.<\/p>\n\n<p>Service: JonnyAD (https:\/\/jonnyad.com; API at https:\/\/app.jonnyad.com), operated by Alex Andrade de Oliveira, ABN 70 824 976 154.<\/p>\n\n<p>When connected, the site sends to JonnyAD over HTTPS:<\/p>\n\n<ul>\n<li>at pairing: the pairing code (made by JonnyAD for this site when you press Connect JonnyAD, or typed by you), this site's address and name, the plugin version and the WordPress version<\/li>\n<li>when you start the 10-day trial of SEO Premium from the Account and connection screen: your consent to its terms, with the site token; the trial is held by JonnyAD, one per site<\/li>\n<li>on each status check and sync: a site token (an Authorization header that identifies this site's connection), this site's address, and the social profile addresses and labels you declare on this site<\/li>\n<li>on token renewal: the current site token, to receive its replacement. The token has a limited life; the plugin renews it ahead of expiry during the scheduled sync or when you press Renew token. An expired token cannot be renewed and the settings page asks you to pair again.<\/li>\n<\/ul>\n\n<p>JonnyAD returns the workspace name, logo address, website and business location, whether the workspace's subscription includes SEO Premium, and the social profiles the workspace declares. A call happens when you press a button on the settings page (Connect, Check connection, Sync profiles now, Disconnect) and, after you connect, twice a day from the WP-Cron event described above until you disconnect or it pauses. There is no call before you connect, no call from a visitor's page load, and no tracking.<\/p>\n\n<p>Terms and privacy: https:\/\/jonnyad.com\/terms\/ and https:\/\/jonnyad.com\/privacy\/<\/p>\n\n<p>Opportunities (SEO Premium, through the connection): when you press Read this page, this site sends JonnyAD the address of the page you chose (one of this site's own published, public pages), its post id and focus keyphrase; JonnyAD reads that page of this site as visitors see it (respecting this site's robots.txt, and never following a redirect to another site) and keeps measurements, never its text. No address of any other website is sent, read or measured: this plugin asks JonnyAD for nothing but pages of the site it is installed on, and JonnyAD refuses any other address before it reads or counts anything. When you ask for a proposal, it also sends the field's current value. For a proposal on the page's text (a clearer paragraph, or an internal link), it sends the SHA-256 fingerprint of the stored content and the page's paragraphs of plain text, and, for a link, the addresses and titles of this site's other published pages. When you apply, revert or reject a proposal, it sends that decision (and, for an apply, the text applied). The post editor reads this page's proposals from this site's own REST route. Nothing is sent on a visitor's page load, and no AI runs on this site. Opening Pages and posts \u2192 Content plan on a connected site also reads what Opportunities measured for this site's own pages (the request carries only the site token; the answer is kept a minute).<\/p>\n\n<p>Set up with Nexus Cortex (through the connection): opening JonnyAD SEO \u2192 Set up with Nexus Cortex on a connected site, and pressing Apply selected there, reads from JonnyAD what your business confirmed for five of this site's settings (business name, short description, logo address, telephone, e-mail address), each with where and when it was confirmed and until when it holds, and the confirmed address for you to enter yourself. The request carries only the site token and this site's address; nothing is sent back, and nothing on this site changes until you select a value and apply it. A connection made before this version is refused by JonnyAD for this read and the screen asks you to pair again; an existing connection is never widened.<\/p>\n\n<p>Service: IndexNow (https:\/\/www.indexnow.org\/), a protocol run by participating search engines; this plugin sends to its shared endpoint https:\/\/api.indexnow.org\/indexnow, which passes the addresses to the engines that take part. Only after you switch it on under JonnyAD SEO \u2192 Indexing and sitemaps \u2192 IndexNow, and never from a site marked local or development (WP_ENVIRONMENT_TYPE) or one that discourages search engines: about a minute after a public, indexable page is published, changed or taken down, the site sends this site's host name, the addresses of those pages (each checked again right before the send; a page protected or kept out of search in the meantime is left out; an address IndexNow received less than five minutes ago waits until then, and nothing is sent while IndexNow has asked the site to slow down), and this site's IndexNow key with the address where the key is served. Nothing about visitors or editors is sent. Each send and its answer are listed on that screen. IndexNow Terms of Service: https:\/\/www.indexnow.org\/terms . Its Privacy policy is the Privacy section on that same page: https:\/\/www.indexnow.org\/terms#privacy . The receiving server also receives the originating server IP as part of the HTTPS request. Participating search engines apply their own terms and privacy policies to submitted URLs; see https:\/\/www.indexnow.org\/faq . This notification does not guarantee indexing.<\/p>\n\n<p>OpenStreetMap and Google Maps (several locations): only on a page where you placed the Location block with its map switched on, or [jonnyad_location map=\"1\"], for a location with coordinates, the visitor's browser loads the map from openstreetmap.org (https:\/\/www.openstreetmap.org\/, terms: https:\/\/wiki.osmfoundation.org\/wiki\/Terms_of_Use, privacy: https:\/\/osmfoundation.org\/wiki\/Privacy_Policy), as any embed does. A location's \"Directions\" link opens Google Maps (https:\/\/www.google.com\/maps) only when the visitor follows it, with that location's coordinates or address. The WordPress server sends nothing to either. Loading a map or following Directions sends the visitor's IP address, browser request details and selected location to the destination service. \"Nearest first\" uses the position the visitor grants through their browser only inside that browser. Google Maps terms: https:\/\/maps.google.com\/help\/terms_maps\/ ; Google privacy: https:\/\/policies.google.com\/privacy .<\/p>\n\n<p>YouTube and Vimeo: only on a page where you placed the Video block or [jonnyad_video] with a YouTube or Vimeo video, the visitor's browser loads that player from youtube-nocookie.com or player.vimeo.com, as any embed does; YouTube's thumbnail address (i.ytimg.com) appears in the page's structured data. The WordPress server does not upload videos or visitor records. The embedded player receives the visitor's IP address, browser request details and video identifier when it loads, and may use its own cookies or storage. YouTube terms: https:\/\/www.youtube.com\/t\/terms ; Google privacy: https:\/\/policies.google.com\/privacy . Vimeo terms: https:\/\/vimeo.com\/legal\/ ; privacy: https:\/\/vimeo.com\/legal\/privacy .<\/p>\n\n<p>Google (Search Console and Analytics) is never contacted by this plugin. The Google and results screen reads the state of Site Kit by Google from its public settings on this site and, when Site Kit is connected, your browser asks Site Kit's own REST routes on this site for the figures; Site Kit, with its own authorisation and its own privacy terms, is what talks to Google. Google terms: https:\/\/policies.google.com\/terms ; privacy: https:\/\/policies.google.com\/privacy .<\/p>\n\n<p>Algolia, through WP Search with Algolia: this plugin never contacts Algolia. With WP Search with Algolia active and \"Use JonnyAD SEO's decisions in Algolia\" switched on (JonnyAD SEO \u2192 Visibility and sitemap \u2192 Site search, off by default), the records WP Search with Algolia sends to your Algolia application carry two more values for each page, whether it is cornerstone content and how many published pages of this site link to it, and its index settings rank by them; pages kept out of search here are not sent. WP Search with Algolia sends them under your Algolia account (https:\/\/www.algolia.com\/) when that plugin indexes or updates content. Algolia terms: https:\/\/www.algolia.com\/policies\/terms ; privacy: https:\/\/www.algolia.com\/policies\/privacy .<\/p>\n\n<p>Documentation links: the crawler catalogue links to provider documentation (including https:\/\/developers.openai.com\/api\/docs\/bots) so administrators can read about crawler user agents. These are ordinary links, not API integrations: this plugin makes no request to OpenAI and sends no site or article content to those documentation URLs. A provider documentation page is opened only when the administrator follows its link.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>jonnyad-seo<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the Plugins screen.<\/li>\n<li>Open JonnyAD SEO in the admin menu. The dashboard lists what is in place and the next step; First-time setup walks through the identity, the profiles, indexing and Google; Search appearance, Structured data and Indexing and sitemaps hold the site settings; Tools imports from another SEO plugin and keeps a copy of the settings; Account and Premium optionally pairs the site with a JonnyAD workspace.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20does%20jonnyad%20seo%20include%3F\"><h3>What does JonnyAD SEO include?<\/h3><\/dt>\n<dd><ul>\n<li>a dashboard of measured facts and the tasks they imply, with evidence for each; a Search column in the posts list<\/li>\n<li>a search result and share card preview for every post, built from the same rules that print the head<\/li>\n<li>a focus keyphrase and a content analysis per post, every finding with its evidence, updated while you type; a column in the posts list<\/li>\n<li>document titles from a template, with a per-page override<\/li>\n<li>one meta description per page (per-page field, else the excerpt, never the whole body)<\/li>\n<li>one canonical per page, with a per-page override<\/li>\n<li>robots directives that respect Settings \u2192 Reading, private, draft, scheduled and password-protected content, your noindex rules for post types, archives and search, and a per-page checkbox<\/li>\n<li>privacy by default: a private, draft, scheduled, password-protected or previewed post gets no description, canonical, Open Graph, card or schema in its head, and its SEO fields are left out of REST reads by anyone who cannot edit it<\/li>\n<li>Open Graph and X card tags, with the featured image or a site default<\/li>\n<li>one schema.org graph per page (Organization or Person, WebSite, WebPage, Article) consistent with the head, with your social profiles as sameAs<\/li>\n<li>breadcrumbs by shortcode or template tag, with BreadcrumbList structured data only where the trail is shown<\/li>\n<li>redirects (301, 302, 307, 410) with loop and unsafe-destination refusal, and a bounded 404 log by path<\/li>\n<li>import from Yoast SEO, Rank Math, All in One SEO, SEOPress or The SEO Framework with a dry run first, in batches, every replaced value backed up and restorable, the other plugin's data untouched; a diagnostics file for support without the site token; redirect rules export and import<\/li>\n<li>internal link counts per page (sent and received) in the posts list, and the published pages nothing links to (orphaned content) as a view of the posts list and a list under Tools<\/li>\n<li>a bulk editor for the search title and description of many pages at once, which saves only what you changed and never writes over a change made meanwhile<\/li>\n<li>robots.txt lines added to WordPress's virtual file (with the search results kept from crawlers on request), an opt-in llms.txt, and opt-in IndexNow<\/li>\n<li>a content plan: topics with their page, keyphrase, intent, date and status, suggested from what the site measured (pages to review, addresses asked for that do not exist, shared keyphrases, pages nothing links to), each saved from the version you opened<\/li>\n<li>an opt-in site-wide structured data feed: the public graph of every indexable page in one place, in parts, with the business listed once<\/li>\n<li>addresses carrying parameters WordPress does not know sent to the clean address, and the site's search kept from spam, emoji and overlong terms (each off until switched on)<\/li>\n<li>server configuration for the redirect rules (Apache and Nginx), downloaded for whoever manages the server<\/li>\n<li>blocks for the block editor: FAQ, How-to, Table of contents, Related links, Sibling pages, Subpages, Reading time, Breadcrumbs and Video, each rendered by the site, with FAQPage, HowTo and VideoObject structured data only where they show<\/li>\n<li>per-term search title, meta description, canonical, share image and \"keep out of search\" on every category, tag and public term<\/li>\n<li>SEO Manager and SEO Editor roles; a page's indexing, robots and schema type are kept to editors and those roles unless you let every author change them<\/li>\n<li>image, news (named publication) and video (YouTube) sitemaps, named in robots.txt<\/li>\n<li>LocalBusiness structured data (address, hours, coordinates) for your own business, on every page as the site's publisher; FAQPage and Product structured data from entered facts, printed only where that content is shown<\/li>\n<li>the WordPress core sitemap, kept consistent with the rules above (password-protected posts, noindex post types and pages, and noindex category, tag and author archives are left out), with each post's last-modified date<\/li>\n<\/ul>\n\n<p>The local SEO tools work without an account or payment. Connecting a JonnyAD workspace is optional and required only for the workspace features described below.<\/p>\n\n<p><strong>One head owner.<\/strong> If Yoast SEO, Rank Math, All in One SEO, SEOPress or The SEO Framework is active, JonnyAD SEO prints no title, description, canonical, robots, Open Graph or schema of its own, so your pages never carry two of each. It tells you so on its settings page and never deactivates another plugin. The JonnyAD SEO Bridge (a small companion) yields to this plugin from Bridge 1.1.2; with an older Bridge, JonnyAD SEO unhooks the Bridge's head printer and probe at load so the page still carries one of each, and the Bridge stays active.<\/p>\n\n<p><strong>Optional connection to JonnyAD.<\/strong> If your business uses JonnyAD (https:\/\/jonnyad.com), you can connect this site to its workspace in one press (Connect JonnyAD: you choose the workspace in JonnyAD and come straight back, connected) or with a one-time pairing code generated in the JonnyAD dashboard. The connection lets the site:<\/p>\n\n<ul>\n<li>fill its publisher name and logo from the workspace when those are empty (a value you typed is never overwritten, and fields the workspace filled are cleared again when you disconnect unless you changed them)<\/li>\n<li>keep the list of social profiles in step with the workspace, in both directions, with conflicts shown for you to decide and never overwritten<\/li>\n<li>show whether the workspace's JonnyAD subscription includes SEO Premium, as verified by JonnyAD<\/li>\n<\/ul>\n\n<p>The profiles are bound to the workspace you paired with. When you disconnect, they are kept on this site and sent nowhere; pairing with another workspace starts from an empty list, and the previous profiles reach the new workspace only if you choose to import them.<\/p>\n\n<p>The connection never grants anyone the right to post on your social profiles. Social-network credentials stay in JonnyAD; the site never receives them.<\/p>\n\n<p><strong>Keeping in sync.<\/strong> After you connect, a WP-Cron event checks the connection and syncs the profiles twice a day. It stops by itself after five failed runs (the settings page says so and lets you resume), and it is cleared when you disconnect, when JonnyAD revokes the connection, and when you deactivate the plugin. WP-Cron runs in its own request; no visitor page load makes a network call.<\/p>\n\n<p><strong>Licence.<\/strong> Every feature in this plugin is free. SEO Premium is a JonnyAD service: the plugin shows it as included only when JonnyAD confirms a live subscription for the workspace, and shows \"not verified\" otherwise. It never unlocks anything from a plan name alone and never sells anything itself.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20a%20multisite%20network%3F\"><h3>Does it work on a multisite network?<\/h3><\/dt>\n<dd><p>Yes. Activate it for the whole network or site by site. Each site keeps its own settings, its own connection to JonnyAD and its own permissions; Network Admin \u2192 Settings \u2192 JonnyAD SEO lists the sites and chooses the site new sites start from.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20jonnyad%20account%3F\"><h3>Do I need a JonnyAD account?<\/h3><\/dt>\n<dd><p>No. The local SEO tools work without one. A connection is needed only to bring in your workspace identity, sync public social profiles and check your JonnyAD subscription status.<\/p><\/dd>\n<dt id=\"can%20i%20manage%20meta%20tags%2C%20schema%20and%20xml%20sitemaps%3F\"><h3>Can I manage meta tags, schema and XML sitemaps?<\/h3><\/dt>\n<dd><p>Yes. Set SEO titles and meta descriptions, canonical URLs and indexing rules. The plugin adds a schema graph and filters the WordPress core XML sitemap to respect its visibility settings.<\/p><\/dd>\n<dt id=\"can%20a%20developer%20change%20the%20structured%20data%3F\"><h3>Can a developer change the structured data?<\/h3><\/dt>\n<dd><p>Yes. The <code>jonnyad_seo_schema_graph<\/code> filter receives the list of nodes the plugin prints on a page and what that page is (its kind, address, title and types); return the list with nodes added, changed or removed. A result that is not a list of nodes, each with an <code>@type<\/code>, is ignored and the graph is printed unchanged; with WP_DEBUG on, WordPress names the mistake. Return an empty list to print no generated graph on that page.<\/p><\/dd>\n<dt id=\"can%20i%20sync%20social%20profiles%20from%20my%20jonnyad%20dashboard%3F\"><h3>Can I sync social profiles from my JonnyAD dashboard?<\/h3><\/dt>\n<dd><p>Yes, after connecting the site. Sync runs when you choose Sync profiles now and through WP-Cron twice a day. Edits can flow both ways; conflicting changes are shown for you to resolve. Only public profile links and labels are synced, not social-network passwords or OAuth tokens.<\/p><\/dd>\n<dt id=\"i%20already%20use%20yoast%20seo.%20what%20happens%3F\"><h3>I already use Yoast SEO. What happens?<\/h3><\/dt>\n<dd><p>JonnyAD SEO detects it and leaves the SEO head output to Yoast. It does not add a second set of title, description, canonical or schema tags. The connection and profile sync still work. Nothing is deactivated.<\/p><\/dd>\n<dt id=\"what%20does%20opportunities%20change%20on%20my%20site%3F\"><h3>What does Opportunities change on my site?<\/h3><\/dt>\n<dd><p>Nothing until you press Apply on a proposal, and then only that page's SEO title or meta description, exactly as shown. Apply refuses if the field changed since the proposal was written; Revert puts the previous value back and refuses if you edited the field after applying. The reading itself changes nothing. It needs SEO Premium (included in a paid JonnyAD plan, or bought for this site); your history stays readable and applied changes can be reverted without it.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20or%20jonnyad%20read%20other%20websites%3F\"><h3>Does this plugin or JonnyAD read other websites?<\/h3><\/dt>\n<dd><p>No. Opportunities reads only pages of the site it is installed on: the page you choose from your own published, public pages, as visitors see it. There is no field for another site's address, this site sends none, and JonnyAD refuses any address that is not a page of this site before it reads or counts anything. A redirect from your page or your robots.txt to another site is not followed. The daily self-check (Overview) reads this site's own robots.txt, home page and sitemap, and stops at any redirect to another site.<\/p><\/dd>\n<dt id=\"can%20i%20move%20from%20yoast%20seo%2C%20rank%20math%2C%20all%20in%20one%20seo%2C%20seopress%20or%20the%20seo%20framework%3F\"><h3>Can I move from Yoast SEO, Rank Math, All in One SEO, SEOPress or The SEO Framework?<\/h3><\/dt>\n<dd><p>Yes. JonnyAD SEO \u2192 Tools reads the titles, descriptions, canonicals, share images, noindex and nofollow marks, focus keyphrases, share and X titles, descriptions and images, page and article types and cornerstone marks those plugins stored per post (each has some of these; All in One SEO is read from its own table), and their separator, home title and description, templates, publisher and share defaults. A share or X text built from variables is not carried, because those fields print as written. Run the dry run first: it changes nothing and lists what would be written, what is kept because you already set a value here, and what is skipped because the source holds only a template. The import then writes in batches. It stores the backup of a page's or term's values before it changes any of them, and writes nothing it could not back up; a value someone saves while it runs is kept. Restore puts back only what the import wrote: a value changed since stays as it is, and the screen names anything it could not put back or whose backup it could not remove, so you can run it again. The other plugin's data is never changed or deleted and nothing is deactivated; it keeps printing the head until you deactivate it yourself. From Rank Math, its redirections come too: whenever Rank Math is not answering them (switched off, or waiting for its setup), this plugin answers them exactly as Rank Math did, asking the site's own filters of them as Rank Math asked them. One kind Rank Math itself answers differently once it has seen an address (a regex pattern written with an HTML entity in it) keeps answering only the addresses Rank Math had already answered; the dry run names it. From the Redirection plugin, its redirects come too, from the same Tools screen: each answers as Redirection 5.10.1 answered it (its letter case, trailing-slash and query settings, its patterns and their captures, its order, its error pages and \"do nothing\"), whenever Redirection is not answering them (deactivated, or switched off by its own setting). One that answers on a condition this plugin does not read (who is logged in, the referrer, the browser, a cookie and so on), sends to a random post or passes the request through is not carried, and the dry run says why.<\/p><\/dd>\n<dt id=\"where%20is%20the%20site%20token%20stored%3F\"><h3>Where is the site token stored?<\/h3><\/dt>\n<dd><p>In a WordPress option that is not autoloaded. It is sent only as an Authorization header over HTTPS, only to the JonnyAD server it was paired with, never in a URL, a log line or a page. It expires and is renewed automatically ahead of that; the settings page shows the date. Disconnecting revokes it in JonnyAD and deletes it here.<\/p><\/dd>\n<dt id=\"can%20another%20plugin%20change%20where%20the%20site%20token%20is%20sent%3F\"><h3>Can another plugin change where the site token is sent?<\/h3><\/dt>\n<dd><p>The server address is fixed to JonnyAD. A <code>JONNYAD_SEO_API_BASE<\/code> constant in wp-config.php (for a staging server) and the <code>jonnyad_seo_api_base<\/code> filter are accepted only for JonnyAD hosts or the host named by that constant; any other value is refused and the settings page says so. This guards against misconfiguration; it is not a defence against code that already runs on your site with full access.<\/p><\/dd>\n<dt id=\"is%20anything%20locked%20until%20i%20pay%3F\"><h3>Is anything locked until I pay?<\/h3><\/dt>\n<dd><p>No. The plugin in this directory is complete. JonnyAD's own paid service lives in JonnyAD, not in this plugin.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20contact%20jonnyad%20on%20its%20own%3F\"><h3>Does the plugin contact JonnyAD on its own?<\/h3><\/dt>\n<dd><p>Only after you connect, through a WP-Cron event twice a day, and only until you disconnect, JonnyAD revokes the connection, you deactivate the plugin, or five runs in a row fail. Re-activating the plugin puts the event back for a connection that is still live and not paused; a paused one stays paused until you resume it. Never from a visitor's page load.<\/p><\/dd>\n<dt id=\"does%20the%20content%20analysis%20send%20my%20text%20anywhere%3F\"><h3>Does the content analysis send my text anywhere?<\/h3><\/dt>\n<dd><p>No. It runs in PHP on this site. While you edit, the editor asks this site's own REST API (<code>\/wp-json\/jonnyad\/v1\/analysis<\/code>, signed with your session) for the analysis of the unsaved text; the answer is shown in the editor and nothing is stored until you save. No external service is involved.<\/p><\/dd>\n<dt id=\"does%20the%20dashboard%20give%20my%20site%20a%20score%3F\"><h3>Does the dashboard give my site a score?<\/h3><\/dt>\n<dd><p>No. It lists facts it measured on this site (indexing allowed, sitemap served, pages without a description, publisher logo present, and so on) and what each one implies, with the evidence. A score would hide which fact changed; the list shows it.<\/p><\/dd>\n<dt id=\"which%20post%20types%20get%20the%20seo%20fields%20and%20the%20preview%3F\"><h3>Which post types get the SEO fields and the preview?<\/h3><\/dt>\n<dd><p>Every public post type except media attachments, including custom post types registered by other plugins. Attachment pages are marked noindex by default because they duplicate the post that embeds the file.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20password-protected%20or%20private%20posts%3F\"><h3>What happens to password-protected or private posts?<\/h3><\/dt>\n<dd><p>They are noindex, their head carries no description, canonical, Open Graph, card or schema, their SEO fields are left out of REST reads by anyone who cannot edit them, and they are left out of the sitemap.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.4.3<\/h4>\n\n<ul>\n<li>Match every translation domain and bundled catalogue to the assigned WordPress.org slug.<\/li>\n<\/ul>\n\n<h4>0.4.2<\/h4>\n\n<ul>\n<li>Keep Tested up to in the readme only.<\/li>\n<li>Document external destinations, transmitted data, activation conditions, and terms\/privacy links, including IndexNow and optional browser embeds.<\/li>\n<\/ul>\n\n<h4>0.4.1<\/h4>\n\n<ul>\n<li>Opportunities reads only this site's own pages. The list of other sites' addresses is gone from the screen, from the request this site sends and from the service that answers it: this plugin asks JonnyAD to read nothing but one of this site's own published pages, as visitors see it, and JonnyAD refuses any other address before it reads or counts anything and never follows a redirect from this site's page or robots.txt to another site. Findings measure the page on its own; proposals are written from the page's own words and your approved facts. Earlier readings stay in History with what they recorded; nothing is read again.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<p>Account and connection: one press on Connect JonnyAD pairs the site (you choose the workspace in JonnyAD and come straight back; a pasted code still works); the screen says plainly whether the site is on Free, on its 10-day trial, on Premium, or expired; the Premium offer and the trial come from JonnyAD and are started or bought there, never in the plugin. On Free, on the trial and after it ends, the plan line also names the services JonnyAD lists, exactly as JonnyAD sends them, and names none while that list is empty. The connection line names a trial as a trial, held by JonnyAD for this site, never as the workspace\u2019s subscription.<\/p>\n\n<h4>0.3.3<\/h4>\n\n<p>On hosts without the optional PHP mbstring extension, the location finder and the CSV import now match a Greek word written in capitals against its lower-case form (a word-end \u03a3) and leave the Greenlandic \u0138 as it is, exactly as hosts with the extension do.<\/p>\n\n<h4>0.3.2<\/h4>\n\n<p>The location finder and the locations CSV import work on hosts without the optional PHP mbstring extension, matching any case in any script.<\/p>\n\n<h4>0.3.1<\/h4>\n\n<p>Fix the admin dashboard on hosts without the optional PHP mbstring extension.<\/p>\n\n<h4>0.3.0<\/h4>\n\n<p>Every change in 0.3.0 is listed in changelog.txt, which comes with the plugin. In short:<\/p>\n\n<ul>\n<li>Saving: the SEO box, every settings screen and the bulk editor write only the fields changed on their page, never over a value changed elsewhere meanwhile, and say \"saved\" only once the site holds it. On the SEO box and the settings screens, changes not yet saved are kept in this browser and offered back. The SEO fields are kept in WordPress's own revisions, and in the classic editor's autosave of a published page.<\/li>\n<li>Imports: from Yoast SEO, Rank Math, All in One SEO, SEOPress, The SEO Framework and Jetpack SEO Tools, per post, and per term and archive where the source keeps them; the redirections of Rank Math and the redirects of the Redirection plugin, each answering as its source answered it, or skipped with the reason. A dry run comes first, and Restore puts back only what the import wrote.<\/li>\n<li>The site checks itself once a day as a search engine sees it (robots.txt, the home page, the sitemap) and turns what it finds into tasks. A JonnyAD SEO box on WordPress's Dashboard, and two tests under Tools \u2192 Site Health.<\/li>\n<li>Beside WP Search with Algolia (off until switched on): pages kept out of search here are left out of its index, and cornerstone content and the most linked pages come first among equally relevant results.<\/li>\n<li>Key takeaways (connected sites): Nexus Cortex suggestions can write a short list of what a page says, from its own paragraphs, and place it at the top of the page as a heading and a list in the page's language; placed only on the exact version it was written for, with a revision kept, and reverted exactly. They can also rewrite the opening paragraph so that it says the focus keyphrase, with every fact kept, offered beside the editor's finding and on the suggestions screen. From the bulk editor, ask for a search title and a meta description for up to ten pages at once, each reviewed and applied one by one.<\/li>\n<li>Content plan: each topic opened shows its brief, built from what this site measured on the topic's page for the topic's keyphrase (what to write and where, with the evidence, fixes first) and a skeleton of headings by what the reader wants; a topic without a page gets the skeleton alone.<\/li>\n<li>Beside Jetpack: its share tags, archive canonical and SEO Tools stand aside where JonnyAD SEO prints its own, never opening a page Jetpack keeps out of search; its sitemap leaves out what is kept out here; Markdown posts are analysed as Jetpack saves them; the screens say whose llms.txt and robots.txt lines apply.<\/li>\n<li>Crawlers: robots.txt can keep out, by name, the crawlers of assistants' search answers and of model training (none until you tick it), and takes your own lines; llms.txt; IndexNow, paced as it asks (both off until switched on).<\/li>\n<li>Readability: the inclusive-language review (off until switched on) checks an English list of 217 terms written for this plugin, each found term with its sentence, alternatives and why; a phrase in which a term is fine is left alone. Suggestions, not rules.<\/li>\n<li>Sitemaps: a post, or every post in chosen categories and tags, can be left out of the news sitemap while it stays in search; the video sitemap can list Vimeo, Wistia, Dailymotion, VideoPress and TED videos too, with the page's featured image (off until switched on).<\/li>\n<li>WooCommerce: the shop takes the Shop page's own title, description and sharing fields; the cart, checkout and account pages stay out of every list, as WooCommerce keeps them out of search; a product shares its price and currency, its availability and its SKU.<\/li>\n<li>Structured data: several locations with a locator, categories, an open-now line and a CSV import, FAQ and How-to blocks, Product, video, the page and article type of each content type, and a site-wide feed (locations and the feed are off until switched on).<\/li>\n<li>Beside The Events Calendar, Seriously Simple Podcasting and WP Recipe Maker: their events, podcast episodes and series, and recipes join JonnyAD SEO's structured data instead of printing a separate copy.<\/li>\n<li>Content: the analysis finds a keyphrase in its other forms, gives each related keyphrase its own checks, and reads Spanish, French, German, Italian and Dutch with each language's own formula, transition words and passive voice; cornerstone content, pages to link to, internal link counts, orphaned content and a content plan.<\/li>\n<li>Redirects: 451, pattern rules, removed pages, and the rules as Apache and Nginx configuration.<\/li>\n<li>Set up with Nexus Cortex (connected sites): review the suggestions beside where each came from, apply the ones you select, and undo any of them.<\/li>\n<li>Every screen: a new look, plain words, icons beside every label and calmer motion. Also roles for SEO managers and editors, multisite, WooCommerce's product brand and GTIN, Advanced Custom Fields text, images and links in the analysis, read as you type, and a privacy policy text.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>JonnyAD SEO is a top-level menu: Dashboard, Search appearance, Indexing &amp; sitemap, Connection. Bookmarks to the old Settings page land on the dashboard.<\/li>\n<li>Dashboard: measured facts about the site and the tasks they imply, each with its evidence and the screen where it is settled; no score.<\/li>\n<li>Post editor: a search result and share card preview from the same rules that print the head, with the source and length of each value, updated while you type; on every public post type except media.<\/li>\n<li>Posts list: a Search column saying where each post's description comes from and whether it is noindex.<\/li>\n<li>Sitemap: each post entry carries its last-modified date.<\/li>\n<li>Settings are saved per screen; saving Search appearance never resets the indexing rules and the reverse.<\/li>\n<li>Fixed: a title starting with a curly quote or other multibyte punctuation was corrupted by the separator trim.<\/li>\n<li>Fixed: a static front page ignored the configured home page title and description (it is both the front page and a page; the front page is now asked first). Without configured values it is its own page.<\/li>\n<li>Fixed: the separate posts page printed the home page's title and description under its own address and a WebPage node pointing at the home address; it is now its own page, with its canonical (page number included) in the schema.<\/li>\n<li>Autosaves and revisions never receive the SEO fields.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release: titles, meta description, canonical, robots, Open Graph, X cards, schema graph, sitemap rules, head-owner detection, JonnyAD pairing, two-way social profile sync.<\/li>\n<\/ul>","raw_excerpt":"Free WordPress SEO with meta tags, XML sitemaps, schema and social sharing. Connect JonnyAD to sync your business profiles.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/384005","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=384005"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jonnyad"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=384005"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=384005"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=384005"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=384005"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=384005"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=384005"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}