Airygen SEO is a modular SEO toolkit for WordPress sites that need more than title and meta fields. It combines on-page SEO controls, structured data, technical SEO, internal link workflows, and automation tools in one plugin while keeping the editing experience inside WordPress.
Core areas included in the current plugin:
Airygen SEO is built for publishers, content teams, and site operators who want technical SEO controls, content optimization support, and maintenance workflows in a single plugin.
Full source code is available on GitHub. Feature requests, bug reports, and contributions are welcome: https://github.com/airygen/airygen-seo
The full, human-readable source code for this plugin — including the unminified JavaScript, TypeScript, JSX, and SCSS sources used to produce every file under the distributed build/ directory — is available on GitHub:
https://github.com/airygen/airygen-seo
Every compiled file shipped under build/ carries an unminified header comment that points back to its source entry point, source directories, and the repository URL above. The mapping below documents that relationship in full so anyone can locate the human-readable source for any compiled asset.
The build/ directory is generated by @wordpress/scripts (which uses webpack 5, Babel, PostCSS, and Sass under the hood). The build entry points are declared in package.json (scripts.build):
wp-scripts build block-editor=./packages/block-editor/src/index.tsx --output-path=build/block-editor --output-filename=airygen-editor.jswp-scripts build classic-editor=./packages/classic-editor/src/index.tsx --output-path=build/classic-editor --output-filename=airygen-editor.jswp-scripts build ./packages/admin/app.tsx --output-path=build/admin --output-filename=airygen-app.jsAfter wp-scripts build finishes, the pnpm build script runs node scripts/build-banner.mjs, which prepends a /*! ... */ header to each emitted JS and CSS file. The header names the file’s source entry, its source directories, the repository URL, and the build command. The script is idempotent: re-running it replaces an existing Airygen SEO banner rather than stacking another one on top.
Bundle: build/admin/
build/admin/airygen-app.js — compiled from entry packages/admin/app.tsx. Pulls in modules under packages/admin/components/, packages/admin/pages/, packages/admin/utils/, packages/admin/types/, packages/admin/constants/, packages/admin/styles/, and shared modules under packages/shared/.build/admin/app.tsx.css and build/admin/app.tsx-rtl.css — compiled from packages/admin/styles/tailwind.css, with Tailwind CSS scanning class names across packages/admin/**/*.{tsx,ts} per tailwind.config.js, and PostCSS plugins declared in postcss.config.js (Tailwind CSS + Autoprefixer).build/admin/airygen-app.asset.php — auto-generated dependency manifest emitted by @wordpress/dependency-extraction-webpack-plugin. Not authored by hand.Bundle: build/block-editor/
build/block-editor/airygen-editor.js — compiled from entry packages/block-editor/src/index.tsx. Pulls in modules under packages/block-editor/components/, packages/block-editor/hooks/, packages/block-editor/utils/, packages/block-editor/config.ts, packages/block-editor/types.ts, and shared modules under packages/shared/.build/block-editor/style-block-editor.css and build/block-editor/style-block-editor-rtl.css — compiled from packages/block-editor/style.scss and any .scss files it imports under packages/block-editor/, processed by Sass and PostCSS.build/block-editor/airygen-editor.asset.php — auto-generated dependency manifest.Bundle: build/classic-editor/
build/classic-editor/airygen-editor.js — compiled from entry packages/classic-editor/src/index.tsx. Pulls in modules under packages/classic-editor/components/ and shared modules under packages/shared/.build/classic-editor/style-classic-editor.css and build/classic-editor/style-classic-editor-rtl.css — compiled from packages/classic-editor/style.scss and any .scss files it imports under packages/classic-editor/, processed by Sass and PostCSS.build/classic-editor/airygen-editor.asset.php — auto-generated dependency manifest.Assets that are not compiled
The following directories contain hand-written JavaScript and CSS that are shipped as-is (no build step) and enqueued directly by PHP. They are already in their human-readable form and have no build/ counterpart:
resources/assets/js/ — faq-preview.js, inline-script-host.js, metabox.js, toc-preview.js, topic-expansion-preview.js.resources/assets/css/style.css — public-facing stylesheet.resources/views/** — PHP view templates.git clone https://github.com/airygen/airygen-seo.git.pnpm install and composer install.pnpm build.After step 4 the same files shipped under build/ in the distributed plugin will be regenerated locally. Each regenerated file will carry the same /*! ... */ header described above, making every compiled file traceable back to a public source path.
This plugin connects to the following third-party services when the corresponding features are enabled by the site administrator. No data is sent to any external service unless the site administrator enables the feature.
When the Local SEO module is enabled and valid coordinates are configured, the plugin can embed a Google Maps iframe from https://www.google.com/maps?...&output=embed in two places: the frontend Local SEO business card output and the Local SEO admin preview. The request includes the configured latitude/longitude in the embed URL, and Google may receive standard embed request data such as the visitor or administrator IP address and browser metadata.
When the Instant Indexing module is enabled and the site administrator configures an IndexNow key, the plugin sends JSON requests to each enabled IndexNow engine endpoint. The payload contains the site host, the configured key, the submitted URL list, and the optional key file location. Requests can occur during automatic publish or delete events, manual submissions from the Instant Indexing admin screen, and backfill jobs started by the site administrator. Built-in endpoints currently include:
https://www.bing.com/indexnow — Microsoft Services Agreement, Microsoft Privacy Statementhttps://yandex.com/indexnow — Yandex User Agreement, Yandex Privacy Policyhttps://search.seznam.cz/indexnow — Seznam Legal Information, Seznam Privacy Policyhttps://searchadvisor.naver.com/indexnow — Naver Terms of Service, Naver Privacy Policyhttps://indexnow.yep.com/indexnow — Ahrefs Terms of Service, Ahrefs Privacy PolicyWhen Telegram notifications are enabled in the Notify module, the plugin sends a sendMessage request to https://api.telegram.org using the bot token and chat ID configured by the site administrator. The transmitted payload contains the notification subject and message body, plus the optional Telegram topic ID when configured.
When Discord notifications are enabled in the Notify module, the plugin sends a webhook request to the Discord webhook URL configured by the site administrator. The transmitted payload contains the notification subject as the main content field, the message body as an embed description, and optional webhook profile fields such as display name and avatar URL when configured.
When Microsoft Teams notifications are enabled in the Notify module, the plugin sends a webhook request to the Teams webhook URL configured by the site administrator. The transmitted payload contains the notification subject and message body.
When email notifications are enabled in the Notify module, the plugin connects directly to the SMTP server configured by the site administrator. The transmitted data includes the SMTP host and port, encryption/authentication settings, sender and recipient addresses, the notification subject, the digest message body, and any SMTP credentials required by the configured provider. The admin UI includes built-in presets for Gmail, Office 365 / Outlook, Mailgun, SendGrid, Amazon SES, Zoho Mail, Brevo, and Postmark, and the site administrator can also enter custom SMTP server details.
Only the SMTP host actually selected (or manually entered) by the site administrator is contacted; no SMTP host is contacted by default. When a built-in preset is chosen, the plugin connects to the following hosts:
smtp.gmail.com:587 — Google Terms of Service, Google Privacy Policysmtp.office365.com:587 — Microsoft Services Agreement, Microsoft Privacy Statementsmtp.mailgun.org:587 — Mailgun Terms of Service, Mailgun Privacy Policysmtp.sendgrid.net:587 — Twilio Terms of Service, Twilio Privacy Policyemail-smtp.us-east-1.amazonaws.com:587 — AWS Service Terms, AWS Privacy Noticesmtp.zoho.com:587 — Zoho Terms of Service, Zoho Privacy Policysmtp-relay.brevo.com:587 — Brevo Terms of Use, Brevo Privacy Policysmtp.postmarkapp.com:587 — Postmark Terms of Service, Postmark Privacy PolicyAirygen SEO, Copyright 2025 Airygen.com
Airygen SEO is distributed under the terms of the GNU General Public License.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.