
Shopify SEO Audit: Complete 2026 Checklist (With Free Tools)
Run a complete Shopify SEO audit for 2026 with this 4-phase checklist covering Core Web Vitals (INP), AI Overviews readiness, structured data, and free audit tools.
The free internal link checker lists every internal link on a single page — each one's destination URL, its exact anchor text, and whether it passes link equity or carries a nofollow. It reads the raw HTML the way a crawler first sees it, up to 500 links per page. No signup.
Paste a URL and we fetch the page server-side, follow any redirects through to the URL that actually answers, and parse the raw HTML — the same bytes a crawler receives before any JavaScript runs. Every anchor is resolved against that final URL, counted as internal when its hostname matches yours once a leading www. is stripped, and marked nofollow when its own rel says so or the page carries a site-wide robots nofollow meta tag.
Any public page, yours or a competitor's. No account, no tag to install, no domain verification — the check runs from our side, not from your browser.
One live request per run, redirects followed. Fragment-only and javascript: hrefs are skipped because a crawler does not treat them as links either.
You get the internal count beside the page's total, then a row per internal link: where it points, the anchor text a reader actually sees, and follow or nofollow.


Everything in this grid works right now, no sign-up. The marked features unlock when you create a free SEOmator account.
Relative hrefs are resolved against the page's final URL, so you compare real destinations instead of guessing what ../ resolved to.
The visible clickable text, whitespace collapsed, up to 200 characters. Image links with no alt text come back empty — which is the finding.
Read from each link's rel attribute, and from the page-level robots meta tag that silently marks every link on the page nofollow.
Both counts are uncapped, so the ratio is accurate even on a page with several thousand links.
Nothing is served from a stored index. You see the page as it is right now, including a change you deployed a minute ago.
There is no ownership check, so you can read a rival's internal linking the same way you read your own.
Internal links checked on every page instead of one, with broken links and orphan pages surfaced across the whole site.
See whether a broken internal link is new since the last deploy or has been sitting there for months.
Get told when internal links break, rather than remembering to re-check the page by hand.
Create a free SEOmator account to crawl the whole site, keep issue history and get alerts.
Sign up freeI built this to answer one question fast: does the link a crawler sees match the link a person sees? Because it parses raw HTML and runs nothing, the list you get back is close to the first pass Googlebot makes — and the gap between that list and your rendered navigation is usually where the problem is. Two limits I want stated plainly rather than buried. First, that same design is the tool's blind spot: links a framework injects after hydration simply are not in the HTML we read, and across the sites we audited in the first half of 2026, 31.4% had content present in the rendered DOM but missing from raw HTML. If a page's menu is client-rendered, this will undercount it — check it against the crawl test, which does run a headless render. Second, it reads one page. It cannot tell you which pages have no inbound internal links at all, and orphan pages are the internal-linking failure that actually costs traffic. One more thing worth knowing before you file a bug: we treat a subdomain as external, so links from your www site to blog.yoursite.com show up outside the internal count. That matches how link equity is usually modelled, but it is a judgement call, not a law.
Across the 100,000+ sites we audited in the first half of 2026, 57.3% had at least one critical failure in the Links category, and broken internal links were the most common one — a median of 14 per site. The links in your main navigation are fine. It's the ones inside three-year-old body copy that quietly 404.
Count the internal links in your header and footer by hand, then compare with what comes back. A page whose nav shows twelve links but returns four is telling you those eight only exist after JavaScript runs — which is a crawlability finding, not a linking one.
This tool counts links leaving the page. The evidence is about links arriving at one: Zyppy's study of 23 million internal links found URLs with 0–4 incoming internal links averaged 2 clicks from Google, while those with 40–44 averaged four times as many — reversing past roughly 45–50. Read every row you get back as one incoming link for some other page.
PageRank sculpting stopped working in 2009, when Matt Cutts explained that a nofollowed link's share is dropped rather than redistributed to the remaining links. If the scan shows nofollow on internal rows, it's almost always a stray template attribute rather than a decision anyone made. The exception worth keeping is a genuinely uncrawlable destination like a login or cart URL.
A blank anchor is normally an image link whose alt text is missing, so neither a crawler nor a screen reader gets anything from it. Those rows are the cheapest fix on the page — you are adding a description to a link that already exists.
The homepage is the one page everyone already links to. Run a deep page instead — a product detail page, a blog post from two years ago — because that is where the internal-linking debt actually sits. Then confirm the destinations resolve with the redirect checker.
Paste the URL into the checker above. You get back every internal link the page contains, each with its destination, its anchor text, and whether it passes link equity or carries a nofollow — the output shown under "How does the internal link checker work?" above. That is the whole check, and it takes about a second.
There are four other ways to get at the same information, and each answers a different question:
<a href. Free and exact, but unreadable past about thirty links, and you still have to resolve every relative path in your head.site: operator. It tells you what is indexed, not what is linked. Useful as a cross-check, misleading on its own.The reason to run a single-page check first is that it is the fastest way to find out whether the problem is real. Across the sites we audited in the first half of 2026, broken internal links returning a 4xx were the sixth most common individual failure, hitting 36.1% of them. A page-level scan tells you in one pass whether you are in that third.
It reads the raw HTML — the bytes the server returns, before a browser runs any JavaScript. That is a deliberate choice, and it is the single most important thing to understand about the output.
I built it this way because it approximates the first thing a crawler does with your page. A search engine fetches the HTML, extracts the links it finds, and queues them. Rendering happens later, on a separate budget. A link that exists only after hydration is a link that gets discovered late, or not at all. So the list this tool returns is closer to "what gets crawled first" than to "what a visitor can click".
The cost of that choice is a blind spot, and it is a big one. Across the same audit set, 31.4% of sites had content present in the rendered DOM but absent from the raw HTML. If your navigation is a client-rendered component, this tool will undercount it, and the honest response is to check the page against the website crawl test, which runs a real headless render and diffs the two.
| What it reads | What it skips |
|---|---|
Server-rendered <a href> | Links injected by JavaScript |
| Relative paths, resolved | #-only fragment links |
rel on each link | javascript: hrefs |
| Page-level robots nofollow | Anything past 500 rows |
Four smaller rules are worth knowing before you file a bug report:
www., so a link from example.com to blog.example.com sits outside the internal count. That matches how link equity is usually modelled across hosts, but it is a judgement call rather than a rule of physics.mailto: and tel: count as external. They leave the site, so they leave the internal number.Two different numbers both get called "internal links", and mixing them up is the most common mistake on this topic. This tool counts the links going out of the page you scanned. The published research is about links coming in to a page. They are not the same measurement, and only one of them predicts traffic.
On incoming links there is good data. Zyppy's study of 23 million internal links found that URLs with 0 to 4 incoming internal links averaged 2 clicks from Google Search, while URLs with 40 to 44 averaged four times as many. Past roughly 45 to 50 the relationship reverses, and traffic starts to fall again as the count climbs.
So if you want a target, it belongs to your destination pages: the URLs you care about should be receiving somewhere in the region of forty internal links from across the site. You cannot see that from a single scan, because it is a site-wide question. But it tells you what the scan is for — every row this tool returns is one incoming link for some other page.
On outgoing links, which is the number this tool gives you, there is no published sweet spot. Google's guidance dropped the old "keep links to a reasonable number, around 100" line years ago and replaced it with no numeric limit at all. What it does still require is crawlability: Google needs a crawlable <a> element with an href to follow a link at all. A <div> with a click handler is not a link, however much it behaves like one on screen.
Read your outgoing count as a shape rather than a score. Six internal links on a long article means the page is a dead end — readers and crawlers arrive and have nowhere to go next. Three hundred usually means a mega-menu is being counted, and the handful of links you deliberately placed in the body are lost among them.
Anchor text is the part of an internal link that carries meaning. The link itself creates a crawl path and moves equity; the anchor tells a search engine what is at the other end. This is why two links to the same page can be worth very different amounts.
The rule is short: the anchor should read like the topic of the page it points at, in the words a person would use.
| Anchor text | Why it works or doesn't |
|---|---|
internal linking guide | Names the destination topic |
our 2026 pricing tiers | Specific, reads naturally |
click here | Describes the click, not the page |
read more | Interchangeable with any link |
| (empty) | Usually an image with no alt |
That last row is the one worth scanning for. When the checker returns a blank anchor, it is almost always an image wrapped in a link where the image has no alt text. Neither a crawler nor a screen reader gets anything from that link. It is the cheapest fix on any page, because you are not adding a link — you are describing one that already exists.
Varying your anchors is not just a safety measure against looking engineered — it appears to be the more valuable half of the exercise. The same 23-million-link study found that the number of distinct anchor text variations pointing at a page correlated with search traffic more strongly than the raw count of links did. A page reached by forty links that all say the same three words is being described to Google in exactly one way. Forty links using a dozen honest phrasings describe it from a dozen angles.
The one thing not to do is write anchors for the crawler at the expense of the sentence. An anchor that reads awkwardly to a person is a signal that you have optimised past the point of usefulness.
Almost never, and the reason is older than most people expect.
The idea that you could nofollow low-value internal links to funnel equity toward important ones — PageRank sculpting — stopped working in 2009. Matt Cutts, then head of Google's webspam team, explained the change: a nofollowed link no longer redistributes its share of a page's equity to the remaining links. That share is simply dropped. Sculpting stopped being a clever redistribution and became a straightforward subtraction.
So when a scan shows nofollow on internal rows, the finding is usually not a strategy. It is one of three things:
rel="nofollow" to a whole block of links and was never revisited.<meta name="robots" content="nofollow"> that quietly marks every link on the page, which is why we fold that tag into each row rather than reporting it separately. If every internal link on your page came back nofollow, check the head first.The exception worth keeping is a destination you genuinely do not want crawled — a login URL, a cart, a faceted filter combination that generates thousands of near-identical URLs. Even there, blocking the pattern in robots.txt or handling it with canonicals is usually the more reliable control, and internal nofollow is the weaker instrument.
In this order, because it runs cheapest-and-most-certain first:
That last point is where a single-page check runs out of road, and I would rather say so than pretend otherwise. This tool reads one page. It cannot tell you which pages have no inbound internal links at all — and orphan pages are the internal-linking failure that actually costs traffic. Across the sites we audited in the first half of 2026, the sites failing on crawlability carried a median of 8% of their pages as orphans. Nothing you can see from one URL will surface that.
For the site-level view — every page crawled, broken internal links listed, orphans identified, click depth measured — run a full site audit, or browse the rest of the free SEO tools if you want to check one specific thing first.
Source: SEOmator crawling and audit data, January–July 2026 (100,000+ websites audited, 50M+ pages crawled).
You need evidence in the deck, not an assertion. Scan the client's key landing page and show the internal link count, the nofollow rows and the empty anchors — then widen it with a full site audit.
A framework upgrade or a new menu component can move links out of the server-rendered HTML without anyone noticing. Scan the page before and after the deploy and compare the internal count.
Confirm the links you added made it into the HTML, that the anchor text reads like the page it points at, and that nothing is silently nofollowed by a CMS setting.
Raw HTML, no JavaScript executed. That is a deliberate choice: it is the only way to see which links exist before rendering, which is the version a crawler meets first.
Most free link checkers return a list of URLs. The anchor text is the part that tells a search engine what the destination is about, so it belongs in the table.
A page-level robots nofollow meta tag marks every link on the page, and it is invisible unless you read the head. We fold it into each row.
The full table renders on the page. No credit card, no email gate, no trial that expires after three scans.
One page, raw HTML, subdomains counted as external, 500 rows listed. Every limit is stated here rather than discovered after you have trusted a number.
One of SEOmator's free SEO tools, alongside the crawl test, the redirect checker and a complete site audit.
Internal links do three jobs at once. They give search engines a path to discover pages, which is how a page gets crawled and indexed in the first place. They pass link equity between pages, so a page nobody links to internally competes with less weight behind it. And their anchor text tells a search engine what the destination page is about, which is why a link labelled with a topic outperforms one labelled 'read more'.
There is no published sweet spot for links going out of a page, and Google dropped its old 'around 100 links' guideline years ago without replacing it with a number. The evidence that does exist is about links coming in: Zyppy's study of 23 million internal links found that URLs receiving 40 to 44 internal links averaged four times the Google clicks of URLs receiving 0 to 4, with the relationship reversing past roughly 45 to 50. So treat your outgoing count as a shape rather than a score — six internal links on a long article means a dead end, and 300 usually means a mega-menu is being counted.
Indirectly, yes. Link equity is divided among the links on a page, so 300 links each pass a fraction of what 40 would. Google dropped its old roughly 100-links-per-page guideline years ago and no hard limit replaced it, so the practical risk is dilution and navigation clutter rather than a penalty. If a scan returns far more links than the page appears to contain, the extra ones are almost always a mega-menu or footer repeated in the HTML.
Use descriptive anchor text, and do not force every link to the same exact phrase. Internal anchors are one of the clearest signals you control for telling a search engine what a page is about, so the anchor should read like the destination's topic. Repeating one identical phrase across hundreds of internal links looks engineered; varying it naturally across close variants does the same job without that risk.
Track the destination pages, not the links. Watch impressions and average position for the linked page in Google Search Console before and after you add internal links to it, and check in your crawl data whether its click depth from the homepage dropped. A page moved from four clicks deep to two is the change most likely to show up in traffic.
For a single page, run it through this checker: you get every internal link with its anchor text and follow status in one pass. For a whole site you need a crawler, because the questions that matter across a site — which pages have no inbound internal links, which internal links return a 404, how deep each page sits from the homepage — cannot be answered from one page's HTML. Google Search Console's Links report also lists your most-linked internal pages, though it lags by several days.
An internal link is a link from one page on a domain to another page on the same domain. A link to a different domain is an external or outbound link. The distinction matters because internal links are the ones you fully control: you decide which pages get linked, how often, and with what anchor text. This tool classifies a link as internal when its hostname matches the page's hostname after a leading 'www.' is removed, which means a link to a subdomain such as blog.example.com is counted as external.
In HTML it is an anchor element whose href points at a path or a URL on the same domain, with the visible clickable text between the tags — that text is the anchor text. A link can also carry a rel attribute; rel="nofollow" tells search engines not to pass link equity through it. This checker reads all three parts of each link: the resolved destination, the anchor text, and the rel value.
This page lists internal links only, but the counts give you both numbers: subtract the internal count from the page total and the difference is external. Mailto and telephone links are counted as external, since they leave the site. If you want external links listed row by row with their anchor text and rel values, run the page through a full site audit instead, which reports internal and external links together.
They are not alternatives — anchor text is part of a link. The internal link is the connection between two pages on your site; the anchor text is the visible wording that link is wrapped in. The link creates the crawl path and passes equity, and the anchor text describes what is at the other end. That is why an internal link with a blank or generic anchor still helps discovery but tells a search engine almost nothing about the destination.
Deeper reading from the SEOmator blog on what this tool measures.

Run a complete Shopify SEO audit for 2026 with this 4-phase checklist covering Core Web Vitals (INP), AI Overviews readiness, structured data, and free audit tools.

An SEO audit for charities covers 16 areas from site indexing to local SEO. With organic search driving 44% of nonprofit website traffic and only 0.16% of visitors donating, a thorough audit helps maximize every visitor's potential to support your cause.

An SEO audit for law firms covers keyword research, on-page optimization, technical health, local SEO, backlinks, and competitor analysis. With 87% of clients using Google to find lawyers, regular audits are essential for maintaining visibility and generating qualified leads.
Elevate your online presence with our tool: Get found, Get ahead