Four signals, each tied to a rule in Quebec law. The checker reads the HTML your server sends on the first visit, then opens the privacy policy it links to and, if needed, tries /fr.
Trackers before consent
What we look for
Analytics and ad scripts (Google Analytics 4, Google Ads, Google Tag Manager, Meta Pixel, TikTok, Pinterest, Snap, LinkedIn, Microsoft Clarity and UET, Hotjar, Klaviyo and about 15 more) that start in the page’s first HTML without waiting for consent: not marked type="text/plain", not tied to a consent tool, and not checking Shopify’s Customer Privacy API first. Shopify customer-event pixels are counted separately, because Shopify holds them until consent where a banner asks for it.
Why it matters
Section 8.1 of Quebec’s private-sector privacy act says that before you use technology that can identify, locate or profile a visitor, you must tell them and explain how to turn it on. The Commission d’accès à l’information reads this as: those functions must be off by default. Ad pixels and session recorders profile visitors.
How to fix it
Load every analytics and ad tag through your consent banner or through Shopify customer events, so nothing starts before a visitor says yes. Then test in a private window: no requests to Google, Meta or TikTok until you accept.
Official sources
Cookie consent banner
What we look for
Shopify’s own cookie banner, and about 25 consent tools: OneTrust, Cookiebot, Didomi, Axeptio, Usercentrics, CookieYes, Termly, iubenda, Osano, Pandectes, Consentmo, Enzuzo, TrustArc, Complianz and others. We also notice when a speed script delays the banner.
Why it matters
A banner is how a visitor is told about trackers and how they switch them on, which section 8.1 requires. The law doesn’t name a banner, but it’s the usual way to do it on a website.
How to fix it
On Shopify, turn on the cookie banner in Settings › Customer privacy and set its region visibility to include Quebec. Write its text in plain French and English, with Accept and Decline equally easy to click.
Official sources
Privacy policy and person in charge
What we look for
A link to a privacy policy on the page (or Shopify’s /policies/privacy-policy), that the policy opens, and that it names the person in charge of the protection of personal information, with an email address or phone number near that title.
Why it matters
Section 8.2 requires a privacy policy in clear and simple terms on your website when you collect personal information online. Section 3.1 makes the person with the highest authority in the business the person in charge by default, and requires their title and contact details on the website.
How to fix it
Add a section titled “Person in charge of the protection of personal information” with their title and a direct email address, and link the policy from your footer. Say which cookies and trackers you use and why.
Official sources
French version
What we look for
A page in French (lang="fr" or fr-CA), French alternates announced with hreflang, a link to a French version, or a French page that answers at /fr or /fr-ca.
Why it matters
Under the Charter of the French language, as amended by Bill 96, commercial publications of a business active in Quebec must be in French, and the Office québécois de la langue française says this includes websites. Another language is allowed if the French version is at least equivalent and as easy to reach.
How to fix it
Publish a complete French version: product pages, checkout, emails and policies, not only the menu. On Shopify, add French in Settings › Languages, translate with Translate & Adapt or a translator, and keep the language switcher visible.
Official sources