SEO
Fixes
Your to-do list for Google, in three tabs — technical, on-page and off-page. Each row is one task: open it for what to do and the pages it names, approve the changes Vidrys proposes, and publish the pages you write from their briefs. Nothing changes on your site without your approval.
By Garvit Sharma, Co-founder
SEO → Fixes
Who does each fix
Every task says who does it, and the list can be narrowed to one group. Start with these, above the tabs, names the first few to do — the audit's own order, most points at stake first.
| Group | What it means |
|---|---|
Vidrys does it | Vidrys proposes the fix and writes it through your connected site once you approve it — see Fixes Vidrys proposes, below. |
A few clicks for you | Something you can change yourself in your site's own settings. The task lists the steps for your platform, and how long it usually takes. |
Your host or developer | A change to the site's code or server. Send to your developer or host makes a link for them — see below. |
Safe to ignore | What the check flags costs more to change than it gains — renaming long or underscored addresses, say. Listed at the bottom, closed. |
The steps are written for what your site runs on — WordPress (with Rank Math, Yoast or another SEO plugin), Shopify, Wix, Squarespace, Webflow, Ghost or a custom-built site. Each audit reads it from your home page; if it's wrong, choose the right one with Not right? above the list. On WordPress, a task Vidrys could do through the free Vidrys SEO plugin says so, with Set it up, above the steps — on Shopify, one the Vidrys app for Shopify would do; on Wix, one the Vidrys app for Wix would; on Squarespace, one a Squarespace connection would do on your product pages; and on a custom-built site or one already on Cloudflare, one a Cloudflare connection would.
Some tasks come with something to paste: a robots.txt that names your sitemap, your organisation's structured data, a redirect list in the form your platform imports (Shopify, Squarespace, Ghost, the WordPress Redirection plugin, Apache, Nginx, Netlify or Vercel), the links to change and what to change them to, or the Open Graph tags a page lacks. Show builds it from your latest audit; copy it or download it.
Sending fixes to your developer or host
Send to your developer or host (on a task, or Send the developer's list above the tabs) makes a link listing the tasks you choose: what's wrong, the pages, how to fix each and anything to paste, with a note from you. Whoever opens it needs no account. It stays up to date — a task they've fixed shows as fixed after your next audit — and works for 30 days. Copy the link or the ready-made message, or email it from your own email. Links you've sent are listed with how often they were opened, and Switch off ends one at once.
Technical, on-page and off-page
| Tab | What it lists | From |
|---|---|---|
Technical | Whether search engines can reach, index and load your pages: status codes, redirects, broken internal links, indexing, canonical tags, the sitemap, Core Web Vitals and HTTPS. A score cap — robots.txt blocking search engines, say — is shown first. | The latest site health audit |
On-page | The pages to write from your keyword briefs, then what each page says: titles, meta descriptions, headings, image alt text, thin, duplicate and orphaned pages. | The briefs you started from Keywords, and the latest site health audit |
Off-page | Who links to you: pages that link to your competitors and not to you, pages on Google’s first page for your keywords, and links you had and lost. | Your backlinks |
Under To fix, each row is a check the audit failed, most points on the table first, with how many pages it names and who does it: You, or Vidrys where the field is one it writes. Open a row for what to do, what the failing pages share when they share a cause (a title ending every page carries, a section heading the template marks as H1), and the first pages with what was found on each; Show all N pages lists the rest right there. Checks that pass overall but still name a few pages — three 404s on a large site — follow under Passing, a few pages left. The number on each tab counts its rows to do. Fix things, then Run audit again: a page that no longer fails leaves the list.
Pages to write
Get the brief on a keyword under What to work on next opens its brief here, and Pages to write on the On-page tab keeps every one you started with how far it has come: Brief → Draft → Publish → Rank. A brief is free. Generate writes a draft for one of the month’s SEO page drafts — SEO’s own allowance, not your content credits — and Content grade then scores it against the brief and against Google’s top results for the keyword, whose pages Vidrys reads with its own crawler once the results page is loaded: the keyword in the title, the opening and a heading; the searchers’ questions answered; the related keywords and the topics most top pages cover; length against theirs; sections, links to your other pages and image alt text. A brief that edits a page you already have grades the live page too, so you see where it stands before and after. The grade is free and moves as soon as the draft does. Publish sends the draft to your connected CMS or webhook — a new page is posted; an edit to a page you already have goes to a webhook as a change request — and the page counts as published once it is live; with nothing connected, put it live yourself and press Mark published. From then on the keyword is tracked against the page, and reaching Google’s first page counts as a win.
Fixes Vidrys proposes
| The audit finds | Vidrys proposes | Made by |
|---|---|---|
| A page with no title, meta description or canonical | The title from the page’s own heading, the description from its opening paragraph, the canonical from the address that served it | The page itself |
| A title too long, too short, or shared with other pages | A new title for that page | A model, from the page’s heading and text and the searches it shows up for |
| A meta description badly sized, or shared with other pages | A new description | A model, from the page’s text |
| A page in your sitemap marked noindex | Removing the noindex — or dismiss it, and take the page out of the sitemap instead | The page itself |
| A page other sites link to that no longer exists | A permanent redirect to your live page whose address is closest | The page addresses |
| Images without alt text | Alt text for each, up to ten per page | A model that looks at the images |
| A title showing a year that has passed | A new title without it | A model, from the page’s heading and text |
| A canonical that’s relative, uses http:// or points at an address that redirects | The same page’s full https address — or the address the redirect ends on | The page itself |
| A page with no Open Graph title or description | Copied from the page’s own title and meta description (an image is never invented) | The page itself |
| Links to addresses that redirect or use http:// | Each link pointed at the address it already ends on | The crawl |
| Links to pages that answer with an error | Each link pointed at the live page whose address is closest — a guess, so always for a person to check | The crawl |
| An address that redirects more than once, or to a dead page | Its redirect pointed straight at the final page — or at the closest live one | The crawl |
| An address the crawl reached that answers 404 or 410 | A permanent redirect to the live page whose address is closest — a guess, so always for a person to check. It fixes every link to it at once, menus and theme included | The crawl |
With the Vidrys SEO plugin on a WordPress site, Vidrys also proposes fixes it makes as your pages are served — for what no page field holds. Those that come from the theme or the server are one fix for the whole site, checked on one page that had the problem:
| The audit finds | Vidrys proposes |
|---|---|
| Pages served over https without an HSTS header | The header on every page, telling browsers the site is https-only for a year. Rolling it back stops sending it, but browsers that saw it keep using https until the year is up — so it waits for you |
| Pages that don't declare their language | The language on every page's <html> tag — your WordPress language setting |
| Two title tags, meta descriptions or canonicals on a page | One of each on every page: the one WordPress or your SEO plugin writes; the extra (usually the theme's) is left out |
| A page that redirects with a meta refresh | A permanent (301) redirect to the same address, before the page loads |
| A page that says it wasn't found but answers 200 | A real 404 for that page — its text stays — so search engines drop it. Always for a person to check |
| robots.txt that doesn't name your sitemap | The line naming the sitemap the audit read |
| A home page with no organisation structured data | Organization data with your name and home page (and your logo, if you add it before approving) |
| Language versions that don't name each other back | The links back, each with the code the other page gives itself |
With the Vidrys app for Shopify, its theme embed adds what your theme lacks once you switch it on: Open Graph tags on a product, collection, page or article without them, your organisation's structured data on the home page, and — read from your crawled pages rather than a scored check — Product structured data on product pages and breadcrumbs, when the crawl finds your product pages or store pages without them. An app can add tags but can't take your theme's out, so each is proposed only where the theme lacks it.
With a Cloudflare connection — for any site on Cloudflare, custom-built included — every fix above is served by a Worker on your Cloudflare account, and so is what only a server can do:
| The audit finds | Vidrys proposes |
|---|---|
| The site answers over http:// as well as https:// | Every http:// address redirected permanently to its https:// one |
| Both the www and the bare host name answer | Every address on the other host name redirected to the same page on the one your site uses |
| A page reached through a temporary (302 or 307) redirect | The same redirect, answered as a permanent one — for you to check: some moves are meant to be temporary |
| Redirects that go round in a circle | The address pointed at the live page whose address is closest — a guess, so always for a person to check |
| Pages whose content only appears once JavaScript runs | Rendered copies for crawlers: search engines and AI crawlers get each of those pages ready-rendered, with the content people see — one fix for the whole site. See Rendered copies for crawlers |
Proposals sit under the check they answer — the row says N to approve — canonical tags, noindex, redirects and links under Technical, titles, descriptions, alt text and Open Graph tags under On-page. A model-written proposal is marked AI: read it before approving. Model-written proposals arrive a few minutes after an audit, at most 20 a run, counted in your SEO daily spending limit; one you dismiss is not asked for again until the page itself changes. Check for new fixes looks again after an audit, for every field at once.
Press
Reviewon a proposed fix. It reads the page from your CMS and shows what the page has now and what it would get.Change the value if you want — a title, a description, an address, each image’s alt text. Titles need 15–60 characters and descriptions 50–160, what the audit asks for; the original proposal stays on the fix. Noindex removal has nothing to edit.
With the Vidrys SEO plugin,
Preview on your siteopens the page with the change on it — your edit included — seen only by you, while you're logged in to WordPress, for an hour. Visitors see the page as it is.Press
Approve & publish. Vidrys writes the value to your CMS, then reads the live page to confirm it is there:Published · checking, thenLive. A redirect counts as live only when it is permanent and lands on a page that answers. (Approve dry runappears instead while fixes through your CMS run as dry runs — nothing is written.)Not happy with it?
Dismiss— that page and field are not proposed again. Changed your mind after publishing?Roll backrestores exactly what was there before. Finished fixes move underDone by Vidrys.
A fix that replaces a value — a new title over an old one, say — is written only while the page still shows exactly the value it was proposed against, and while your CMS holds that value or none. If someone changed it since, nothing is overwritten: the fix says so and stops.
Page edits
Some fixes change a page's own text rather than a setting. Each waits for you — never applied without review — and shows as before and after: what the page has now, and what it gets. Change any words before approving, or leave an edit out.
| The audit finds | Vidrys proposes |
|---|---|
| No H1, or several | The page's first heading made its H1 (or one added from its title), or the extra H1s made H2s — their words stay the same |
| An empty H1 | The page's title as its words |
| An H1 that's too long, or the same as another page's | A shorter or distinct one, written by a model from the page's own text |
| Headings that skip a level | Each moved up a level, so the outline reads in order |
| A long page without subheadings | H2s before the paragraphs that start each section, written by a model |
| A thin page | A few paragraphs after its last one, written by a model from the page's own text — check every sentence is true of your business |
| Links that say “click here” | Words that say where each goes, written by a model from the sentence it's in |
| Links with no words (an icon) | A label naming the page each leads to; how it looks doesn't change |
| A page few others link to | On the pages that already name its subject, those words made a link to it |
| A page that links nowhere | A short list of related pages — the ones that link to it — after its last paragraph |
Where it's made depends on what your site runs on: in the page's own text where your connection keeps it — a WordPress post, a Shopify product, collection, page or article — and, through the Vidrys SEO plugin or Cloudflare, as the page is served where the theme or a page builder (Elementor, Divi) prints the text. An edit is made only while the page's text still matches what the crawl read; if it changed, the fix stops and says so, and the next audit proposes it again from the page as it is. Rolling back puts the page's text back exactly as it was.
Apply without review
Tick a type under Apply without review and a proposal of that type is published the moment it is found, without waiting for you. Only what Vidrys takes from the page itself is offered: a missing title, description or canonical, Open Graph tags copied from the page’s own title and description, and mechanical corrections that say the same thing properly — a canonical written in full and over https, a link pointed at the address it already ends on — and, through the Vidrys SEO plugin, the page language, one title and description per page, the sitemap in robots.txt and hreflang links back. Each is still checked against the live page first, checked again after, reversible, and drawn from the month’s fix allowance. Model-written text, page edits, removing a noindex, redirects, a broken link’s new address (a guess), the HSTS header, a 404, one canonical per page, your organisation's data and rendered copies for crawlers always wait for you. Untick to go back to approving each one.
Off-page
Where to get links lists the pages to ask, each with what to do and who decides — the same list as under Backlinks; Why this page shows the reasons. Links you lost lists the sites that linked to you and no longer do: ask each one to restore the link, or to point it at the page’s new address.
Export tasks
Export tasks hands the work on to whoever does it. The list is every tab’s: checks the audit failed (with what to do and their pages), fixes waiting for review, pages to write from your briefs, and places to get a link. Choose a tab or All, then:
| Choose | You get |
|---|---|
Download CSV | A spreadsheet of the tasks: the task, its tab, its priority, what to do and the pages. |
Send to Trello | A card per ticked task at the bottom of your chosen list, with what to do, up to 20 pages and a link back to Vidrys. |
Send to Jira | An issue per ticked task in your Jira Cloud project (labelled seo and its tab), with the same description. |
Up to 25 tasks go at once; one that fails is listed with why, and never stops the rest. To connect Trello, paste your API key, a token and the list id; for Jira, your site’s address, your email, an API token, the project key and the issue type. Vidrys checks them with Trello or Jira before keeping them, keeps them encrypted, and never shows them again. Viewers can download the CSV but not connect or send. Sending the same task twice makes a second card — Vidrys doesn’t follow the card once it’s made.
Which sites can take fixes
| Your site runs on | Fixes |
|---|---|
| Ghost | Titles, meta descriptions, canonicals and Open Graph tags of posts and pages, and the links in a post’s own text. Ghost has no per-page noindex or redirect to set, and page edits aren't made there yet. |
| Shopify, with the Vidrys app | Everything below for Shopify, with nothing to copy, plus — through the app's theme embed — Open Graph tags, your organisation's structured data, Product structured data and breadcrumbs where your theme lacks them. Fixes can also be approved inside your Shopify admin. See Vidrys for Shopify. |
| Shopify, connected with a custom app's token | Titles and meta descriptions of products, collections, pages and blog posts, the links in their own text and page edits to it (not what the theme prints, like a product's title); removing a noindex (the Hide from search engines setting); alt text on a product's images; and URL redirects — for dead addresses, and pointed straight at the final page where one of Shopify’s own redirects runs through a chain or to a dead page (the app needs online store navigation access). A listing field is written only while it still holds the value read. The canonical and Open Graph tags come from the theme, so they are not offered. |
| WordPress, with the Vidrys SEO plugin | Everything a webhook takes — titles, meta descriptions, canonicals, noindex and Open Graph tags written into Rank Math, Yoast SEO, All in One SEO or SEOPress (or printed by the plugin itself without one), redirects, alt text, links in posts, menus and templates, and page edits saved in a post's own text or served where the theme or a page builder prints them — plus the fixes made as pages are served, above. See Vidrys SEO for WordPress. |
| WordPress, connected with an application password | Titles, meta descriptions, canonicals, noindex and Open Graph tags, when the Rank Math SEO plugin is installed and the account you connected can edit the post. On any WordPress site, the links in a post’s own text and page edits to it — not menus, widgets or pages built with Elementor, which keeps its own copy. The plugin does more, with nothing to copy. |
| Wix, with the Vidrys app | The SEO title, meta description, canonical, noindex and Open Graph tags of your pages, store products and blog posts, and your organisation's structured data on the home page — written to each one's own SEO settings in Wix, where you can still edit them. Nothing to copy. See Vidrys for Wix. |
| Squarespace | The SEO title and description of your store's product pages, through Squarespace's own API — the only part of a Squarespace site it can change. Needs a Developer API key (Squarespace's Commerce Advanced plan). See Squarespace. |
| Any site on Cloudflare | Every fix that changes a page as it's served — titles, descriptions, canonicals, noindex, Open Graph tags, alt text, links, page edits, structured data, the language, HSTS, real 404s, robots.txt — redirects: for dead addresses, chains, loops, temporary ones, https and one host name — and, on a site built in JavaScript, rendered copies of its pages for crawlers. Your pages themselves never change. See Cloudflare. |
| Webflow | None. A change there only goes live with a whole-site publish, which is yours to do. |
| Your own site | Everything — alt text, Open Graph tags, links, redirects and page edits included — through the same webhook that publishes pages: your receiver applies the change and says so. |
Each kind of site goes live on its own. Until we have tried its writes against a real account, approving a fix through it runs a dry run: Vidrys finds the page, reads it and records exactly what it would write — nothing on your site changes — and the screen says so.
›It says “Not confirmed yet”
Your CMS did not answer in time, so Vidrys does not know whether the change landed. It checks back on its own and never writes the same change twice. If it cannot confirm after a few tries, it stops and says so.
›It says “Already in place”
The value was on the page before Vidrys wrote anything — someone else got there first. Nothing was written, and there is nothing to roll back.
›It says fixes are switched off
This deployment has fixes off, so nothing is proposed. Ask us to turn them on — first as dry runs, then for real.
›It says changes through my CMS run as dry runs
Fixes are on, but your kind of site has not been cleared for live changes yet. Approving records exactly what would be written and changes nothing. Once it is cleared, approve the fix again to publish it.
›It says the page changed since this was proposed
A fix that replaces a value is written only over that exact value. Someone changed it after the audit, so nothing was overwritten. The next audit proposes again from the page as it is now.