Free Shopify store auditSpeed, SEO and conversion leaks — no cost, no obligation.
Claim it
Thriftizer Solutions LLPShopify Select Partner
Book a Growth Audit
Shopify Aug 4, 2026 8 min read

Shopify Migration for Canadian Brands: GST/HST and Bilingual URLs

How to configure GST, HST, QST and provincial PST correctly in Shopify, and structure French-language URLs and hreflang so a bilingual migration doesn't cost you Quebec traffic.

Get the tax registrations right first, then the language layer. That order matters, because Shopify's Canadian tax engine keys off which provinces you're registered in, and a bilingual store multiplies every URL you have to redirect. A working Shopify Canada tax setup is: turn off tax-inclusive pricing, add your GST/HST number under Settings > Taxes and duties > Canada, add QST and any PST registrations separately, then override the handful of collections Canada treats differently. Shopify maintains the rate table. You own the registrations and the filings.

The French side is where migrations actually slip. Quebec is not an optional locale, and if your old site had /fr/ URLs that don't survive the move, you lose the traffic and you get a complaint file at the same time.

The rate table, and why it isn't one rate

Five percent GST applies federally. Five provinces fold the provincial portion into a single Harmonized Sales Tax: Ontario at 13%, and New Brunswick, Newfoundland and Labrador, and Prince Edward Island at 15%. Nova Scotia moved from 15% to 14% in April 2025, which is the kind of change that quietly breaks a hardcoded rate someone entered manually in 2021. British Columbia charges 7% PST on top of GST, Saskatchewan 6%, Manitoba 7% RST. Quebec charges 9.975% QST. Alberta and the three territories are GST only.

Take a CAD 120 cart, tax excluded:

  • Ontario: 120 × 1.13 = 135.60
  • Alberta: 120 × 1.05 = 126.00
  • Quebec: 120 × 0.05 = 6.00 GST, plus 120 × 0.09975 = 11.97 QST, so 137.97

Note that QST is calculated on the pre-GST amount, not on the GST-inclusive total. Shopify gets this right. Spreadsheets people build to check Shopify often don't.

Registration thresholds decide the whole configuration

You register for GST/HST once your worldwide taxable supplies exceed CAD 30,000 across four consecutive calendar quarters. Below that you're a small supplier and can choose not to register, though most D2C brands register voluntarily to claim input tax credits on Shopify fees, ad spend, packaging and 3PL invoices. That reclaim is usually worth more than the bookkeeping cost by the second quarter.

The provincial layer is separate and each province sets its own trigger. Saskatchewan has no threshold at all for out-of-province vendors selling into the province. British Columbia and Manitoba each use a CAD 10,000 provincial-sales trigger. Quebec runs a specified registration system for out-of-province suppliers with its own CAD 30,000 threshold. So a brand in Toronto shipping nationally can easily need four separate registrations and four separate filing calendars: CRA for GST/HST, Revenu Québec for QST, and two provincial finance ministries.

Shopify will not file any of them. It calculates and collects. Everything after that is your accountant.

In Shopify, each registration you add unlocks collection for that region. If you skip adding your BC PST number, Shopify charges 5% on BC orders and you eat the 7% at audit. If you add a registration you don't hold, you're collecting tax you have no authority to collect, which is worse.

Tax-inclusive pricing is the migration bug we see most

Brands coming from an Indian or UAE store arrive with "all prices include tax" switched on, because that's how GST and VAT are displayed in those markets. Canada is tax-exclusive. Shoppers expect the sticker price to be pre-tax and the tax to appear at checkout. Leave the setting on and your margin swings by province.

Say you migrate that CAD 135.60 Ontario price across as a single tax-inclusive figure. In Ontario you net 120.00. In Alberta, 135.60 ÷ 1.05 = 129.14. In Quebec, 135.60 ÷ 1.14975 = 117.94. Same displayed price, net revenue ranging from 117.94 to 129.14, an 11.20 spread on a 135.60 order. Nobody notices for a quarter, then the P&L doesn't reconcile to Shopify's reports and someone spends three days on it.

Turn it off before you import products, not after. Changing it later doesn't reprice anything; it just reinterprets every price in your catalogue.

The exemptions worth configuring

Canada zero-rates basic groceries federally, which catches out food and beverage brands who assume everything edible is taxable. Snack foods, carbonated drinks and most single-serve items stay taxable, so a supplements or healthy-snacks catalogue often needs line-by-line classification rather than a blanket rule.

Ontario applies point-of-sale rebates of the 8% provincial portion on printed books, children's clothing and footwear, diapers and children's car seats. British Columbia exempts children's clothing from PST. In Shopify you handle this with tax overrides scoped to a collection and a region. Build a dedicated collection for each override group. Do not try to do it with tags and hope.

Shipping is taxable in Canada at the destination province's rate, which Shopify handles automatically once the registrations are in. Digital products and subscriptions are taxable too.

If you're shipping into Canada from India

Non-resident vendors selling to Canadian consumers have had to register under the simplified GST/HST regime since July 2021 once sales cross CAD 30,000 over twelve months. Separately, the de minimis on shipments arriving from India is CAD 20. Above that, duty and GST apply on arrival. The CAD 40 tax and CAD 150 duty thresholds people quote are the CUSMA numbers and only apply to courier shipments originating in the US or Mexico.

Practically, that means almost every parcel you send from Mumbai to Vancouver attracts something at the border. Either you quote DDP at checkout and absorb the brokerage, or your customer gets a bill from the courier and files a chargeback. We've seen the second version enough times to have an opinion about it. Configure duties at checkout and price for it.

Quebec's Charter of the French Language, amended by Bill 96 in 2022, requires commercial documentation aimed at Quebec consumers, websites included, to be available in French, and the French version can't be less accessible or less favourable than the English one. Complaints go to the Office québécois de la langue française. Most brands find out about this from an email, not from a lawyer.

So the question isn't whether to translate. It's how much. A defensible minimum is product titles and descriptions, collection copy, cart and checkout, shipping and returns policy, order confirmation and shipping notification emails, and the footer navigation. Blog archives are lower risk. Machine translation post-edited by a native Quebec French speaker is fine for catalogue copy and noticeably not fine for policy pages, where a bad translation reads as carelessness.

Quebec French and France French differ in retail vocabulary. Use a translator based in Quebec. It costs the same.

URL structure and hreflang for a bilingual Shopify store

Set Canada up as one market with two published languages, English and French. Do not create separate markets for each language. Markets control currency, pricing and inventory routing; splitting by language forces you to maintain two price lists for one country and the drift starts within a month.

With that structure, Shopify serves English at the root and French at /fr/. Your product URL becomes yourbrand.ca/fr/products/handle. Shopify's Translate & Adapt lets you translate the handle itself, so the slug can read in French, but the path segment stays /products/. There's no way to get /fr/produits/ on Shopify. If your French SEO consultant asks for it, the answer is no, and it has never been the thing holding a store back in Quebec search results.

Shopify emits hreflang tags for published languages automatically, including self-referencing tags and x-default. Two things still need checking by hand after launch: that canonical tags on each French page point to the French URL and not the English original, and that the language switcher uses real links rather than JavaScript. A switcher that fires a JS event and no href is invisible to crawlers, and roughly a third of the themes we migrate ship with one.

Redirect mapping doubles on a bilingual migration

This is the part that gets underestimated. If you're coming off WooCommerce with WPML, or Magento with store codes, you have two full URL sets to map, and the old French paths rarely follow the same pattern as the English ones. WPML sites often sit on /fr/produit/. Magento might use /fr_ca/. Neither maps cleanly to Shopify's structure.

Crawl both language trees before you touch anything. Export every URL with organic entrances or backlinks from the last twelve months, build the redirect file with source and target columns, and import it to Shopify before the DNS change, not after. Redirects created after the switch still work, but you'll have spent a day serving 404s to Google during a recrawl and it takes weeks to recover the positions.

One more thing that catches people: Shopify won't accept a redirect whose source path already exists as a live URL. If your old English handle collides with a new one, resolve it in the product import, not in the redirect file. We plan for this explicitly in every Shopify migration where the source site was multilingual, and it's still the step that runs over.

What to check on day one after launch

  • Place a real CAD 1 test order to an Ontario address, a Quebec address and an Alberta address. Confirm three different tax lines and that the Quebec order shows GST and QST separately.
  • Confirm the order confirmation email arrives in French for a French-locale customer. Shopify uses the customer's browsing language, and untranslated notification templates fall back to English silently.
  • Run the French sitemap through a crawler and check that every entry returns 200, not a 302 to the English page.
  • Check that app-injected content, product reviews, size charts, filter labels, renders in French. Most apps store their strings outside Shopify's translation system and need to be configured separately or replaced.
  • Verify your GST/HST number appears on the invoice or order confirmation. CRA expects it on receipts for taxable supplies.

If you're planning the move and want a second pair of eyes on the redirect map and the tax matrix before you commit to a date, our Canada team will review both. Or start with a free audit of the existing store, which is usually where the awkward URLs surface.

Previous postNext post

Ready to scale your D2C brand profitably?

Let's build a growth engine that drives more traffic, more conversions and more profit.

Book a Growth Audit
📅 Free Audit💬 WhatsApp