Directory / plugin
AudiScale Connector
v6.4.0 · by platinumwp
Server-side companion for AudiScale: SEO tags, redirects, and an enumerated catalog of operations over an HMAC-signed channel.
About this plugin
AudiScale Connector is the companion component for the hosted AudiScale service (https://audiscale.com). It unlocks the SEO actions that WordPress core and the standard REST API do not allow — most notably printing a <meta name="description"> tag in the <head> without forcing you to install another SEO plugin.
Service disclosure (SaaS)
This plugin communicates with the third-party AudiScale service. No data is
sent until you have explicitly paired your site from your AudiScale dashboard.
Once paired, AudiScale can remotely apply a fixed catalog of operations
(listed below), each of which is:
- signed with HMAC-SHA256 using a per-site secret (rotatable and revocable);
- subject to a WordPress capability check (
manage_options); - logged (who, what, when, before/after value);
- reversible where possible (draft/revision, dry-run).
The plugin never executes arbitrary code: there is no code-evaluation
endpoint and no remote code download. “Almost everything” means an enumerated,
hand-coded, audited catalog.
- Terms of service: https://audiscale.com/en/terms
- Privacy policy: https://audiscale.com/en/privacy
Operation catalog
- SEO /
<head>: meta description, SEO title, canonical, robots, Open Graph, Twitter cards, native sitemap exclusion, switching the XML sitemap back on (Yoast SEO, Rank Math, SEOPress or WordPress core) - Redirects: create / update / delete (301, 302, 410)
- Structured data: per-content JSON-LD
- Content & media: field updates (via revision), draft creation, alternative text, status change (publish/draft only), move to trash and restore from it, listing of trashed contents, broken link fix (replace with another URL of the site, or remove the link and keep its text; block editor, classic editor, Elementor, Beaver Builder, Divi 4, WPBakery), main heading fix (add the missing h1, or demote the extra ones to h2; block and classic editor)
- Taxonomies: read the taxonomies and terms a post type declares, assign existing terms to a content (never creates a term)
- Site (read-only): robots.txt, public settings, content inventory, theme design system (global styles presets, theme supports, block patterns)
- Site (files served by WordPress, never written to disk): robots.txt, removal of a site-wide
Disallow: /from it,/llms.txt - Draft preview: short-lived signed link rendering one draft in the real theme (never published, noindex)
- Site (footer): marked HTML block printed on
wp_footer(badge install / removal) - Plugins: inventory with update availability, forced update check, update of an installed plugin (the installed version is archived first), rollback to the archived version
- Performance: preconnect / font preload hints, Google Fonts
display=swapand self-hosting, removal of emojis / oEmbed / jQuery Migrate / Dashicons for visitors, script defer / async / delay until interaction, per-page removal of unused scripts and styles, scripts and styles inventory, server environment report — each one reversible, previewable before it goes live, and switched off at once from the Connection tab - Page builders: read and update a page in the builder it is edited with (Elementor, Divi, WPBakery, Beaver Builder), and create a new page directly in that builder
- Crawl log (read-only): which pages search and AI crawlers request, with the HTTP status
- Users (optional, see below): list the site’s users, change a role, sign a user out, revoke application passwords, send WordPress’s password-reset email, require a new password at next login, disable / re-enable login, delete with post reassignment
- Connector: status, pairing, audit log
The plugin detects Yoast, Rank Math and SEOPress and stands down
automatically if one of them already manages the <head>, to avoid duplicate
tags.
Files downloaded to your site (performance features)
Only when AudiScale asks for it through a signed operation, never while a visitor
loads a page:
- Google Fonts self-hosting (
perf.fonts.setwithselfHost): the plugin
downloads the Google Fonts stylesheets the site already uses from
fonts.googleapis.com and the font files they reference from
fonts.gstatic.com, intowp-content/uploads/audiscale-fonts/. Visitors then
load the fonts from your own domain, so their IP address is no longer sent to
Google on each page view. No other host is contacted, and no request carries
visitor data. - Plugin archives: once the site is paired, before any plugin update (from
AudiScale, from wp-admin or a WordPress auto-update), the installed version is
zipped into a private folder underwp-content/uploads/(random folder and file
names, anindex.phpin every folder, closed to web access on Apache) so it can
be restored. One archive per plugin, deleted after 90 days; its SHA-256 checksum
is verified before any restore. Nothing is archived on a site that is not paired.
Crawl log
On a paired site, the plugin records the requests of known search and AI
crawlers (Googlebot, Bingbot, Applebot, Amazonbot, GPTBot, OAI-SearchBot,
ChatGPT-User, PerplexityBot, ClaudeBot, CCBot, Bytespider, meta-externalagent):
the crawler name, whether its identity was verified, the requested path
without its query string, the HTTP status and the time. No IP address, no
User-Agent string and nothing about human visitors is stored; a request that
does not come from a known crawler is never written.
Googlebot, Bingbot, Applebot and Amazonbot are verified the way their operators
document it (reverse DNS, then forward confirmation), cached one day under a
hashed key; a request that claims one of them and fails verification is dropped.
The other crawlers publish no such domain and are recorded as declared, not
verified. The log keeps 30 days and 30,000 rows at most, can be switched off
(and emptied) from “AudiScale Connection”, and AudiScale reads it once a day
through the signed crawl.log.read operation. A suggested paragraph is added
to the WordPress privacy policy guide (Settings Privacy).
The plugin never downloads or executes code: archives are only ever reinstalled
through the WordPress upgrader, from files the site itself produced.
Remote user management (optional, off by default)
Nothing here happens until the site owner explicitly turns on “user management”
for this site in AudiScale, and AudiScale then asks the owner to approve each
change before it sends it. What AudiScale can then do, on the current site only:
- list the users: id, login, display name, email address, roles, registration
date, last login, two-factor status (Two Factor, Solid Security, WP 2FA or
Wordfence Login Security, when one of them is active), number of application
passwords, and whether the account is disabled or must choose a new password
(users.list,list_users); - change a user’s role (
users.role.set,promote_users, limited to the roles
the connected account may itself assign); - sign a user out everywhere (
users.sessions.destroy,edit_users); - revoke all of a user’s application passwords (
users.app_passwords.revoke,
edit_users); - send WordPress’s own password-reset email to the user
(users.password_reset.send,edit_users); - require a new password at the next login, and sign the user out
(users.password_reset.force,edit_users) — lifted once the user resets
their password through “Lost your password?”; - disable and re-enable login (
users.disable,users.enable,edit_users):
a disabled account can log in neither with its password nor with an
application password; its content is left untouched; - delete a user (
users.delete,delete_users; on multisite,remove_users
and the user is only removed from this site), always reassigning their posts
to another active user of the site. A deletion cannot be undone.
AudiScale never sees, sends or sets a password: a reset always goes through
WordPress’s own email and the user’s own choice. User lists are fetched on
demand and not stored by AudiScale.
Each change is logged locally in the plugin’s audit log: the operation, the
target user id, the roles or flags before and after (for a deletion, the login,
its roles and the user receiving the posts), the WordPress user AudiScale acts
as, and the time. No email address and no password is ever logged.
Safeguards, enforced by the plugin whatever AudiScale asks:
- the last administrator able to log in can be neither demoted, disabled nor
deleted; - the account AudiScale is connected with cannot have its role changed, be
disabled, be deleted or lose its application passwords; - on multisite, only a super admin can act on a super admin, and WordPress’s own
per-user capability checks always apply.
The login block and the forced reset live in user meta
(audiscale_login_disabled, audiscale_password_reset_required); deactivating
or uninstalling the plugin lifts them.
External services
This plugin connects to two external services.
AudiScale
The hosted AudiScale service (https://audiscale.com), which this plugin is the
companion of. Nothing is sent until an administrator pairs the site. Once paired,
AudiScale sends signed operation requests to the site, and after an update the
plugin sends the installed plugin version and the site URL back to AudiScale
(one request per version).
- Terms of service: https://audiscale.com/en/terms
- Privacy policy: https://audiscale.com/en/privacy
Google Fonts
Used only when AudiScale turns on Google Fonts self-hosting (perf.fonts.set with
selfHost), and only during that operation — never while a visitor loads a page.
The site’s server requests, from fonts.googleapis.com, the Google Fonts
stylesheets the site already loads, then, from fonts.gstatic.com, the font files
those stylesheets reference. The requests carry the server’s IP address and a
browser User-Agent string (Google only serves WOFF2 files to a browser it
recognizes); they carry no visitor data and no site data beyond the stylesheet URLs.
Afterwards visitors load the fonts from the site itself, so their IP address is no
longer sent to Google.
- Google Terms of Service: https://policies.google.com/terms
- Google Privacy Policy: https://policies.google.com/privacy
- Google Fonts FAQ (privacy): https://developers.google.com/fonts/faq/privacy