SEO · Ottawa, Ontario

Technical SEO, done by the people who fix the code

Most SEO engagements end with a PDF and a list of things for someone else to implement. We are a development shop, so the audit and the fix are the same job. We crawl the site, read the Search Console data, find what is actually wrong, and then go and change it.

What we will and will not claim

We are not going to show you a chart of somebody else's traffic. We do not have analytics access to our clients' marketing dashboards, and agencies that publish those numbers are usually selling correlation as cause.

What we can show you is our own work, in public. In August 2026 we ran the audit below on nanushi.org itself and found that our sitemap had been publishing 24 URLs that did not exist — the route keyed tutorial chapters as introduction while the sitemap published the filename, 01-introduction. All 24 returned HTTP 200 with "Not Found" on the page. That one mistake produced the duplicate-title, duplicate-description, multiple-H1 and canonical-outside-head clusters our crawl reported, all at once.

We also found we had never submitted our sitemap to Search Console in the property's lifetime, that our homepage declared no canonical at all, and that our structured data pointed logo and image at a file that 404'd. Every one of those is fixed and written up. That is the same method we would run on your site, and the writeups are linked at the bottom of this page so you can judge the work before paying for it.

What an audit covers

Ordered deliberately. Each step rules something out, and the cheap decisive checks come first — so you find out quickly whether you have a technical problem or a content problem, rather than paying to guess.

01

Crawlability and indexing

Before anything can rank it has to be crawled, and a surprising number of sites fail at exactly that step. We check whether Google has actually fetched each page, whether the sitemap has ever been submitted (serving one is not the same as submitting it), and whether robots.txt or a stray noindex is quietly excluding pages you care about.

  • Every sitemap URL fetched and confirmed to return a real page
  • Coverage state per URL — indexed, discovered-not-indexed, or unknown
  • robots.txt and noindex audit
  • Orphan pages with no internal links pointing at them
02

Sitemap correctness

A sitemap is a promise that the listed URLs exist. Generators usually derive slugs from filenames while the router derives them from a lookup table, and when those two disagree the sitemap advertises pages that render "Not Found" while returning a 200 status. That is a soft 404, and a sitemap full of them tells Google the site is broken.

  • Sitemap URLs diffed against the routes the app actually serves
  • Soft 404 detection — 200 responses with not-found content
  • Real pages missing from the sitemap entirely
  • 308 redirects rather than 404s where a bad URL was already discovered
03

Canonical consolidation

If the same page is reachable at apex and www, at /page and /page/, or through filter parameters, Google has to pick one and it may not pick yours. Canonicals also have to be declared per page and inside the head — a canonical set in a root layout is inherited by every page that does not override it, quietly pointing the whole site at the homepage.

  • One canonical per page, declared in the head, absolute URL
  • Apex vs www settled, with a permanent redirect rather than a 307
  • The host Google actually chose, checked before switching anything
  • Trailing-slash and parameter duplicates collapsed
04

Core Web Vitals and performance

Speed is a ranking signal, and it is also the reason people leave. We measure LCP, INP and CLS on real page loads rather than a synthetic score, then fix the causes — oversized hero images, render-blocking fonts, layout that jumps when an ad or image finally arrives, and JavaScript shipped to the browser that could have run on the server.

  • LCP, INP and CLS measured per template, not sitewide averages
  • Image sizing, formats and lazy-loading
  • Font loading strategy and layout shift
  • Bundle size and what actually needs to be client-side
05

Structured data

Schema markup tells Google what a page means rather than making it guess. It is also easy to get wrong in ways that hurt: markup that asserts an image or logo which returns a 404 is worse than no markup at all, and self-serving review markup for your own business on your own site is against Google's guidelines and is enforced with manual actions.

  • LocalBusiness, Service, Article, FAQ, Product and Breadcrumb as appropriate
  • Every URL referenced in JSON-LD fetched and confirmed to resolve
  • No aggregateRating on your own site — we link to the real profile instead
  • Validation against Google's Rich Results Test
06

Local SEO for Ottawa

For a business serving Ottawa, Kanata or Stittsville, the map pack is often worth more than the organic results underneath it. That is won with a complete Google Business Profile, name/address/phone details that match everywhere they appear, and location pages that say something real rather than the same paragraph with the suburb swapped out.

  • Google Business Profile completeness and category choice
  • NAP consistency across the site and directory listings
  • LocalBusiness structured data with a genuine service area
  • Location and service pages that are distinct from one another
07

SEO-preserving migrations

A redesign is the most common way a business destroys rankings it spent years building. The work is unglamorous and it is nearly all done before launch: inventory every URL that currently exists, map each one to its replacement, and keep the redirects permanent. Then verify afterwards rather than assuming.

  • Full pre-launch URL inventory from the sitemap, analytics and Search Console
  • One-to-one 301 map, no chains, no blanket redirect to the homepage
  • Titles, descriptions and structured data carried across
  • Post-launch crawl and Search Console check at 7–10 days

Two ways to work with us

SEO built into the build

If we are building or rebuilding your site, this is not a line item. Per-page canonicals, a sitemap generated from the same source the router uses, structured data with assets that resolve, an OpenGraph image on every route, and Search Console connected before launch rather than six months after.

See our development services →

A standalone audit of a site we did not build

WordPress, Shopify, Webflow, Squarespace or custom — the checks are the same. You get a written list of findings ordered by severity, with the evidence for each one, and a clear split between what we can fix in the code and what is a content or authority problem that no configuration will solve.

Ask about an audit →

How the audit runs

  1. 1

    Ground truth first

    We connect to Search Console and pull coverage, traffic, submitted sitemaps and the canonical host. Numbers before opinions. This alone answers whether the site has ever been indexed, which decides everything that follows.

  2. 2

    Inspect individual URLs

    Totals hide the shape of a problem. We inspect the homepage, two commercial pages and two deep pages, and read the coverage state on each. "Crawled: never" across a site means the problem is upstream of content entirely.

  3. 3

    Crawl it ourselves

    A full crawl of every URL, checking titles, descriptions, canonicals, headings, structured data and OpenGraph. A cluster of findings with the same count is usually one bug, not four.

  4. 4

    Fetch what the sitemap promises

    The step most often skipped, and the one that found the real bug on our own site. Every sitemap URL is fetched and the response body read, not just the status code.

  5. 5

    Fix, then wait

    We implement, submit the sitemap, and ping IndexNow for Bing, Yandex, Seznam and Naver — Google does not participate in IndexNow and has no API for requesting indexing of ordinary pages. Then we wait 7–10 days and re-read before changing anything else, because stacking fixes means never learning which one worked.

Not sure whether it is technical or content?

That is the question the audit answers, and it is worth answering before you spend anything on either.

Get in touch

SEO FAQ

How long before we see results?

Indexing changes can show up in Search Console within days. Ranking changes take longer and depend on how competitive your queries are. Anyone quoting you a fixed timeline for a ranking position is guessing — the honest answer is that a technical fix has a fast, measurable signal (pages moving from discovered to indexed) and a slow, uncertain one (position).

Do you guarantee a position on page one?

No, and it is worth being suspicious of anyone who does. Google does not sell or promise placement, so nobody can guarantee it. What we can commit to is that the technical reasons you are not ranking will be found and fixed, and that we will tell you plainly when the remaining problem is content or authority rather than configuration.

Will you write the content too?

We can, and often the honest finding at the end of an audit is that the technical side is clean and the commercial pages are simply too thin to compete. That was the finding on our own site. But we will not pretend a configuration change fixes a page that has 64 words on it.

Do we need to move off WordPress or Shopify?

Usually not. Nearly all of the checks above are platform-independent, and most technical SEO problems on a WordPress site are fixable within WordPress. If we think a rebuild is warranted we will tell you why in terms of what it fixes, not as a default recommendation.

Do you work with Ottawa businesses specifically?

We are based in Ottawa and have a particular focus on Ottawa and the Ottawa Valley, which matters more for SEO than for most services — local ranking depends on things like Google Business Profile and service-area pages. We also work with clients across Canada where local ranking is not the goal.

What do you need from us to start?

Read access to Google Search Console for the property, and the site URL. Analytics access is useful but not required. If the property does not exist yet, setting it up is the first thing we do — a site with no Search Console property is a site nobody is measuring.