Description
Simple Grammar scans every published post for spelling, grammar, and style mistakes — and turns cleaning them up into an ongoing SEO habit.
Most sites publish a post once and never touch it again. But search engines favour content that’s actively maintained: when you revisit an older post and genuinely improve it, you refresh its “last updated” signals — one of the freshness factors Google uses to decide what to rank. Simple Grammar makes those small, legitimate improvements easy to do at scale, so tidying your writing doubles as content maintenance that keeps older pages competitive.
Why grammar fixes are more than cosmetic
- Freshness signals — meaningful edits to existing posts tell Google the content is current and cared for, which can help older pages hold or regain rankings.
- User trust & conversions — clean, error-free copy reads as more credible and keeps readers on the page.
- Site-wide, not one page at a time — scan your whole archive from a single screen and fix issues without opening each post.
Proprietary Post Score
Every scanned post gets a colour-coded Post Score (0–100, Good / Fair / Needs work) shown right in the results. It’s a blended quality score that combines three signals — grammar (errors relative to length), readability (reading ease), and average sentence length — into one at-a-glance number, with a hover breakdown. Use it to spot your weakest pages first and prioritise the updates that matter, then watch the score climb as you fix issues.
Key features
- Whole-site scan — check any number of posts in one session; long posts are split into chunks automatically so nothing gets missed.
- One-click fixes — each error shows up to five suggestions; click to apply the one you want and the post is updated instantly.
- Post Score — a per-post quality score so you can prioritise which content to refresh first.
- Custom dictionary — add brand and product names so they’re never flagged again.
- Disable error types — switch off whole categories (e.g. repetitions) site-wide from Settings.
- Find Posts — search your content by word or anchor text for quick editorial audits.
- Ignore list — dismiss individual errors globally if you choose to keep a non-standard usage.
- Offset-accurate replacements — fixes map back to the exact bytes in the original HTML, so tables, blockquotes, and formatted text are never corrupted.
- No account required — uses the free public LanguageTool API; no sign-up, no API key.
Refreshing your back catalogue is one of the highest-leverage SEO tasks most site owners skip. Simple Grammar gives you a reason — and a workflow — to do it consistently.
Also worth checking
If you want your well-written content to rank and get found, pair Simple Grammar with SEO Medic — it audits your site for broken links, indexing issues, and on-page SEO problems and tells you exactly how to fix them.
External services
This plugin relies on the LanguageTool API, a third-party service, to check your text for spelling, grammar, and style errors.
When you run a scan, the text content of the posts being checked is sent to the LanguageTool public API endpoint (https://api.languagetool.org/v2/check) over HTTPS so it can be analysed and suggestions returned. Text is sent only while a scan is running and only for the posts you choose to check. No data is sent during normal site browsing, and the plugin does not store your content on any external server.
The plugin also requests the list of supported languages from https://api.languagetool.org/v2/languages to populate the language selector on the Settings screen. This request sends no content from your site — it only retrieves the list — and the result is cached for a week.
The service is provided by LanguageTool (LanguageTooler GmbH). Please review their terms and privacy policy:
- Terms of service: https://languagetool.org/legal/terms
- Privacy policy: https://languagetool.org/legal/privacy
Credits
The synonym matching feature uses data derived from WordNet 3.1, a lexical database developed by Princeton University. WordNet is distributed under a permissive BSD-style license. Copyright 2011 Princeton University. See https://wordnet.princeton.edu/license-and-commercial-use for details.
Screenshots



Installation
- Download the plugin ZIP.
- In your WordPress dashboard go to Plugins Add New Upload Plugin.
- Upload the ZIP, then click Install Now and Activate.
- Navigate to Simple Grammar in the left-hand admin menu.
- Choose how many posts to check and click Start Checking.
No configuration is required. Internet access is needed to reach the LanguageTool API.
FAQ
-
Is this plugin free?
-
Yes, completely free. It uses the free public LanguageTool API — no account or paid plan is required.
-
Does it work with Gutenberg (block editor) posts?
-
Yes. The plugin reads
post_contentdirectly from the database, so it works with both the classic editor and the block editor regardless of how the post was originally written. -
Can I check pages and custom post types?
-
Yes. Use the Post type and Status selectors on the Grammar Checker (and Find Posts) screen to scan posts, pages, or any public post type, in any status including drafts.
-
What languages are supported?
-
Any language supported by LanguageTool. Pick your language in Settings, or leave it on Auto-detect to have the language detected automatically.
-
Does it edit my posts automatically?
-
No. Every fix requires a manual click — nothing is changed without your approval.
-
Is my content sent to a third party?
-
Yes. To check your text, the content of the posts you scan is sent to the LanguageTool public API (https://api.languagetool.org) over HTTPS. This only happens while a scan is running, and only for the posts you choose to check. The plugin does not store your content externally. See the External services section above and the LanguageTool privacy policy and terms for how they handle submitted text.
-
The API returns an error or times out — what should I do?
-
The free LanguageTool API has rate limits. If you are scanning a large number of posts, the plugin automatically pauses between requests. If you still see errors, wait a minute and try again.
-
How do I add words to my custom dictionary?
-
Click Add to Dictionary next to any flagged word. That word will be silently skipped in all future scans. The dictionary is shared across the whole site, so only administrators can change it.
-
Who can use the plugin?
-
Anyone who can edit posts (Contributors, Authors, Editors, Administrators) can scan and fix the posts they are allowed to edit. Because the custom dictionary, ignored errors, and Settings apply to the entire site, only administrators can change those.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“SEOMedic Simple Grammar Checker” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “SEOMedic Simple Grammar Checker” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.17.0
- Hyphenated and accented names are now recognised as proper names. Names like “Meilleur-Giguère”, “Müller”, or “O’Brien” now offer the “Keep as proper name” option, which previously only appeared for plain A–Z names.
- No more mis-clicks when working through results. Applying a fix, adding to the dictionary, keeping a proper name, or ignoring an error now marks that item done in place — the remaining items no longer jump up the list, so a quick next click always lands where you expect. A “Clear resolved” button compacts the list when you’re ready.
1.16.0
- All LanguageTool languages are now available. The language selector previously offered a fixed list of 15 languages, which artificially limited what the checker could do. It now fetches the full list from LanguageTool (62 languages at the time of writing, including Arabic, Chinese, Japanese, Greek, and Persian) and the list stays current automatically as LanguageTool adds support for more.
- The saved language is validated by format rather than against a fixed list, so no supported language can be rejected. If the language list cannot be fetched, a built-in list is used as a temporary fallback and the selector keeps working.
1.15.1
- Plugin Check compliance: the bundled synonym dictionary is now shipped as a plain JSON file instead of a gzipped one (compressed files are not permitted in the plugin directory). No change to how synonym matching behaves.
- Plugin Check compliance: each AJAX handler now calls
check_ajax_referer()directly instead of via a shared helper, so the nonce verification is visible to static analysis. The permission checks added in 1.15.0 are unchanged.
1.15.0
- Security: added capability checks to every AJAX endpoint. Previously these handlers verified a nonce but not the user’s permissions. A nonce only proves a request came from the plugin’s own page — it is not authorisation. As a result, any user who could open the plugin screen (anyone with
edit_posts, e.g. Contributors and Authors) could change site-wide plugin data, and could read or overwrite posts belonging to other users. - Site-wide plugin data — Settings, language, disabled error types, the custom dictionary, and the ignored-errors list — now requires the
manage_optionscapability (administrators). The Custom Dictionary, Ignored Errors, and Settings tabs, and the “Add to Dictionary” / “Ignore” buttons, are now only shown to administrators. - Scanning and fixing posts now requires
edit_postsplus a per-postedit_postcheck, so users can only scan and fix the posts they are actually allowed to edit. - The admin menu slug is now
seomedic-simple-grammar(was the generic, unprefixedgrammar-checker) to match the plugin slug and avoid collisions with other plugins. If you had bookmarked the old admin URL, update it.
1.14.0
- Synonym matching on Find Posts. With Broaden search on, you can now also match synonyms (English): searching “guide” also surfaces posts using “tutorial”, “handbook”, or “guidebook”. Powered by a small bundled WordNet dataset — no external calls, and only loaded when you use it. Results are approximate and ranked by relevance.
1.13.0
- Stylistic repetition is now its own toggle. “Repetitions (Style)” — reusing the same word nearby — is separated from “Word Repetitions” in Settings, so you can switch off the stylistic suggestions without disabling the whole Style category.
- Plain-English glossary in Settings. A new “What do these types mean?” panel explains each error type (Collocations, Compounding, Semantics, etc.) so it’s clear what you’re switching off.
- Broaden search on Find Posts. An optional toggle matches posts containing any word from your term, ranked by how many match — useful for finding a relevant post to link to when no post has the exact phrase.
1.12.0
- You can now check any language LanguageTool supports — choose it in Settings, or use Auto-detect. No longer limited to US English.
- Added Post type and Status selectors: scan posts, pages, or any public post type, in any status (including drafts), on both the Grammar Checker and Find Posts screens.
- WordPress.org compliance: admin CSS/JS are now properly enqueued (no inline blocks), all functions/hooks/options use a unique prefix, and the plugin was renamed to SEOMedic Simple Grammar Checker. Existing dictionary, ignored errors, and disabled types are migrated automatically.
1.11.2
- Refreshed the plugin listing: clearer focus on keeping older posts updated as a content-freshness signal, and on the per-post Post Score.
1.11.1
- Disabling an error type in Settings now also matches that category by its name, so disabled types (e.g. word repetitions) are reliably skipped on the next scan.
- Added a clear “External services” disclosure to the readme describing what is sent to the LanguageTool API.
- Scan progress now reads “Checking post ID …” for clarity.
- Hardened input sanitisation on the Settings save handler.
1.11.0
- Added a per-post quality score badge in the results header: a blended 0–100 “Post score” combining grammar (errors per word), readability (Flesch reading ease), and average sentence length, colour-coded Good / Fair / Needs work. Hover for the breakdown. English-only and approximate.
1.10.0
- Added a Settings tab where you can switch off whole categories of errors site-wide (e.g. word repetitions), so they’re never flagged in future scans.
- Per-post error counts now respect the active type filter: when you filter to a single type, each post shows the count for that type (e.g. “5 Capitalization errors”) instead of the total.
1.9.1
- Fixed error highlights drifting onto the wrong characters (appearing to span a space) on posts containing emoji or flag symbols — LanguageTool’s UTF-16 offsets are now converted to code points.
- Fixed the post-count limit being ignored: the Check Posts button and scan lock now stay active for the whole scan, so a second scan can’t start and append posts beyond the selected limit.
1.9.0
- Scan results now stream in collapsed and append in place, so the page no longer jumps and an open inline editor is never wiped while later posts are still loading.
- Added “Expand all” / “Collapse all” buttons above the results; each post can still be toggled individually, and the state is remembered when results re-render.
1.8.9
- Added a “Find Posts” tab to search published posts by word or phrase.
- Anchor text mode finds posts that link out using specific link text (with the destination URL shown) — useful for auditing internal links and anchor text.
- Search results link straight to the editor and the live post.
1.8.8
- Sentence-level inline edits now warn when the original sentence contains inline formatting (bold, links, etc.), since applying a plain-text rephrase would strip that markup.
- Each scanned post now has an “Edit post” link that opens it directly in the WordPress editor — handy for fixing formatting-heavy sentences by hand.
1.8.7
- Error context now shows the full sentence (with the error highlighted) instead of a short snippet, so multi-word problems are easier to judge.
- Inline editing now lets you rephrase the entire sentence in a text box, not just swap a single word — useful when a fix spans several words or sentence boundaries.
1.8.6
- Full names (e.g. “John Smith”), hyphenated and apostrophe names (e.g. “Jean-Luc”, “O’Brien”) now also offer “Keep as proper name”.
- Added inline editing: click “Edit…” on any error to type your own correction when the suggestions are not quite right.
- Added a “Filter by type” dropdown above the results so you can focus on one category at a time (e.g. just likely proper names).
1.8.5
- Fixed Add to Dictionary and Ignore buttons: they now reliably remove the word and clear every occurrence of it across the scanned posts (e.g. a product name used several times in one post), instead of only hiding the single clicked instance.
1.8.4
- Cleaner results display: errors now show a clear single-line sentence context (using LanguageTool’s own context) with the message, instead of a monospace snippet with stray blank lines.
- Repeated words (e.g. a name appearing several times on one page) are now labelled “Instance k of n” so you can tell occurrences apart and fix each individually.
- More reliable fixes for duplicates: applying a fix now keeps every other error’s position exact regardless of the order you apply them, so the correct occurrence is always replaced.
1.8.3
- Fixed missing nonce on check_single_post AJAX call — posts were silently failing with no results shown.
1.8.2
- Added Requires at least and Requires PHP headers so WordPress shows compatibility info on upload.
1.8.1
- Fixed all WordPress Plugin Check errors and warnings for WP.org submission: escaped output, added isset() guards and wp_unslash() on all $_POST reads, sanitised JSON input, added style version parameter.
- Bumped Tested up to: 7.0.
1.8
- Plugin renamed to Simple Grammar.
- Added Author URI and complete plugin header for WordPress.org submission.
- Added GPL-2.0+ licence header.
1.7
- Fixed offset/HTML mismatch: errors now map back to exact byte positions in post_content, so fixes on posts containing tables, blockquotes, or formatted markup land in the correct place.
- Fixed multibyte drift: highlights and context snippets are now correct after curly quotes, ellipses, and other non-ASCII characters.
- Removed 1000-word cap: long posts are split into chunks and fully checked.
- Added working one-click Apply button for each suggestion (was a non-functional stub).
- New ajax_apply_fix endpoint with a nearest-occurrence fallback so multiple fixes can be applied to one post without re-scanning.
- Fixed a pre-existing fatal parse error in the quote-normalisation code that prevented the plugin from loading on strict PHP environments.
1.6
- Added inline error context display with highlighted error spans.
- Custom dictionary matching improved with Unicode normalisation.
- Ignored errors list introduced.
1.1
- Initial public release.
