Megop SEO

Megop SEO

By megop
Details
View on WordPress

Megop SEO is five tools that share one index, so they agree with each other instead of fighting.

Written and maintained by محمد قاسمی (Mohammad Ghasemi), Tehran, Iran.

Most SEO plugins are written for English and translated afterwards. This one is written the other way round. A Persian phrase can be spelled several ways that look identical to a reader and completely different to a computer – an Arabic character where a Persian one belongs, a zero-width non-joiner instead of a space, Arabic-Indic digits instead of Latin ones. Every plugin that matches text literally treats those as different phrases. This one folds them together before matching, using an offset map so your content is never rewritten, only read.

How it is tested

Every release runs against a live Persian WooCommerce site with several thousand posts before it is packaged, not only against a clean install. That is deliberate, and it is where the findings come from.

One example, because it is the kind of thing a checker cannot see. A template in the linking screen declared a small helper function at file level. PHP registers a function declared in an included file globally, whatever scope the include ran in, so the second time that template was rendered inside one request the whole screen died with Cannot redeclare. It is a compile-time error, so try/catch cannot reach it, and the site’s own error log had recorded it three times on real page loads. No static analyser flagged it and no clean-install smoke test triggered it, because rendering the template twice is what triggers it. The helper is a static method now, and no template in this plugin declares a function at all.

A second example, from the same site and the same kind of blindness. A crawl reported twenty internal 301 links inside published posts; Link Nurse had reported none of them, on any scan, ever. The cause was one boolean. Redirect handling sat behind a setting whose own label reads “Rewrite 301/302 to final 200 destination” – a repair switch, wired as a detection gate. With it off the scanner never resolved where a 301 went, so the classifier had no destination to judge and returned “healthy” for every redirected link on the site. Nothing errored, nothing was logged, and the dashboard was confidently wrong. Detection and repair are separate now, and the classifier is covered by a test that runs every case with the switch in both positions.

A third example, and the largest. The same crawl showed forty links Link Nurse had never reported. Not a classification problem this time: the extractor collected every href and src on the page and then dropped anything that did not begin with http, one line later. A link written as /product/name/ – the form the editor produces when you pick a page from the link dialog – never reached the checker at all. Counted the way the scanner reads content, 332 of the 1,373 links on that site were stored that way, spread across 188 of its 364 published items. A quarter of every link and half of every page, invisible on every scan since the module was written, with nothing on the dashboard to suggest it. Relative links are resolved against the page they sit on now, and the repair keeps the form the author wrote.

The same habit produced the rest of the list: a settings form that reported success while saving nothing because the browser stringified an object into the request; a bulk editor that emptied variable-product prices because an empty field was read as “clear” rather than “leave alone”; a Jalali date reaching a SQL comparison and returning zero rows on a site with 66,000 recorded visits. Each of those is in the changelog with what caused it.

Works alongside Rank Math

The SEO title and meta description this plugin edits are Rank Math’s own fields (rank_math_title and rank_math_description). If Rank Math is not installed, those two columns in the bulk manager still save, but nothing renders them in your page source, so they have no effect. The redirect hand-off also looks for Rank Math and steps aside when it finds it, so the two never write competing redirects.

Everything else – internal linking, broken-link repair and analytics – works on its own and needs no other SEO plugin.

If you use a different SEO plugin, the two title and description columns will not do what you expect. Everything else will.

The five modules

Each module can be switched off. A module that is off registers no hooks at all: no cost, no menu entry, no route. Its data is never touched by switching it off.

1. Seo Bulk Manager. A spreadsheet view of your site. Edit the H1, the SEO title, the meta description, the body content and the featured image across many rows at once, without opening a single post. WooCommerce prices are editable too, including variable products – and an empty price field means “leave this alone” rather than “clear it”, because writing an empty value to every variation would wipe a catalogue. Each row has its own find-and-replace, and Elementor content is kept in step so an edit you make here is the edit visitors see.

2. Seo Auto Link. Give any post, page, custom post type or term a keyword, and the engine links every mention of that phrase across the site.

It starts in shadow mode: it builds the whole index and shows you exactly what it would do, while not a single link reaches a visitor. You switch it to live when you are satisfied, not before.

Links are injected at render time from a prebuilt index, so the page view does no matching work at all – the heaviest page on a 300-page site costs about seven milliseconds. Links are never placed inside headings, existing links, code, scripts, forms, buttons, SVG, shortcodes or HTML attributes.

Matching is longest-phrase-first with range locking, so two keywords can never overlap, and a page can never link to itself. Caps are available per page, per target and per paragraph, and all of them are off by default – the measure is what your content needs, not a number someone picked.

It also finds the links you wrote by hand years ago. A manual link blocks the engine, because the engine refuses to look inside an existing link – so those phrases sit outside every report and never update when a destination moves. The pattern finder lists them, shows whether each one agrees with your keyword map, and converts them in bulk.

Reports cover anchor-text conflicts, targets nothing links to, and rows left behind by an older index. Blacklisted pages keep receiving links and stop giving them out, which is deliberate: a landing page should hold its authority rather than spend it.

Nothing is lost when you leave. Deactivating the plugin writes every link permanently into your content. Reactivating takes them back out and hands control to the engine again. Uninstalling keeps the backups that make that reversible. Before any of this touches your content, a twenty-check self-test has to pass, the tag balance has to be exactly right, and the plain text before and after has to be identical.

3. Search Console. Connect your own Google service account and see, per page, which searches Google already shows you for – and which of those words are not actually on the page. Green means the phrase is present, yellow means the words are there but scattered, red means something is missing. Red is where the opportunity is, because Google is already showing that page and nobody is clicking.

Index status asks Google, one URL at a time, what it knows about each of your pages, and groups the answers the way Search Console groups them. Pages Google has already indexed, pages excluded by a noindex tag and pages blocked in robots.txt are never asked again, because that answer will not change.

The effect report keeps a control group, so you can tell an edit that worked from a week when the whole site went up.

This reads Google’s index. It does not request indexing – Google publishes no API for that, and the button lives only inside Search Console itself. What it can do instead is find the pages Google has never discovered and push them to the front of the internal-linking queue, which is the discovery route Google does document.

4. Link Nurse. Finds broken and redirected links across posts, pages, taxonomies, custom fields and menus, and is aware of Elementor and WooCommerce markup. Results are grouped by cause, repaired in batches, and every repair can be undone one item at a time from a backup kept in post meta. 4xx results can be re-checked with a browser user-agent to cut false positives, and functional links – cart, wishlist, login – are protected by query key so they are never rewritten. Results export to XLSX. Sixteen built-in tests run against in-memory data, so you can confirm nothing regressed without touching your site.

5. Internal Analytics. Self-hosted visit and event tracking. No data leaves your server and no third party is contacted. It records the requested path, the referrer, a coarse device type and a daily-rotating hash of the visitor’s address. It sets no cookie and stores no raw IP address. Screens cover live visitors, per-page performance, traffic sources and custom events, all exportable as CSV. Switching the module off stops recording and leaves every existing row untouched.

Persian and Arabic

Every screen reads in English, Persian or Arabic, and each person chooses for themselves – the choice is stored per user and applies only to this plugin. WordPress, your theme and every other plugin keep the language the site set. The JavaScript is translated too, so confirmations and live counters follow the same choice.

Dates are handled carefully: on a site with a Persian calendar plugin, wp_date() returns a Jalali date, and a Jalali string in a SQL comparison silently returns nothing. Every date that reaches a query here is built in a calendar-neutral way. Only what you read on screen is localised.

External services

This plugin contacts nothing unless you configure it to.

Google Search Console API – used only when you upload your own Google service-account key on the Search Console screen. The plugin then sends your site’s property name and date ranges to www.googleapis.com, sends individual page URLs of your own site to searchconsole.googleapis.com when you use the index-status screen, and sends a signed token request to oauth2.googleapis.com to authenticate. No visitor data and no page content is sent. Remove the key and the calls stop.
Google API Terms of Service: https://developers.google.com/terms
Google Privacy Policy: https://policies.google.com/privacy

An AI endpoint of your choosing – optional, and off unless you fill in a base URL, key and model name on the Search Console settings screen. When enabled, the plugin sends the text of the page being worked on and the search queries it is meant to cover to the endpoint you named, and writes the returned text into that page as a draft edit you can undo. The plugin ships with no endpoint, no key and no default provider; whichever service you point it at, its own terms and privacy policy apply. Leave the fields blank and no request is ever made.

No other outbound request is made by this plugin.

Author

Megop SEO is written and maintained by محمد قاسمی (Mohammad Ghasemi) in Tehran, Iran.

It began as three separate plugins built for real Persian sites over several years – internal linking, broken-link repair and analytics – which were merged once it became clear they were solving one problem badly in three places instead of one problem well in one. The Persian matching rules in it come from mistakes made on live sites, not from a specification.

Bug reports and feature requests are welcome on the support forum here, in English or Persian.

Details

Plugin code:
megop-seo
Plugin version:
8.3.0
Author:
Outdated:
No
WP version:
6.0 or higher
PHP version:
7.4 or higher
Test up to WP version:
7.1
Total installations:
0
Last updated:
2026-09-04
Rating:
Times rated:
0
broken-links
internal-links
persian
search-console
seo