# Apex Sentinel — The Alchemy Monthly Audit

**URL:** https://www.thealchemy.nyc/
**Platform:** unknown
**Archetype:** premium
**Run ID:** 2026-04-19T06-18-18-831Z
**Scanned:** 2026-04-19T06:18:19.213Z
**Duration:** 751s

This is a **monthly deep audit**. The crawler performed a full-site scan including
Lighthouse performance, axe-core accessibility (WCAG 2.2 AA), cross-browser compatibility,
security headers, schema markup validation, and SEO best-practice checks.

Because this site is not a repository we control, Apex Sentinel **cannot automatically
apply fixes** — instead, each finding below includes an AI-generated plain-English
explanation + step-by-step recommended fix you can hand to a developer or execute
in your CMS directly.

---

## Executive Summary

**Overall grade:** **D**

| Dimension | Count | Meaning |
|---|---|---|
| Pages crawled | 32 | Full sitemap + linked pages |
| P0 (critical) | 0 | Site-down or compliance-breaking |
| P1 (urgent) | 8 | Significant revenue / SEO / UX impact |
| P2 (high) | 95 | Quality / ranking / trust degradation |
| P3 (medium) | 65 | Polish + optimization |
| "Do first" items | 8 | AI-flagged top priorities |
| Quick wins (< 30 min) | 38 | Fastest ROI items |

---

## Top 10 Actions (Ranked)

If you only have time for ten things this month, do these — in this order.

1. **[P1] 🔴 DO FIRST 2 mixed-content references (http://)** — _For a cannabis retailer, broken compliance resource links (like the NY OASAS HOPELine) undermine credibility with regulators and harm customer trust at a critical touchpoint._
   Page: https://www.thealchemy.nyc/
   Effort: Quick win (< 30 min)
2. **[P1] 🔴 DO FIRST A11y: ARIA dialog and alertdialog nodes should have an accessible name** — _You're excluding disabled customers from purchasing, creating legal liability under the ADA, and potentially violating state cannabis regulations that require equal access to age-gated sales flows._
   Page: https://www.thealchemy.nyc/
   Effort: Quick win (< 30 min)
3. **[P1] 🔴 DO FIRST A11y: Required ARIA attributes must be provided** — _Failure to fix accessibility issues exposes your dispensary to potential ADA lawsuits and limits your audience to sighted visitors, reducing foot traffic and online sales from customers with disabilities._
   Page: https://www.thealchemy.nyc/
   Effort: Quick win (< 30 min)
4. **[P1] 🔴 DO FIRST A11y: Certain ARIA roles must contain particular children** — _Customers using screen readers cannot properly browse or purchase your products, which excludes a meaningful segment of users and may expose you to accessibility compliance complaints._
   Page: https://www.thealchemy.nyc/
   Effort: Moderate (1-3 hours)
5. **[P1] 🔴 DO FIRST A11y: ARIA roles used must conform to valid values** — _This accessibility barrier may expose you to ADA/WCAG compliance risk and reduces inclusivity for disabled customers — a meaningful portion of retail traffic._
   Page: https://www.thealchemy.nyc/
   Effort: Quick win (< 30 min)
6. **[P1] 🔴 DO FIRST A11y: Elements must meet minimum color contrast ratio thresholds** — _Customers with visual impairments cannot distinguish product status labels, creating a poor experience and potential ADA compliance liability for your e-commerce site._
   Page: https://www.thealchemy.nyc/
   Effort: Quick win (< 30 min)
7. **[P1] 🔴 DO FIRST A11y: Links must have discernible text (×2)** — _This breaks accessibility for blind and low-vision visitors, creates legal exposure under the ADA, and signals to search engines that your site may not be trustworthy or well-maintained._
   Page: https://www.thealchemy.nyc/
   Effort: Quick win (< 30 min)
8. **[P1] 🔴 DO FIRST Journey failed: default: homepage → age gate → menu visible** — _Customers cannot view your menu or products after age verification, directly blocking sales and forcing them to competitors or offline purchases._
   Page: https://www.thealchemy.nyc/
   Effort: Moderate (1-3 hours)
9. **[P2] 🟠 HIGH Missing canonical** — _Search engines may rank a duplicate or wrong version of your homepage, losing visibility in local searches for cannabis dispensaries in NYC—directly harming foot traffic and online orders._
   Page: https://www.thealchemy.nyc/
   Effort: Quick win (< 30 min)
10. **[P2] 🟠 HIGH 11 image(s) missing alt text** — _Missing alt text reduces organic search visibility for image queries, excludes disabled visitors from your site (legal risk under ADA/AODA), and weakens SEO for product and strain photography — critical for a premium cannabis retailer._
   Page: https://www.thealchemy.nyc/
   Effort: Moderate (1-3 hours)

---

## Findings by Severity

### P1 — 8 findings

### 1. 2 mixed-content references (http://)

- **Severity:** P1   |   **Priority:** 🔴 DO FIRST
- **Effort:** Quick win (< 30 min)
- **Business category:** compliance
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier5.mixed-content`

**What it means (plain English)**

Your website is served over HTTPS (secure), but it contains links to HTTP resources (non-secure). Modern browsers will either block these resources or show a security warning to visitors, which erodes trust and may prevent the links from working properly.

**Why it matters for your business:** For a cannabis retailer, broken compliance resource links (like the NY OASAS HOPELine) undermine credibility with regulators and harm customer trust at a critical touchpoint.

**Technical root cause:** The HTML code contains hardcoded http:// URLs pointing to external NY state resources instead of using https:// protocol. The external site likely supports HTTPS but the code wasn't updated.

**Recommended fix — step by step**

1. Open your site in a browser, right-click the HOPELine link, and select 'Inspect' to view the HTML source.
2. Locate the line containing http://oasas.ny.gov/HOPELine in the page HTML or footer template.
3. Change both instances from http:// to https://oasas.ny.gov/HOPELine.
4. Test the link in a browser to confirm it resolves and displays without warnings.
5. If you use a page builder or CMS, search for 'oasas.ny.gov' in all page content and footer settings to catch any other instances.
6. Run a full site crawl using a free tool like Screaming Frog (download and point to your domain) to identify any remaining mixed-content issues.

### 2. A11y: ARIA dialog and alertdialog nodes should have an accessible name

- **Severity:** P1   |   **Priority:** 🔴 DO FIRST
- **Effort:** Quick win (< 30 min)
- **Business category:** compliance
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier9.a11y.aria-dialog-name`

**What it means (plain English)**

Your age-verification popup (the modal dialog that appears when visitors enter the site) is missing a label that screen readers can read aloud. Screen reader users — including blind and low-vision customers — cannot understand what the dialog is for, making it impossible for them to proceed. This is a legal accessibility barrier under the ADA and WCAG 2.1 Level AA standard.

**Why it matters for your business:** You're excluding disabled customers from purchasing, creating legal liability under the ADA, and potentially violating state cannabis regulations that require equal access to age-gated sales flows.

**Technical root cause:** The div with id="age-parent" has role="dialog" and aria-modal="true" but lacks an aria-label, aria-labelledby, or title attribute. Screen readers require one of these to announce the purpose of the dialog to assistive technology users.

**Recommended fix — step by step**

1. Inspect the age-verification modal HTML in your browser's developer tools (right-click → Inspect → find the div id="age-parent")
2. Add aria-label="Age Verification" to the opening <div> tag, or add aria-labelledby="[heading-id]" if there's already a heading inside the modal that you can reference
3. If you're using a plugin or library (e.g., a modal plugin or age-gate widget), check its documentation for an accessibility option or label parameter
4. Test the fix: use a free screen reader like NVDA (Windows) or VoiceOver (Mac) to confirm the dialog announces its name when it opens
5. Run the audit again via your accessibility testing tool (axe DevTools, WAVE, or Playwright) to confirm the alert clears

### 3. A11y: Required ARIA attributes must be provided

- **Severity:** P1   |   **Priority:** 🔴 DO FIRST
- **Effort:** Quick win (< 30 min)
- **Business category:** compliance
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier9.a11y.aria-required-attr`

**What it means (plain English)**

A heading element on your site is missing a required ARIA attribute called 'aria-level,' which tells screen readers (software that reads web pages aloud for blind and low-vision users) what level of heading this is (1–6, like HTML's h1–h6 tags). Without it, assistive technology can't properly communicate the page structure. This affects compliance with accessibility standards and legal requirements.

**Why it matters for your business:** Failure to fix accessibility issues exposes your dispensary to potential ADA lawsuits and limits your audience to sighted visitors, reducing foot traffic and online sales from customers with disabilities.

**Technical root cause:** A div element was given a heading role but no aria-level attribute to specify its hierarchy. The div should either be converted to a native HTML heading tag (h1–h6) or the aria-level attribute must be explicitly added.

**Recommended fix — step by step**

1. Open your site's HTML inspector (right-click the address '302 8th Ave, New York, NY, 10001' → Inspect or F12).
2. Locate the div with class 'text-32 is-green' and role='heading'.
3. Replace it with a native heading tag matching your page structure, e.g., <h2 class="text-32 is-green">302 8th Ave, New York, NY, 10001</h2>, OR add aria-level="2" to the existing div.
4. If you're using a page builder (Webflow, Wix, WordPress), search your editor for 'role=heading' text and switch it to a native heading element in the element settings.
5. Run an accessibility check with a free tool like WAVE (wave.webaim.org) or axe DevTools browser extension to confirm the fix.
6. Test with a screen reader (VoiceOver on Mac, NVDA on Windows) or ask a team member to verify the heading is now properly announced.

### 4. A11y: Certain ARIA roles must contain particular children

- **Severity:** P1   |   **Priority:** 🔴 DO FIRST
- **Effort:** Moderate (1-3 hours)
- **Business category:** accessibility
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier9.a11y.aria-required-children`

**What it means (plain English)**

Your product carousel (the sliding list showing items) has an ARIA role of "list" but contains child elements with role="group" instead of the required role="listitem". ARIA roles are invisible labels that tell screen readers what content does; when those labels don't match the structure, screen reader users get confused or can't navigate properly.

**Why it matters for your business:** Customers using screen readers cannot properly browse or purchase your products, which excludes a meaningful segment of users and may expose you to accessibility compliance complaints.

**Technical root cause:** The Webflow slider component (Swiper library) is generating role="list" on the carousel container, but the individual product cards inside are marked with role="group" instead of role="listitem". This mismatch violates WCAG 2.1 Level A requirements.

**Recommended fix — step by step**

1. Open your Webflow Designer and locate the carousel/slider component on the homepage
2. Select the carousel wrapper element (the swiper-wrapper div) and inspect its element settings
3. Remove or change the role="list" attribute if it's hardcoded; if it's auto-applied by the Webflow Slider component, you may need to use custom code
4. Select each product card/item inside the carousel and change its ARIA role from "group" to "listitem" via the element properties panel or custom attributes
5. If the slider component doesn't expose ARIA role controls in the UI, add a custom code embed in the page's head or footer with: `document.querySelectorAll('#swiper-wrapper-887121b083756bbb > div').forEach(el => el.setAttribute('role', 'listitem'));`
6. Test with a screen reader (NVDA on Windows or VoiceOver on Mac) or run axe DevTools again to confirm the error is gone

### 5. A11y: ARIA roles used must conform to valid values

- **Severity:** P1   |   **Priority:** 🔴 DO FIRST
- **Effort:** Quick win (< 30 min)
- **Business category:** compliance
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier9.a11y.aria-roles`

**What it means (plain English)**

Your site has a div element with role="page wrap" — but ARIA (Accessible Rich Internet Applications) only allows single, valid role names. "page wrap" is two words and isn't a recognized role. Screen readers used by people with vision loss won't understand what this element does, making your site harder to navigate for disabled visitors.

**Why it matters for your business:** This accessibility barrier may expose you to ADA/WCAG compliance risk and reduces inclusivity for disabled customers — a meaningful portion of retail traffic.

**Technical root cause:** The HTML markup contains role="page wrap" which violates ARIA spec; valid roles are single values like "main", "navigation", "contentinfo", etc. This was likely a typo or misunderstanding of role syntax.

**Recommended fix — step by step**

1. Open your browser's DevTools (F12 → Inspector tab) and find the element with class="page_wrap"
2. Identify its actual semantic purpose: Is it the main content wrapper? Navigation? Complementary sidebar?
3. Replace role="page wrap" with ONE valid ARIA role: if it's the page wrapper, use role="main"; if it's a landmark container, use appropriate role like "region"; if it's purely structural, remove the role attribute entirely
4. Test the fix: re-run your accessibility audit tool (axe, WAVE, or Lighthouse) to confirm "aria-roles" no longer flags errors
5. If unsure which role fits, consult the ARIA Authoring Practices Guide: https://www.w3.org/WAI/ARIA/apg/ — search for your element's function

### 6. A11y: Elements must meet minimum color contrast ratio thresholds

- **Severity:** P1   |   **Priority:** 🔴 DO FIRST
- **Effort:** Quick win (< 30 min)
- **Business category:** compliance
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier9.a11y.color-contrast`

**What it means (plain English)**

A label on your product carousel ('Active') uses white text on a bright green background with insufficient contrast. The colors blend together, making the text hard to read for anyone with color vision deficiency or low vision. WCAG 2 AA requires a contrast ratio of at least 4.5:1; this element scores only 2.74:1.

**Why it matters for your business:** Customers with visual impairments cannot distinguish product status labels, creating a poor experience and potential ADA compliance liability for your e-commerce site.

**Technical root cause:** The CSS for `.banner_status > .active > div` sets white text (#ffffff) on a green background (#00b527) without sufficient luminance difference. At 10.5pt font size, this combination falls below the required threshold.

**Recommended fix — step by step**

1. Open your browser's DevTools (F12 → Inspector tab) and right-click the 'Active' label to inspect its element.
2. Note the exact CSS selectors and current colors in the Styles panel.
3. Change the text color from white (#ffffff) to a darker color such as #000000 (black) or #003300 (dark green) to increase contrast against the green background.
4. Alternatively, change the background color from #00b527 to a darker green like #006B15 and keep white text.
5. Test the new contrast ratio using WebAIM's Contrast Checker (https://webaim.org/resources/contrastchecker/) — aim for at least 4.5:1.
6. If you use a CSS preprocessor or bundler, update the source file; otherwise, edit your main CSS file and deploy.
7. Re-run an accessibility audit (e.g., axe DevTools browser extension) to confirm the fix passes.

### 7. A11y: Links must have discernible text (×2)

- **Severity:** P1   |   **Priority:** 🔴 DO FIRST
- **Effort:** Quick win (< 30 min)
- **Business category:** compliance
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier9.a11y.link-name`

**What it means (plain English)**

Your website has two links that screen reader users cannot identify. One is a social media icon link (Instagram) in the footer, and the other is your logo link at the bottom of the page. Both links exist in the keyboard navigation order but lack any text label—users relying on screen readers will hear "link" with no context, making it impossible to know where they lead.

**Why it matters for your business:** This breaks accessibility for blind and low-vision visitors, creates legal exposure under the ADA, and signals to search engines that your site may not be trustworthy or well-maintained.

**Technical root cause:** The links contain only images or icons with no alt text, aria-label, or visible text content. Screen readers have nothing to announce because the HTML provides no accessible name for these elements.

**Recommended fix — step by step**

1. Inspect the social media icon link (Instagram) in your footer: add aria-label="Follow us on Instagram" to the <a> tag, OR replace the role="social button" with a standard <a> tag and wrap the icon in an <img> with alt="Instagram"
2. Inspect the footer logo link: add aria-label="The Alchemy - Home" to the <a> tag, OR ensure the logo image inside has meaningful alt text and remove the redundant role="footer logo button" attribute
3. If using Webflow (likely, given the w-inline-block classes): open the footer section in edit mode, click the Instagram icon link, go to the Settings panel, expand the 'SEO' section, and add an aria-label in the 'Custom attributes' field
4. Do the same for the footer logo link: select it, expand Settings → SEO, add aria-label="The Alchemy - Home" in Custom attributes
5. Test with a screen reader (NVDA on Windows or VoiceOver on Mac) or use the Axe DevTools browser extension to confirm both links now have discernible names
6. Run a full accessibility audit on axe DevTools to check for similar issues elsewhere on the site

### 8. Journey failed: default: homepage → age gate → menu visible

- **Severity:** P1   |   **Priority:** 🔴 DO FIRST
- **Effort:** Moderate (1-3 hours)
- **Business category:** revenue
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier10.journey.failed`

**What it means (plain English)**

Your site is failing to complete the critical customer journey of viewing your menu after passing the age gate. The audit detected three errors: a missing resource (404), a rate-limit response (429), and an API call that exceeded rate limits (11 requests when only 10 are allowed per hour). This means real visitors trying to browse your products are hitting failures and seeing broken experiences.

**Why it matters for your business:** Customers cannot view your menu or products after age verification, directly blocking sales and forcing them to competitors or offline purchases.

**Technical root cause:** Your menu data is fetched from an external API (likely AlpineIQ, a cannabis retail platform) that is either misconfigured, has a missing endpoint, or has aggressive rate-limiting enabled. The 404 suggests a URL mismatch, and the 429 rate-limit error indicates the API is rejecting requests faster than your page is sending them.

**Recommended fix — step by step**

1. Check your AlpineIQ account dashboard (https://lab.alpineiq.com) → Data Integrations or API Settings → verify the menu endpoint URL is correct and the API key is valid and not revoked
2. In AlpineIQ settings, navigate to Rate Limiting or API Throttling → increase the request limit from 10/hour to at least 50/hour, or disable throttling if this is a staging/test environment
3. Open browser DevTools (F12) on your homepage → Network tab → reload and filter by requests to 'alpineiq' → confirm all requests are returning 200 status, not 404 or 429
4. Check if the 404 is pointing to a specific missing file (e.g., a menu image or JSON endpoint) → ask your developer or AlpineIQ support which asset is missing and restore it
5. Test the full age-gate → menu journey again in an incognito window → monitor DevTools Console tab to confirm no errors appear
6. If using a custom integration, review your code for retry logic — add exponential backoff to handle 429 responses gracefully instead of failing immediately

---

### P2 — 95 findings

### 1. Missing canonical

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

Your homepage doesn't include a canonical tag—a small piece of code that tells search engines which version of a page is the 'official' one. Without it, search engines might index duplicate or similar versions of your page (like www vs. non-www, or with/without trailing slashes), diluting your ranking power across multiple URLs instead of concentrating it on one.

**Why it matters for your business:** Search engines may rank a duplicate or wrong version of your homepage, losing visibility in local searches for cannabis dispensaries in NYC—directly harming foot traffic and online orders.

**Technical root cause:** The homepage HTML is missing the <link rel="canonical" href="https://www.thealchemy.nyc/"> tag in the <head> section, so search engines have no explicit signal about which URL version should be prioritized.

**Recommended fix — step by step**

1. Open your site's homepage HTML source (right-click → View Page Source) and locate the <head> section.
2. Add this line before the closing </head> tag: <link rel="canonical" href="https://www.thealchemy.nyc/"/>
3. If you use a CMS or site builder, check Settings → SEO or Meta Tags for a 'Canonical URL' field and enter https://www.thealchemy.nyc/
4. After deployment, use Google Search Console (search.google.com) → URL Inspection tool and paste https://www.thealchemy.nyc/ to verify the canonical is recognized.
5. Repeat this process for all other key pages (product listings, age-gate page, contact, etc.) using their respective URLs.

### 2. 11 image(s) missing alt text

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** accessibility
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Your homepage has 11 images without alt text — descriptive labels that screen readers use to tell visually impaired visitors what an image shows. Search engines also use alt text to understand and index images. Right now, those 11 images are invisible to both assistive technology users and search algorithms.

**Why it matters for your business:** Missing alt text reduces organic search visibility for image queries, excludes disabled visitors from your site (legal risk under ADA/AODA), and weakens SEO for product and strain photography — critical for a premium cannabis retailer.

**Technical root cause:** Images in your HTML lack the `alt` attribute. This happens when images are added without documentation or when a CMS editor skips the alt field during upload.

**Recommended fix — step by step**

1. Open your homepage in a browser, right-click each image, and inspect the HTML to identify which ones lack alt= attributes (look for <img> tags with no alt or alt="").
2. For product/strain images, write descriptive alt text like 'Sativa flower bud with dense trichomes' or 'Cannabis concentrate in glass jar'; for decorative images, use alt="" (empty string).
3. If using a CMS (WordPress, Shopify, custom backend): open the image/media manager, find each image, fill in the alt text field, and save. For WordPress, install Yoast SEO (free) → Media → it will flag missing alts.
4. If editing raw HTML: add alt="description" inside each <img> tag, e.g., <img src="product.jpg" alt="Premium Indoor Hybrid Flower">.
5. Test with a screen reader (free: NVDA on Windows, or Voice Over on Mac) to confirm alt text reads naturally.
6. Set a process: require alt text on all new image uploads going forward; document in your content guidelines that every product image needs a strain name + primary effect in the alt field.

### 3. Missing canonical

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

Your homepage doesn't include a canonical tag—a line of code that tells search engines which version of a page is the official one. Without it, search engines may not know whether to prioritize www.thealchemy.nyc or thealchemy.nyc, potentially splitting your search visibility between two versions.

**Why it matters for your business:** If search engines index both versions separately, your search ranking power gets divided, making it harder for customers to find you on Google when searching for cannabis dispensaries in NYC.

**Technical root cause:** The <link rel="canonical" href="..."> tag is missing from the <head> section of the homepage HTML. This is a common omission on sites that don't use SEO plugins or have incomplete technical SEO setup.

**Recommended fix — step by step**

1. Log in to your website backend / CMS admin panel and open the homepage for editing.
2. Navigate to the page's HTML <head> section or SEO settings (if your platform has an SEO panel).
3. Add this line before the closing </head> tag: <link rel="canonical" href="https://www.thealchemy.nyc/">
4. Verify the URL matches your preferred version (with or without www) — this should match what you've set in Google Search Console.
5. Save and publish the page.
6. Repeat this step for any other key pages (menu, about, contact) that lack canonical tags.
7. Submit your homepage URL to Google Search Console to re-crawl and reindex it with the new tag.

### 4. 11 image(s) missing alt text

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** accessibility
- **Page URL:** https://www.thealchemy.nyc
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Your site has 11 images without alt text — descriptions that screen readers use to understand images, and that search engines use to index image content. This means visually impaired visitors and search crawlers can't understand what these images show, reducing both accessibility and discoverability.

**Why it matters for your business:** Missing alt text limits SEO potential for product/strain imagery and brand photography, and excludes customers using screen readers or those with images disabled — a compliance risk in New York where ADA lawsuits against cannabis retailers are rising.

**Technical root cause:** Images were inserted into the site without the alt attribute being populated during upload or publishing, likely via a CMS or manual HTML insertion without accessibility review.

**Recommended fix — step by step**

1. Audit which 11 images lack alt text: use a browser DevTools (F12 → Elements → search for <img without alt) or run WAVE accessibility checker (wave.webaim.org) on the homepage and key pages
2. For product/strain images, write alt text that describes the visual + product type, e.g., 'Blue Dream cannabis flower in small glass jar'
3. For decorative images (e.g., background patterns, spacers), use alt='' to mark them as decorative rather than informative
4. If using WordPress, edit each image in Media → click image → fill Alt Text field; if using a page builder, click image block → look for alt/accessibility panel
5. For images in HTML/custom code, add alt='[description]' attribute to each img tag
6. Re-run accessibility checker to confirm all 36 images now have alt text (empty is acceptable only for truly decorative images)
7. Add alt text checklist to your content publishing process: before any image goes live, confirm alt is filled in

### 5. Missing canonical

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/about-us
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

Your About Us page doesn't have a canonical tag — a line of code that tells search engines which version of a page is the 'official' one. Without it, Google may treat similar or duplicate content as separate pages, diluting your search ranking power across multiple URLs.

**Why it matters for your business:** Search engines may index multiple versions of your About Us page (with or without www, http vs https, with or without trailing slash), splitting your ranking authority and reducing visibility for brand searches.

**Technical root cause:** The page template lacks a <link rel="canonical" href="..."> tag in the <head> section. This is typically missing when canonical tags aren't added during site build or CMS configuration.

**Recommended fix — step by step**

1. Open the About Us page source code (right-click → View Page Source) and confirm no <link rel="canonical"> tag exists in the <head>
2. Add <link rel="canonical" href="https://www.thealchemy.nyc/about-us"> to the <head> of the About Us page template
3. Audit all other high-traffic pages (homepage, product pages, contact) for the same missing canonical tags
4. If using a CMS (WordPress, Shopify, etc.), install an SEO plugin (Yoast SEO, Rank Math) and set canonical URLs globally under Settings → Permalinks/SEO
5. Test using Google Search Console (search.google.com) → URL Inspection tool, paste the About Us URL, and verify the canonical is detected

### 6. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/about-us
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your website doesn't include JSON-LD structured data — machine-readable code that tells search engines what your business is, where it's located, and what you sell. Without it, Google has to guess at your business details instead of reading them directly from your site.

**Why it matters for your business:** Missing schema reduces your chances of appearing in Google's local pack, product listings, and rich snippets — all critical for driving foot traffic and online orders to a cannabis retailer.

**Technical root cause:** The site lacks JSON-LD markup blocks (usually added in the page <head> or footer) that declare structured data in a format search engines prefer. This is often overlooked on custom or older WordPress builds.

**Recommended fix — step by step**

1. Audit your current CMS: check if you're using WordPress (install Yoast SEO Free or RankMath Free, which auto-generate schema) or a custom platform.
2. If WordPress: activate Yoast SEO → Search Appearance → Schema → enable Organization, LocalBusiness, and Product schemas; verify Organization name/logo/contact are filled in Settings.
3. If custom HTML: add a LocalBusiness schema block to your homepage footer with: name, address, phone, hours, license number (cannabis-specific), and image. Use schema.org/CannabisDispensary as @type.
4. Add Product schema to any product/menu pages listing strains or merchandise: include name, description, price, availability, and cannabinoid info where applicable.
5. Test your schema: paste your homepage URL into Google's Rich Results Test (search.google.com/test/rich-results) and confirm Organization and LocalBusiness blocks appear with no errors.
6. Monitor: re-test monthly or after major content updates to catch dropped or malformed schema.

### 7. Missing canonical

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/contact-us
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

Your contact page doesn't tell search engines which version of the URL is the official one. If the same page is accessible via multiple URLs (like with or without a trailing slash, or through different navigation paths), search engines may treat them as separate pages and split your ranking power between them.

**Why it matters for your business:** Search engines may index duplicate versions of your contact page, diluting your visibility for local cannabis searches and making it harder for customers to find your location and hours.

**Technical root cause:** The page is missing a canonical tag (<link rel="canonical">) in the HTML head, which explicitly tells search engines the primary URL for this content.

**Recommended fix — step by step**

1. Open the contact page HTML in your editor or CMS page settings for https://www.thealchemy.nyc/contact-us
2. In the <head> section, add: <link rel="canonical" href="https://www.thealchemy.nyc/contact-us" />
3. Verify the canonical points to the exact URL you want to rank (matching protocol, www/non-www, and trailing slash)
4. Apply the same canonical pattern to all other pages (home, product pages, menu, etc.) pointing each to their own URL
5. Use a tool like Screaming Frog SEO Spider or Ahrefs to crawl your site and confirm canonicals are present on all pages
6. Submit your sitemap to Google Search Console to reinforce which URLs are primary

### 8. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/privacy-policy
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your privacy policy page (and likely many others) lacks JSON-LD structured data — code that tells search engines what type of content is on the page. Without it, Google can't confidently categorize your pages, which can reduce your visibility in search results and prevent rich snippets (like star ratings or product details) from appearing.

**Why it matters for your business:** Missing schema markup limits your ability to appear in premium search results and knowledge panels, directly reducing organic traffic to product pages, menus, and your dispensary location information.

**Technical root cause:** The site has no structured data implementation. JSON-LD blocks (which live in the page's <head> or <body>) must be explicitly added; they don't generate automatically.

**Recommended fix — step by step**

1. Audit your site's core page types: homepage, product/menu pages, location/contact, privacy/terms. Prioritize product and location pages first (highest SEO impact).
2. For product pages, add LocalBusiness + Product schema (LocalBusiness for the dispensary entity; Product for individual SKUs). For location, add LocalBusiness with address, phone, license number if publicly disclosable.
3. Use Google's Structured Data Markup Helper (https://www.google.com/webmasters/markup-helper/) or Schema.org reference to draft JSON-LD blocks for each template.
4. Insert JSON-LD into your site's <head> section. If using a CMS (WordPress, Shopify, etc.), use a plugin like Yoast SEO (WordPress) or built-in app (Shopify) to generate and inject schema. If custom HTML, add <script type="application/ld+json"> blocks.
5. Validate using Google's Rich Results Test (https://search.google.com/test/rich-results). Fix any errors (mismatched properties, invalid URLs).
6. Submit updated sitemap to Google Search Console and request indexing of updated pages.
7. Monitor Search Console's Rich Results report monthly to ensure schema is rendering and no new errors appear.

### 9. Missing canonical

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/shop
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

Your shop page doesn't tell search engines which version of the URL is the 'official' one. Without a canonical tag, Google may index duplicate versions (like /shop vs /shop/ or www vs non-www), splitting your search ranking power across multiple URLs instead of concentrating it on one.

**Why it matters for your business:** Search visibility for your product catalog is diluted, reducing organic traffic to your dispensary's online shop and potential customer inquiries.

**Technical root cause:** The <link rel="canonical" href="..."> HTML tag is missing from the page head. This tag explicitly tells search engines which URL should be treated as the primary version.

**Recommended fix — step by step**

1. Inspect the shop page source (right-click → View Page Source on https://www.thealchemy.nyc/shop) and search for 'canonical' to confirm it's absent.
2. If using WordPress, install the Yoast SEO plugin → Tools → General → search for 'canonical' settings and enable automatic canonical URLs.
3. If platform is custom/unknown, add <link rel="canonical" href="https://www.thealchemy.nyc/shop"> in the <head> section of the shop page template.
4. Verify the canonical points to your preferred URL format (e.g., always HTTPS, always with or without trailing slash); consistency across all pages is critical.
5. Submit your sitemap to Google Search Console to reinforce canonicalization: Search Console → Sitemaps → paste your sitemap URL.

### 10. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/shop
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your shop page doesn't include JSON-LD structured data — a standardized code format that tells search engines exactly what your content is (e.g., product names, prices, ratings). Without it, Google has to guess, and cannabis retailers especially need clear, explicit markup to appear correctly in search results and comply with cannabis-specific search policies.

**Why it matters for your business:** Missing schema reduces your visibility in Google Shopping, local search, and product-rich snippets; for a premium dispensary competing on brand and product discovery, this directly impacts organic traffic and customer trust signals.

**Technical root cause:** The shop page HTML does not include <script type="application/ld+json"> blocks. This is typically missing because the site was built without a structured data strategy or the CMS/template does not auto-generate it.

**Recommended fix — step by step**

1. Audit your current platform: check the page source (Ctrl+F "ld+json") to confirm no schema exists elsewhere.
2. Add schema.org/Product markup to each product listing with: name, description, image, price, availability, and cannabis-specific fields (THC%, CBD%, strain type).
3. Add schema.org/LocalBusiness markup to your footer or contact section with: name (The Alchemy), address, phone, license number, hours, and local:opens/closes.
4. Use Google's Structured Data Testing Tool (schema.org/docs/sdtt) to validate your JSON-LD before deploying.
5. If on WordPress: install Yoast SEO or Schema Pro plugin, configure LocalBusiness + Product schema in Settings → Schema → Organization/Product.
6. If on custom/unknown CMS: provide JSON-LD template to your developer with example: {"@context":"https://schema.org","@type":"Product","name":"...","price":"...","availability":"https://schema.org/InStock"}.
7. Re-submit shop URL to Google Search Console → URL Inspection → Request Indexing to refresh crawl.

### 11. Missing meta description

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/blog
- **Rule:** `tier2.meta.no-description`

**What it means (plain English)**

The /blog page is missing a meta description—the 155-character summary that appears under your page title in Google search results. Without it, Google generates a guess from your page content, which often looks unprofessional and doesn't encourage clicks. This is a quick fix that directly impacts search traffic.

**Why it matters for your business:** Users searching for cannabis education or strains may skip your blog in favor of competitors' results that have compelling, custom descriptions. Every missing description reduces click-through rate from search results.

**Technical root cause:** The HTML <head> section lacks a <meta name="description" content="..."> tag on this page. Either it was never added, or the page template doesn't include a fallback description.

**Recommended fix — step by step**

1. Log into your site admin / CMS and navigate to the /blog page settings
2. Locate the 'Meta Description' or 'SEO' field (if WordPress: use Yoast SEO or All in One SEO plugin)
3. Write a 155–160 character description highlighting your blog's value: e.g., 'Explore cannabis education, strain guides, and industry news from The Alchemy's expert team.'
4. Save and publish the change
5. Use Google Search Console (google.com/webmasters) → Coverage report to verify the description is now indexed

### 12. 7 image(s) missing alt text

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://www.thealchemy.nyc/blog
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Your blog page has 7 images without alternative text descriptions. Alt text is the hidden label that describes what an image shows — search engines read it to understand your content, and screen readers (used by people with vision impairments) read it aloud so they know what the image contains.

**Why it matters for your business:** Missing alt text hurts your blog's search ranking for image-based queries, reduces accessibility for customers with disabilities, and may expose you to ADA compliance risk if a customer files an accessibility complaint.

**Technical root cause:** Images were added to the blog without filling in the alt text field during upload or editing, which is a required step for accessibility.

**Recommended fix — step by step**

1. Log into your blog CMS and navigate to the blog post at /blog
2. Open the post editor and locate each image in the visual/block editor
3. Click each image to select it and find the 'Alt Text' or 'Image Details' field in the right sidebar or properties panel
4. Write a clear, concise description (5–15 words) for each image: e.g., 'Premium cannabis flower jar on marble counter' or 'Customer browsing dispensary menu board'
5. Ensure descriptions are specific to the image content and relevant to the blog topic — avoid keyword stuffing
6. Save and publish the post
7. Test using a browser extension like WAVE (webaim.org/articles/wave/) to confirm alt text is now detected

### 13. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/qr
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your website is missing JSON-LD structured data—machine-readable code that tells Google what your pages are about. Without it, search engines can't understand your products, business hours, location, or reviews as easily, which can hurt how your site appears in search results and local maps.

**Why it matters for your business:** Missing schema data reduces visibility in Google Local Pack results and product listings, directly limiting foot traffic from customers searching for 'cannabis dispensary near me' or specific products.

**Technical root cause:** No structured data markup (JSON-LD blocks) has been added to the page HTML. This is typically a development task where code is inserted into the <head> or body of each template.

**Recommended fix — step by step**

1. Audit which pages need schema: homepage (Organization), product pages (Product), location pages (LocalBusiness), and blog/education (Article).
2. Use Google's Structured Data Markup Helper (schema.org/docs) to generate JSON-LD for your dispensary (LocalBusiness, hours, phone, address, license/compliance info).
3. Add Organization schema to your homepage <head> with business name, logo, contact info, and social profiles.
4. Add LocalBusiness schema to any location/hours page with hours of operation, address, phone, and geo coordinates.
5. If using WordPress, install Yoast SEO or Rank Math → Business Profile settings and enable JSON-LD output.
6. If custom HTML/PHP, manually insert JSON-LD blocks before </head> closing tag on relevant page templates.
7. Test each page at Google's Rich Results Test (search.google.com/test/rich-results) to confirm valid markup.
8. Monitor Google Search Console → Enhancements tab for schema errors or warnings.

### 14. Missing canonical

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/current-specials
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

Your /current-specials page doesn't include a canonical tag — a line of code that tells search engines which version of a page is the 'official' one. Without it, search engines may get confused if the same content appears under multiple URLs (e.g., with or without www, or with tracking parameters), which dilutes ranking power.

**Why it matters for your business:** Duplicate or parameter-heavy URLs can split your search visibility across versions, reducing organic traffic to your promotions page — a key revenue driver for a dispensary.

**Technical root cause:** The page template or CMS configuration does not automatically inject a self-referential canonical tag in the <head> section. This is common on dynamic pages where CMS plugins or theme settings need explicit enablement.

**Recommended fix — step by step**

1. Log in to your website admin/CMS dashboard and navigate to the /current-specials page editor.
2. In the page head settings or SEO plugin panel (e.g., Yoast, Rank Math, or native platform fields), locate the 'Canonical URL' field.
3. Enter the full URL: https://www.thealchemy.nyc/current-specials
4. Save and publish the page.
5. If no SEO plugin is visible: open your page source (Ctrl+U or Cmd+U in browser), search for '<link rel="canonical"' — if absent, contact your hosting provider or developer to enable canonical tag output in your site template.
6. Test using Google Search Console (search.google.com) → Inspect URL → confirm the canonical is detected.

### 15. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/current-specials
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your website doesn't have structured data—machine-readable code that tells search engines what your pages are about. For a dispensary, this means Google can't automatically understand your product listings, pricing, hours, or license information, so it can't display rich results (like star ratings or special offers) in search results.

**Why it matters for your business:** Without schema markup, you're invisible to Google's product comparison tools and local search features, losing customers actively searching for 'cannabis deals near me' or 'dispensary hours NYC.'

**Technical root cause:** No JSON-LD blocks (structured data in <script> tags) have been added to your pages. This is common on sites built without SEO plugins or custom development.

**Recommended fix — step by step**

1. Audit your current CMS/platform: view source (Ctrl+U) on /current-specials and check if you see any <script type="application/ld+json"> blocks; if none exist, you need to add them
2. Add LocalBusiness + AggregateOffer schema to homepage: include your license number, hours, address, phone, and special offer details
3. Add Product schema to each special/menu item page: include name, description, price, availability, and image
4. Use Google's Structured Data Testing Tool (search.google.com/test/rich-results) to validate each schema block before publishing
5. Install a schema plugin if using WordPress (Yoast SEO or Rank Math) to auto-generate LocalBusiness + Product schemas, then configure with your license and hours
6. If custom-built: add JSON-LD blocks to your page templates, ensuring license number and compliance disclaimers are included in structured data

### 16. Missing canonical

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/promotions
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

Your /promotions page doesn't tell search engines which version is the 'official' one. Without a canonical tag, Google may get confused if the same content appears under multiple URLs (like with/without query parameters, http vs https, or www variants), which can split your search ranking power across duplicates.

**Why it matters for your business:** Search engines may not rank your promotions page prominently, reducing organic traffic to one of your highest-conversion pages for driving repeat customers and sales.

**Technical root cause:** The <link rel="canonical" href="..."> tag is missing from the page's HTML <head>. Most sites auto-generate these via SEO plugins or server headers, but your site either lacks both or they're not firing on this particular page.

**Recommended fix — step by step**

1. Open the /promotions page source code and locate the <head> section. If you use WordPress, install Yoast SEO or Rank Math (free version) → Settings → Site Connections → verify Google Search Console is linked → then visit the /promotions page in the editor and confirm the 'SEO' sidebar shows a canonical URL suggestion (usually auto-filled).
2. If not WordPress or if the plugin shows no canonical: manually add <link rel="canonical" href="https://www.thealchemy.nyc/promotions"> in the <head> before </head>.
3. Test the fix by visiting https://www.thealchemy.nyc/promotions, right-clicking → 'Inspect' → searching the HTML for 'canonical'. Confirm the tag matches the current full URL.
4. Submit the page to Google Search Console (if you have access) → URL Inspection → request indexing to signal the canonical is live.

### 17. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/promotions
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your promotions page doesn't include structured data — a block of code that tells search engines what your page is about in a machine-readable format. Without it, Google can't easily understand that you're promoting cannabis products, which hurts your ability to appear in relevant search results and rich snippets (special result cards).

**Why it matters for your business:** Missing schema reduces your visibility in local search results and promotional carousels, directly limiting foot traffic from customers searching for deals at cannabis dispensaries near them.

**Technical root cause:** The page HTML lacks JSON-LD markup (typically placed in <head> or before </body>) that would define the schema.org type for offers, local business, or product promotions.

**Recommended fix — step by step**

1. Install Google's Structured Data Testing Tool (search.google.com/test/rich-results) and test your /promotions URL to confirm schema is missing
2. Add a JSON-LD block before the closing </body> tag that includes schema.org/BreadcrumbList (for navigation) and schema.org/LocalBusiness (for your dispensary info: name, address, phone, license info if public)
3. For each promotion, wrap it in schema.org/Offer markup with 'url', 'priceCurrency', 'price', 'validFrom', and 'validThrough' fields
4. Re-test in the Structured Data Testing Tool and wait 1-2 weeks, then check Google Search Console (Performance tab) to see if promotion impressions increase
5. If your site runs on WordPress, install the Yoast SEO or All in One SEO plugin, navigate to the schema settings, and enable LocalBusiness + Offer schema templates to auto-generate markup

### 18. Missing canonical

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/flatiron/the-alchemy-flatiron
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

Your product page doesn't declare a preferred version of itself to search engines. Without a canonical tag (a single HTML line that says 'this is the official version'), Google may index duplicate or similar versions of the same page—such as with/without trailing slashes, or sorted differently—which dilutes your search ranking power across multiple URLs instead of concentrating it on one.

**Why it matters for your business:** Search engines may rank a wrong version of your Flatiron location page, or split ranking signals between variants, reducing visibility for local customers searching for your dispensary and potentially hiding you below competitors.

**Technical root cause:** The page template or CMS is not outputting a canonical link element in the <head> section. This is especially common in multi-location or e-commerce sites where similar pages exist across different URLs.

**Recommended fix — step by step**

1. Open the source code of https://www.thealchemy.nyc/flatiron/the-alchemy-flatiron in your browser (Ctrl+U or Cmd+U), search for '<link rel="canonical"' to confirm it's missing.
2. If you use WordPress, install Yoast SEO or Rank Math plugin and activate 'Enable canonical URLs' in settings (Yoast: Admin > SEO > Settings > Advanced > Canonical URLs).
3. If your site is custom-built or uses a different CMS, add this line to the <head> of each page template: '<link rel="canonical" href="https://www.thealchemy.nyc/flatiron/the-alchemy-flatiron">'; replace the URL with the actual page URL.
4. For multi-location pages, ensure every location page has its own unique canonical pointing to itself (not to a parent or index page).
5. After deploying, test using Google Search Console (search.google.com) > your property > URL Inspection tool > enter the URL and verify the canonical is detected correctly.
6. Submit an updated sitemap to Google Search Console to accelerate re-indexing.

### 19. 8 image(s) missing alt text

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://www.thealchemy.nyc/flatiron/the-alchemy-flatiron
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Your website has 8 images without alt text (descriptive text read aloud by screen readers and used by search engines to understand images). These images appear on your Flatiron location page. Without alt text, customers using screen readers cannot understand what those images show, and search engines cannot index them for image search results.

**Why it matters for your business:** Missing alt text reduces your visibility in Google Images search (potential new customer discovery), blocks access for customers with visual impairments, and signals poor site quality to search engines—all of which can reduce organic traffic and exclude paying customers.

**Technical root cause:** The images likely lack the HTML 'alt' attribute entirely, or the alt attribute is empty. This commonly happens when images are added via a page builder or CMS without filling in the alt field, or when images are background CSS instead of <img> tags.

**Recommended fix — step by step**

1. Open your website editor and navigate to https://www.thealchemy.nyc/flatiron/the-alchemy-flatiron
2. Inspect each of the 8 images on that page and identify what each one shows (product photos, location interior, staff, etc.)
3. For each image, add descriptive alt text: right-click → Edit Image (or similar) → fill in the 'Alt Text' or 'Alt Description' field with 5–10 words describing the image and its relevance (e.g., 'Alchemy Flatiron dispensary interior with product display shelves')
4. For product images, include the product name or category in alt text (e.g., 'Alchemy Premium Flower—Blue Dream strain')
5. For location/ambiance photos, describe the space and what makes it relevant (e.g., 'Modern cannabis retail counter at Alchemy Flatiron location')
6. Save and publish the page
7. Use a free tool like WAVE (wave.webaim.org) or axe DevTools browser extension to verify all images now have alt text

### 20. Missing canonical

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/flatiron/about-us-flatiron
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

This page is missing a canonical tag — a line of code that tells search engines which version of a page is the 'official' one. Without it, search engines may not know if this page should rank, or may split credit between duplicate or similar URLs, weakening your search visibility.

**Why it matters for your business:** Customers searching for 'Alchemy dispensary about us' or similar terms may not find this page ranking as well as it could, or search engines may deprioritize it in favor of other versions, costing you foot traffic and online credibility.

**Technical root cause:** The page template or CMS does not automatically inject a canonical link element in the <head> section. This is especially common in multi-location or dynamic sites where pages can be accessed via different URL paths.

**Recommended fix — step by step**

1. Open the page source (Ctrl+U or Cmd+U in browser) and search for '<link rel="canonical"' — confirm it is absent.
2. If using WordPress: install Yoast SEO or Rank Math, go to Settings → SEO → Search Appearance, enable Canonical URLs, and regenerate URLs for all pages.
3. If using a custom CMS or static HTML: add '<link rel="canonical" href="https://www.thealchemy.nyc/flatiron/about-us-flatiron" />' in the <head> section of the page template.
4. For all other pages on the site: audit which ones lack canonicals using a crawl tool (Screaming Frog, Ahrefs, or SEMrush), prioritizing high-traffic pages.
5. Test the fix by re-crawling the page and verifying the canonical tag appears in the source.

### 21. Missing canonical

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/flatiron/current-specials-flatiron
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

This page doesn't have a canonical tag — a line of code that tells search engines which version of a page is the 'main' one. Without it, Google may get confused if the same content appears at multiple URLs (for example, with or without query parameters, or listed under different menu paths), which can dilute your search ranking and confuse crawlers.

**Why it matters for your business:** Search engines may index duplicate or near-duplicate versions of your specials page, splitting traffic and ranking power between them, which hurts discoverability of your current promotions — a key driver of foot traffic to your Flatiron location.

**Technical root cause:** The page template is missing the <link rel="canonical" href="..."> HTML tag in the page head. This is typically omitted either because the site was built without SEO configuration or the page was generated dynamically without canonical logic.

**Recommended fix — step by step**

1. Open the page source (Ctrl+U or Cmd+U on https://www.thealchemy.nyc/flatiron/current-specials-flatiron) and check if a <link rel="canonical"> tag exists in the <head> section; if not, proceed to next step.
2. If the site is WordPress, install the Yoast SEO plugin (if not already active), go to Yoast SEO → Settings → Site connections, and enable canonical tags (usually auto-enabled).
3. If the site is custom-built HTML/PHP, add this line to the <head> of the page template: <link rel="canonical" href="https://www.thealchemy.nyc/flatiron/current-specials-flatiron" />
4. If using a static site generator (Hugo, Jekyll, Next.js), ensure your build template includes {{ page.canonical_url }} or equivalent in the head.
5. Run a site crawl using Screaming Frog (free tier) or SEMrush to find all pages missing canonical tags, then batch-apply the fix across the template.
6. Submit the updated pages to Google Search Console (search.google.com) → URL Inspection → Request Indexing to refresh the index with canonical signals.

### 22. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/flatiron/current-specials-flatiron
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your product pages don't include JSON-LD structured data—invisible code that tells Google what your products are, their prices, and availability. Without it, search engines guess at your content instead of understanding it precisely. This hurts your visibility in search results, especially for local cannabis retail where detailed product information matters.

**Why it matters for your business:** Missing schema data reduces your chances of appearing in Google's rich snippets (stars, pricing, in-stock badges), which drive clicks from search results and improve trust signals for premium cannabis retail.

**Technical root cause:** The page HTML lacks <script type="application/ld+json"> blocks that define product, local business, or offer schemas. This is typically a templating or CMS configuration gap, not a missing plugin.

**Recommended fix — step by step**

1. Audit your current CMS/platform: log in to admin and identify which system powers this site (WordPress, Shopify, custom build, etc.)—check the footer or source code comments.
2. If WordPress: install Rank Math Free or Yoast SEO Premium, navigate to Integrations → Schema, and enable Product + LocalBusiness schemas for your current-specials pages.
3. If Shopify: go to Theme settings → Metafields, and ensure product templates include Shopify's default schema output (usually auto-enabled but verify).
4. If custom/unknown CMS: add a <script type="application/ld+json"> block to each product page with Product schema (name, price, availability, description) and LocalBusiness schema (your dispensary name, address, phone)—use schema.org/Product and schema.org/LocalBusiness as templates.
5. Test your schema output using Google's Rich Results Test (search.google.com/test/rich-results) for the affected URL and 2-3 others.
6. Once validated, monitor Search Console (Google Search Console → Enhancements) for any schema warnings quarterly.

### 23. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/flatiron/promotions-flatiron
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your promotions page doesn't include JSON-LD structured data — a machine-readable format that tells Google what content is on the page (e.g., 'this is a promotion with a discount code and expiration date'). Without it, search engines have to guess the meaning of your content, which reduces the chance they'll display rich information in search results.

**Why it matters for your business:** Missing schema markup means Google won't show promotional details, pricing, or product info in search results with badges or special formatting — lowering click-through rates from search and reducing visibility against competitors who do use schema.

**Technical root cause:** The page HTML lacks <script type="application/ld+json">...</script> blocks that define the page's structured data. This is likely an omission during site build or template setup, not a platform limitation.

**Recommended fix — step by step**

1. Audit your site structure: identify all promotion, product, and location pages that should carry schema (use Google's Structured Data Testing Tool at https://search.google.com/structured-data/testing-tool to see current coverage).
2. For this promotions page, add an Offer schema: go to schema.org/Offer, note required fields (name, price, priceCurrency, availability, url), and identify which data you already display on-page.
3. Insert JSON-LD block in the page <head> or before closing </body>, structured as {"@context": "https://schema.org", "@type": "Offer", "name": "[promotion name]", "price": "[amount]", "priceCurrency": "USD", "url": "[page URL]", "availability": "https://schema.org/InStock"}.
4. Add Organization schema at site-wide level (footer or global template) with your business name, phone, address, license number if public — cannabis retailers benefit from license/legitimacy signals.
5. Test the updated page at https://search.google.com/structured-data/testing-tool to confirm JSON-LD is valid and recognized.
6. Submit the page to Google Search Console (Console > URL inspection > Request indexing) to signal schema changes.
7. Repeat for all promotion, product, and location pages over the next sprint.

### 24. Missing canonical

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/flatiron/shop-flatiron
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

Your product page at /flatiron/shop-flatiron doesn't include a canonical tag—an HTML instruction that tells search engines which version of a page is the 'official' one. Without it, Google may treat duplicate or similar pages as separate, diluting your search ranking power across multiple URLs instead of concentrating it on one.

**Why it matters for your business:** Search engines may index multiple versions of your product pages (with/without trailing slashes, with/without parameters), splitting visibility across them and reducing your chances of ranking for cannabis product searches in NYC.

**Technical root cause:** The page template is missing a <link rel="canonical" href="..."> tag in the <head> section. This is typically handled by the site CMS or manually added to each page.

**Recommended fix — step by step**

1. Open https://www.thealchemy.nyc/flatiron/shop-flatiron in a browser, right-click → View Page Source, and search for '<link rel="canonical"' to confirm it's absent.
2. Identify your CMS or site builder (check the page footer, source code comments, or ask your hosting provider). Common platforms: WordPress, Shopify, Webflow, custom Node/PHP.
3. If WordPress: install Yoast SEO → SEO → General → enable canonical tags. Go to each product and verify 'Canonical URL' is set (usually auto-fills to the page URL).
4. If Shopify: canonical tags are auto-generated; verify in theme code or contact Shopify support to ensure they're not being overridden.
5. If custom code: add <link rel="canonical" href="https://www.thealchemy.nyc/flatiron/shop-flatiron"> to the <head> of your page template, or configure your server to inject it dynamically.
6. Add the same canonical to all product pages (/shop-*, category pages, etc.).
7. Re-submit your sitemap to Google Search Console → Sitemaps to re-crawl and index the canonical versions.

### 25. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/flatiron/shop-flatiron
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your product pages (like the Flatiron shop) don't include structured data—machine-readable code that tells Google, Apple Maps, and other services what your page is about. Without it, search engines have to guess whether you're selling cannabis, showing directions, or something else entirely. This makes it harder for your business to appear in rich results (like product cards or local pack listings).

**Why it matters for your business:** Missing schema reduces your chances of appearing in Google's local pack, product carousels, and knowledge panels—all high-traffic entry points for customers searching for dispensaries near them.

**Technical root cause:** The page's HTML lacks JSON-LD blocks (structured data in <script type="application/ld+json"> tags) that define key information like LocalBusiness, Place, or Product schemas.

**Recommended fix — step by step**

1. Audit your most trafficked pages (Flatiron, any other locations or product pages) using Google's Rich Results Test (search.google.com/test/rich-results) to confirm what schema is missing.
2. Add LocalBusiness schema to each location page (Flatiron) including name, address, phone, hours, and license number—use Schema.org's LocalBusiness template.
3. Add Place or LocalBusiness schema with geo coordinates (latitude/longitude) so Google can display your dispensary correctly in Maps and local pack results.
4. If you sell named cannabis products, add Product schema with name, description, and availability (in-stock/out-of-stock).
5. Use Google Search Console (console.google.com) → Enhancements → Rich Results to monitor schema errors after deployment.
6. Test with Google's Rich Results Test again to confirm rich snippets are now eligible.

### 26. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/flatiron/contact-us-flatiron
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your website doesn't include JSON-LD structured data — machine-readable code that tells Google what your pages are about. For a cannabis retailer, this means search engines can't automatically understand your location, hours, license status, or product details, making it harder for customers to find you in local search results.

**Why it matters for your business:** Without schema markup, you're losing local search visibility and competitive advantage against dispensaries that have properly tagged business information, hours, and compliance details.

**Technical root cause:** The page HTML lacks <script type="application/ld+json"> blocks in the head or body. This is commonly missing on sites built without SEO-focused CMS plugins or custom development for structured data.

**Recommended fix — step by step**

1. Install the Yoast SEO or Rank Math plugin (if WordPress) or equivalent schema generator for your platform
2. Add LocalBusiness schema to your homepage and location pages (Flatiron contact page): navigate to plugin settings → Schema → LocalBusiness, fill in business name, address, phone, license number if publicly shareable
3. Add Organization schema to your homepage with legal business name, logo, contact info, and social profiles
4. Add OpeningHoursSpecification to location pages (each day + hours)
5. For product/menu pages, add Product schema with name, description, and pricing
6. Test all schema at schema.org/validator or Google's Rich Results Test (search.google.com/test/rich-results) — you should see LocalBusiness, Organization, and Product snippets
7. Submit updated XML sitemap to Google Search Console (search.google.com/search-console) to trigger re-crawl

### 27. Missing canonical

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/flatiron/terms-conditions-flatiron
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

This page lacks a canonical tag—an HTML instruction that tells search engines which version of a page is the 'official' one. Without it, search engines may not know whether to rank this URL or a similar one, which dilutes ranking power and can confuse indexing.

**Why it matters for your business:** Search engines may index duplicate or near-duplicate pages instead of your preferred URL, splitting ranking signals and reducing your visibility for high-intent cannabis retail searches.

**Technical root cause:** The page template or CMS does not automatically inject a <link rel="canonical" href="..."> tag in the <head> section. This is common when pages are generated dynamically without canonical logic, or when a CMS has not been configured to output it.

**Recommended fix — step by step**

1. Check the page source (right-click → View Page Source, search for 'canonical') to confirm it is truly absent
2. If this is a WordPress site, install Yoast SEO or Rank Math; go to Settings → [plugin name] → General → enable canonical tags
3. If this is a custom site, add <link rel="canonical" href="https://www.thealchemy.nyc/flatiron/terms-conditions-flatiron"> in the <head> of the template
4. Audit other location pages (e.g., /williamsburg/terms-conditions) to check if the issue is site-wide; if so, implement a global canonical rule
5. Test using Google Search Console → URL Inspection tool; paste the URL and verify the canonical is now present

### 28. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/flatiron/privacy-policy-flatiron
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your website is missing JSON-LD structured data — machine-readable code that tells search engines what your pages are about. For a cannabis retailer, this means Google can't easily understand your store locations, products, hours, or license status, which hurts both search visibility and the ability to appear in local business results.

**Why it matters for your business:** Without schema markup, you're invisible to Google Local Pack results, you lose competitive ground to dispensaries that DO use structured data, and you miss opportunities to show key compliance info (licenses, age restrictions) directly in search results.

**Technical root cause:** The page (and likely your site) lacks JSON-LD blocks in the <head> or <body>. These are small code snippets that wrap business data in a format search engines understand natively.

**Recommended fix — step by step**

1. Audit your site structure: identify key page types (store location pages, product pages, homepage, privacy policy) and note which ones exist.
2. Add Organization schema to your homepage <head>: include name, address(es), phone, license number(s), age gate info. Use schema.org/LocalBusiness or Organization.
3. Add LocalBusiness schema to each store location page (Flatiron, etc.): include address, hours, phone, geo coordinates, license.
4. Add Product schema to any product/menu pages: include name, description, pricing, availability.
5. For the privacy policy page specifically, add Organization + WebPage schema so Google understands it's a legal page, not a storefront.
6. Test all schemas in Google's Rich Results Test (search.google.com/test/rich-results): paste your page URL and verify no errors.
7. Install the Yoast SEO or Rank Math plugin (if WordPress) OR edit your theme template files directly to auto-inject schema on page generation.
8. Monitor Search Console (google.com/search-console) → Enhancements → Rich Results for 2–4 weeks to confirm schema is indexed.

### 29. Missing canonical

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/post/cannabis-for-seniors-in-nyc-a-guide-to-wellness-sleep-and-pain-relief
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

This page doesn't tell search engines which version of the content is the official one. If the same article appears on multiple URLs (e.g., with tracking parameters, different category paths, or internal linking variations), Google may index duplicates or split ranking credit between them, weakening your search visibility.

**Why it matters for your business:** Without canonical tags, your wellness content—which attracts high-intent patients searching for cannabis education—gets diluted across duplicate URLs, costing you organic traffic and ranking potential.

**Technical root cause:** The page is missing the <link rel='canonical'> HTML tag in its <head> section, leaving search engines without explicit guidance on which URL is authoritative.

**Recommended fix — step by step**

1. Inspect the page source (right-click → View Page Source on https://www.thealchemy.nyc/post/cannabis-for-seniors-in-nyc-a-guide-to-wellness-sleep-and-pain-relief) and confirm <head> lacks <link rel='canonical'>
2. If using WordPress: install Yoast SEO or Rank Math (free tier), activate it, go to Settings → XML Sitemaps → toggle ON, then edit this post and verify the canonical URL field auto-populates to the post permalink
3. If not WordPress: add <link rel='canonical' href='https://www.thealchemy.nyc/post/cannabis-for-seniors-in-nyc-a-guide-to-wellness-sleep-and-pain-relief'> directly in the <head> of this page's HTML template
4. Audit all blog/post pages for the same issue: search in Google Search Console for 'Duplicate without user-selected canonical' under Coverage → Excluded
5. Set a site-wide rule: if using WordPress, canonical is automatic; if custom HTML, document the template to always include <link rel='canonical'> in every page

### 30. 6 image(s) missing alt text

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://www.thealchemy.nyc/post/cannabis-for-seniors-in-nyc-a-guide-to-wellness-sleep-and-pain-relief
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Your blog post about cannabis for seniors has 6 images without alt text — descriptive text that describes what each image shows. Search engines and assistive technology (screen readers used by blind/low-vision visitors) can't understand these images without that text. This hurts both SEO rankings and accessibility for a segment of your audience.

**Why it matters for your business:** Missing alt text reduces your page's search ranking potential for image-related queries, and excludes customers who use screen readers from understanding your wellness content — a missed opportunity in the senior market you're targeting.

**Technical root cause:** Images were uploaded or embedded without alt attribute fields filled in during content creation. The CMS or editor likely allowed saving without enforcing this required field.

**Recommended fix — step by step**

1. Open the blog post editor and locate each of the 6 images without alt text
2. For each image, click/edit the image properties and find the 'Alt Text' or 'Alternative Text' field
3. Write 5–10 word descriptions of each image (e.g., 'Senior woman holding a cannabis tincture bottle' or 'Cannabis flower bud close-up')
4. Ensure descriptions relate to the blog topic (seniors, wellness, sleep, pain relief) to support SEO
5. Save and republish the post
6. Run the page through a free accessibility checker like WAVE (wave.webaim.org) to confirm all images now have alt text

### 31. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/post/cannabis-for-stress-anxiety-sleep
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your blog post page doesn't include JSON-LD structured data — machine-readable code that tells Google what the page is about (e.g., 'this is an article about cannabis for stress'). Without it, search engines have to guess your content's meaning, and you miss opportunities to appear in rich results like featured snippets or knowledge panels.

**Why it matters for your business:** Missing schema reduces your chances of ranking in Google's featured snippets and knowledge panels for cannabis education queries, which directly impacts organic traffic to your high-value educational content.

**Technical root cause:** The page's HTML contains no `<script type="application/ld+json">` blocks. Most CMSs (WordPress, Webflow, etc.) either don't add schema by default or require a plugin/extension to generate it automatically.

**Recommended fix — step by step**

1. Determine your platform: inspect the page source (Ctrl+U on Windows, Cmd+U on Mac), then look for WordPress, Webflow, or custom CMS indicators in the HTML comments or meta tags.
2. If WordPress: install Yoast SEO Free or RankMath Free, activate it, go to SEO → Settings → Search Appearance → Content Types, enable 'Posts' and set type to 'Article', then re-publish the post to generate schema.
3. If Webflow: open the page in editor mode → click the page element → go to SEO panel → scroll to 'JSON-LD' and add Article schema with title, author, datePublished, and description fields.
4. If custom/unknown platform: request your developer add this JSON-LD block to the page's `<head>`: `{"@context":"https://schema.org","@type":"Article","headline":"[page title]","datePublished":"[publish date]","author":{"@type":"Organization","name":"The Alchemy"},"description":"[meta description]"}`
5. Test the fix: paste the page URL into Google's Rich Results Test (https://search.google.com/test/rich-results) and confirm 'Article' schema is detected with no errors.
6. Apply the same fix to all blog posts and educational content pages (scan your sitemap.xml to identify them).

### 32. 6 image(s) missing alt text

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://www.thealchemy.nyc/post/cannabis-for-stress-anxiety-sleep
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Six images on your blog post page lack alt text — descriptive labels that screen readers read aloud to visually impaired visitors, and that search engines use to understand image content. This blocks both accessibility (visitors using screen readers get no context) and SEO (Google cannot index the images, missing ranking opportunities for visual searches).

**Why it matters for your business:** Cannabis consumers researching stress and anxiety relief via image search won't find your content; visitors using assistive technology may bounce, and you're at legal risk if your site fails accessibility standards under ADA compliance.

**Technical root cause:** Images were inserted into the blog post without alt attributes — either via content management system image upload without filling the alt field, or directly in HTML img tags without alt='' properties.

**Recommended fix — step by step**

1. Navigate to https://www.thealchemy.nyc/post/cannabis-for-stress-anxiety-sleep in your CMS editor (likely WordPress or similar blogging platform).
2. Click into the post editor and locate the 'Images' or 'Media' section.
3. For each of the 6 images, click the image thumbnail and open its properties/settings.
4. Fill the 'Alt Text' or 'Alternative Text' field with 1–10 words describing what the image shows (e.g., 'Lavender plant and CBD oil dropper', 'Customer relaxing with cannabis product').
5. Save and republish the post.
6. If using WordPress, install the free 'Alt Text' or 'Yoast SEO' plugin to bulk-audit and flag missing alt on future uploads.
7. Train your content team: before uploading any image, always fill the alt text field in the media library.

### 33. 6 image(s) missing alt text

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://www.thealchemy.nyc/post/dry-january-reimagined-the-alchemy-of-cali-sober-rituals
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Six images on your Dry January blog post lack alt text—descriptive labels that screen readers use to describe images to visually impaired visitors, and that search engines use to understand image content. This creates a barrier for accessibility and leaves SEO value on the table, since Google cannot index what it cannot 'see' in those images.

**Why it matters for your business:** Missing alt text reduces your blog's reach to both disabled users and search engines; it also signals poor site quality to Google, which can lower your ranking for that article and related content.

**Technical root cause:** Images were uploaded or embedded without alt attribute text being populated in the HTML. This commonly happens when using visual page builders or CMS interfaces that don't enforce alt text entry before publishing.

**Recommended fix — step by step**

1. Open https://www.thealchemy.nyc/post/dry-january-reimagined-the-alchemy-of-cali-sober-rituals in edit mode (if WordPress: Dashboard → Posts → Dry January post → Edit with Gutenberg)
2. Scroll through the post and identify each of the 6 missing-alt images by inspecting them in your browser (right-click → Inspect → look for <img> tags with no alt='' attribute)
3. For each image, click it in the editor and add a concise, descriptive alt text in the alt field (e.g., 'Alchemy CBD tea ritual setup with sage and crystals' instead of 'image123')
4. Write alt text that describes what you see and why it matters to your audience—avoid keyword stuffing; aim for 8–12 words per image
5. Publish or update the post
6. Use a free tool like WAVE (wave.webaim.org) or axe DevTools (browser extension) to re-scan the page and confirm all 6 images now have alt text

### 34. Missing canonical

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/post/how-the-alchemy-is-transforming-the-ny-dispensary-experience
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

Your blog post page doesn't tell search engines which version is the 'official' one to rank. This matters when the same content is accessible via multiple URLs (with or without www, with or without trailing slash, or via query parameters). Without a canonical tag, Google may index duplicates, splitting your ranking power across them.

**Why it matters for your business:** Duplicate content issues can dilute your search rankings for cannabis-related keywords, reducing organic traffic to your dispensary's content and potentially hurting visibility for local SEO.

**Technical root cause:** The page HTML is missing a <link rel="canonical" href="..."> tag in the <head> section. Most CMS platforms don't add this automatically for blog posts unless explicitly configured.

**Recommended fix — step by step**

1. Open the blog post in your CMS editor (likely WordPress or similar)
2. In the post editor, look for an 'SEO' or 'Advanced' section (often a Yoast SEO, Rank Math, or All in One SEO plugin panel on the right sidebar)
3. If a canonical URL field exists, enter the full URL: https://www.thealchemy.nyc/post/how-the-alchemy-is-transforming-the-ny-dispensary-experience
4. If no SEO plugin exists, add this line directly in the post template's <head> HTML: <link rel="canonical" href="https://www.thealchemy.nyc/post/how-the-alchemy-is-transforming-the-ny-dispensary-experience">
5. Save and republish the post
6. Check 2-3 other blog posts to confirm they also lack canonicals, then apply the same fix globally (via plugin settings if available, or template-wide if you have dev access)

### 35. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/post/how-the-alchemy-is-transforming-the-ny-dispensary-experience
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your website isn't using structured data (JSON-LD)—a standardized format that tells search engines like Google exactly what your pages are about. Without it, Google has to guess whether a page is a product listing, a blog post, or general information, which means search results may not display optimally or include rich features like star ratings, prices, or availability badges.

**Why it matters for your business:** Missing structured data reduces your visibility in Google Search results, limits click-through rates on listings, and prevents you from appearing in specialized search results (like local dispensary finders or product carousels) that drive qualified foot traffic.

**Technical root cause:** The page does not contain any JSON-LD schema blocks in the <head> or <body> section. This is typically added manually or via a plugin/CMS feature that generates structured data automatically based on page content.

**Recommended fix — step by step**

1. Identify your platform: view page source (Ctrl+U), look for CMS signatures (WordPress wp-content, Shopify CDN, custom build) in script and stylesheet URLs
2. If WordPress: install Yoast SEO Free, navigate to SEO → Titles & Metas → Schema, enable 'Local Business' schema, fill in business name/address/phone
3. If Shopify: go to Online Store → Preferences → enable 'Show store on Google search results' and 'Show products and collections on Google'
4. If custom/unknown platform: add JSON-LD BlogPosting schema to blog posts (include headline, datePublished, author, image) and LocalBusiness schema to homepage (include name, address, telephone, image); validate at schema.org/validator
5. For the example blog URL, add minimal BlogPosting schema: {"@context":"https://schema.org","@type":"BlogPosting","headline":"How The Alchemy Is Transforming...","datePublished":"YYYY-MM-DD","image":"[article image URL]","author":{"@type":"Organization","name":"The Alchemy"}}
6. Test all pages with Google Rich Results Test (search.google.com/test/rich-results) to confirm schema is recognized
7. Monitor Search Console (console.google.com) → Enhancements tab for any schema errors or warnings

### 36. 6 image(s) missing alt text

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://www.thealchemy.nyc/post/how-the-alchemy-is-transforming-the-ny-dispensary-experience
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Six images on your blog post lack alt text — descriptive labels that tell search engines and visitors using screen readers what each image shows. This hurts both accessibility (people using assistive technology can't understand your visuals) and SEO (Google can't index image content without these labels).

**Why it matters for your business:** Missing alt text reduces your ability to rank in Google Images, limits reach to customers with visual impairments, and increases legal risk under ADA compliance standards — particularly important for a NYC-based dispensary.

**Technical root cause:** Images were likely uploaded without alt attributes being filled in during content creation. Most CMS platforms leave alt fields optional, so they're skipped by default.

**Recommended fix — step by step**

1. Log into your CMS admin and navigate to the blog post 'How the Alchemy is Transforming the NY Dispensary Experience'
2. Edit each of the 6 images one at a time; locate the 'Alt text' or 'Alternative text' field (usually in the image properties panel)
3. Write descriptive, concise alt text for each: e.g., 'Glass jars of cannabis flower on wooden display shelf' or 'Customer browsing The Alchemy product menu at storefront counter' — be specific, not generic
4. Avoid keyword stuffing; alt text should sound natural (e.g., NOT 'premium cannabis NYC dispensary products for sale online')
5. Save/publish each edit
6. After all 6 are updated, run the page through WebAIM's WAVE tool (wave.webaim.org) and paste your URL to verify alt text is now present
7. Set a recurring task to review any new blog posts for missing alt text before publishing

### 37. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/post/how-to-choose-the-right-cannabis-dispensary-in-nyc
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your blog post about choosing a cannabis dispensary in NYC is missing structured data—invisible code that tells Google what the page is about (e.g., article type, author, publish date). Without it, search engines have to guess, and they often guess wrong. This means your content ranks lower for related searches and doesn't appear in rich results (like featured snippets or news carousels).

**Why it matters for your business:** Missing schema reduces organic search visibility for educational content that builds trust with first-time customers and improves click-through rates from search results.

**Technical root cause:** The page's HTML contains no JSON-LD blocks—structured data that search engines use to understand page content. This is a markup omission, not a rendering or performance issue.

**Recommended fix — step by step**

1. Audit your site's CMS or template: check if your blogging platform (WordPress, Webflow, custom) has a built-in schema plugin or field for structured data.
2. If using WordPress, install Yoast SEO or Rank Math → Blog post editor → enable 'Article' schema type → fill in author, publish date, and article content fields automatically.
3. If using Webflow, go to the blog post settings → under SEO tab, check if schema is being auto-generated; if not, add a custom code embed in the footer with Article schema JSON-LD.
4. If custom-built or unknown CMS, paste this JSON-LD block into the <head> section of the blog post template: `{"@context":"https://schema.org","@type":"BlogPosting","headline":"How to Choose the Right Cannabis Dispensary in NYC","datePublished":"[publish date]","dateModified":"[last update]","author":{"@type":"Organization","name":"The Alchemy"},"mainEntity":{"@type":"Article","articleBody":"[first 200 chars of post body]"}}` and replace bracketed values with actual post metadata.
5. Test implementation using Google's Rich Results Test (search.google.com/test/rich-results) → paste your blog post URL → verify Article schema appears with no errors.
6. Repeat for all blog posts; consider automating via plugin if platform supports it.

### 38. 6 image(s) missing alt text

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://www.thealchemy.nyc/post/how-to-choose-the-right-cannabis-dispensary-in-nyc
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Six images on your blog post lack alt text—descriptions that screen readers use to tell visually-impaired visitors what an image shows. These same descriptions help Google understand your images, which can improve search rankings for image queries and overall page relevance.

**Why it matters for your business:** Missing alt text reduces accessibility for customers with vision disabilities (a legal compliance risk) and leaves SEO value on the table—particularly important for a premium dispensary competing in NYC's saturated market.

**Technical root cause:** Images were uploaded and published without descriptive alt attributes. This often happens when content management systems allow image upload without requiring an alt field before publishing.

**Recommended fix — step by step**

1. Log in to your site's content management system (WordPress, Shopify, custom CMS, etc.) and navigate to the blog post 'How to Choose the Right Cannabis Dispensary in NYC'
2. Edit each of the 6 images missing alt text; look for an 'Alt Text' or 'Description' field in the image properties panel
3. Write concise, descriptive alt text for each: describe what the image shows in 1–2 sentences (e.g., 'Interior view of The Alchemy's product display shelves with labeled cannabis flower varieties' rather than 'image1.jpg')
4. Ensure alt text includes your relevant keywords naturally where appropriate (e.g., 'cannabis strain selection at NYC dispensary') but avoid keyword stuffing
5. Save and republish the post
6. Once complete, run your URL through a free accessibility checker (WAVE.webaim.org or Lighthouse in Chrome DevTools) to confirm all images now have alt text

### 39. Missing canonical

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/post/new-year-new-rituals-how-cannabis-can-elevate-your-wellness-routine
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

Your blog post page doesn't have a canonical tag — a line of code that tells search engines which version of a page is the 'official' one. Without it, Google may not know whether to rank this post, a duplicate version, or redirect traffic elsewhere. This is especially risky if the post is ever shared with different URL parameters (like ?utm_source=email), which creates duplicate-looking pages.

**Why it matters for your business:** Search engines may penalize rankings for this content or split ranking credit across multiple URLs, reducing discoverability of your wellness content and limiting organic traffic to your blog.

**Technical root cause:** The blog post template is missing a <link rel="canonical" href="..."> tag in the <head> section. Content management systems (WordPress, Shopify, etc.) typically add this automatically, but it may be disabled or the template may not include it.

**Recommended fix — step by step**

1. Check if your site uses WordPress, Shopify, or another CMS by viewing the page source (right-click → View Page Source) and looking for wp-content, cdn.shopify, or similar identifiers in script/asset URLs.
2. If WordPress: Install Yoast SEO (free) or Rankmath plugin → Settings → Titles & Meta → toggle 'Add canonical' ON → Save.
3. If Shopify: Go to Online Store → Themes → Edit Code → search for canonical in theme.liquid or blog-post.liquid; if missing, add <link rel="canonical" href="{{ page.url | canonical_url }}" /> in the <head> block.
4. If custom HTML/static site: Add this line to the <head> of the blog post template: <link rel="canonical" href="https://www.thealchemy.nyc/post/new-year-new-rituals-how-cannabis-can-elevate-your-wellness-routine" />
5. Repeat the same fix for all other blog posts and content pages.
6. After deploying, test using Google's Rich Results Test (search.google.com/test/rich-results) and paste the URL to confirm the canonical tag appears in the source.

### 40. 6 image(s) missing alt text

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** accessibility
- **Page URL:** https://www.thealchemy.nyc/post/new-year-new-rituals-how-cannabis-can-elevate-your-wellness-routine
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Six images on your wellness blog post are missing alternative text (alt text) — a brief description that screen readers use to convey what the image shows to visually impaired visitors. Without it, those visitors miss key content, and search engines can't index the images, losing potential traffic from image search results.

**Why it matters for your business:** Missing alt text reduces accessibility for disabled customers (a legal risk under ADA), hurts your search ranking for image-based queries (e.g., 'cannabis wellness products'), and signals poor site quality to Google, which can suppress organic visibility for competitive cannabis keywords.

**Technical root cause:** Images were uploaded or embedded without filling in the alt text field during content creation. This is a common content management oversight, especially in blog or CMS platforms where the alt field is optional or easily skipped.

**Recommended fix — step by step**

1. Open the affected blog post in your CMS editor (WordPress, Webflow, or custom backend) and locate each image.
2. Click each image to open its properties/settings panel and find the 'Alt Text' or 'Alternative Text' field.
3. Write a 5–10 word description for each image that conveys its content and relevance (e.g., 'Woman meditating with cannabis wellness products' or 'New Year wellness ritual setup with candles and cannabis'); be specific, not generic.
4. Save or publish the changes.
5. Repeat the same process for any other blog posts or product pages where images lack alt text (scan your top 10 most-visited pages first).
6. After updating, submit the page URL to Google Search Console → URL Inspection → Request Indexing to re-crawl and pick up the alt text.

### 41. Missing canonical

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/post/ritual-boxes-by-the-alchemy
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

This page lacks a canonical tag — a line of code that tells search engines which version of a page is the official one. Without it, search engines may get confused if the same content appears at multiple URLs (e.g., with or without tracking parameters), potentially splitting your search ranking power across duplicates.

**Why it matters for your business:** Missing canonicals can dilute your search visibility for product and content pages, making it harder for customers to find your offerings when they search for cannabis products or your brand.

**Technical root cause:** The page HTML does not include a <link rel="canonical" href="..."> tag in the <head> section. This is typically omitted during site setup or when using a CMS without automatic canonical generation.

**Recommended fix — step by step**

1. Open the page source (right-click → View Page Source) and search for '<link rel="canonical"' to confirm it's missing.
2. If using a CMS (WordPress, Shopify, Webflow, etc.), log into the page editor and look for a 'Canonical URL' or 'SEO' section — fill it with https://www.thealchemy.nyc/post/ritual-boxes-by-the-alchemy.
3. If editing HTML directly, add <link rel="canonical" href="https://www.thealchemy.nyc/post/ritual-boxes-by-the-alchemy"> in the <head> section before the closing </head> tag.
4. Audit all blog/product/post URLs for the same issue using a site crawler (e.g., Screaming Frog free edition) and apply canonical tags systematically.
5. If using WordPress, install Yoast SEO or Rank Math — both auto-generate canonicals; verify in Settings → SEO → Crawl Optimization.

### 42. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/contact-us
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your contact page doesn't include structured data—machine-readable information that tells Google what your business is, where it's located, and how to reach you. This means search engines have to guess at your details instead of reading them directly from your page code.

**Why it matters for your business:** Without structured data, you're missing opportunities to appear in Google's local business results, knowledge panels, and rich snippets—all of which drive foot traffic and phone calls to your dispensary.

**Technical root cause:** The page HTML lacks JSON-LD blocks (a standardized format that wraps business information in code). Search engines can infer some details from page text, but they perform better and rank higher when data is explicitly marked up.

**Recommended fix — step by step**

1. Add a LocalBusiness + ContactPoint JSON-LD schema to your contact page. Paste this template into your page <head>: {"@context": "https://schema.org", "@type": "LocalBusiness", "name": "The Alchemy", "address": "[your full address]", "telephone": "[your phone]", "url": "https://www.thealchemy.nyc"}
2. Add Organization schema to your homepage <head> with logo, social profiles, and contact info: {"@context": "https://schema.org", "@type": "Organization", "name": "The Alchemy", "logo": "[URL to your logo image]", "sameAs": ["[Instagram URL]", "[Facebook URL]"]}
3. Test both schemas in Google's Rich Results Test (search.google.com/test/rich-results) and fix any validation errors.
4. If using a CMS like WordPress, install Yoast SEO or Schema App, then use their UI to generate and insert schemas rather than hand-coding.
5. For your product pages (if listing strains/products), add Product schema with name, description, price, and availability.

### 43. Missing canonical

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/terms-conditions
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

Your Terms & Conditions page doesn't declare a canonical URL—a single, definitive web address that tells search engines 'this is the official version of this page.' Without it, search engines may get confused if the page appears under multiple URLs (with/without www, http/https, trailing slash, etc.), potentially splitting your ranking power across duplicates.

**Why it matters for your business:** Search engines may index multiple versions of your terms page separately, diluting SEO value and potentially confusing customers who land on different versions; also weakens your overall site authority for compliance-critical pages.

**Technical root cause:** The page HTML is missing a <link rel="canonical" href="https://www.thealchemy.nyc/terms-conditions"> tag in the <head> section, or your site structure is generating it inconsistently.

**Recommended fix — step by step**

1. Log into your website hosting control panel or CMS and access the Terms & Conditions page source/editor.
2. In the <head> section of the HTML (or equivalent SEO meta fields in your CMS), add: <link rel="canonical" href="https://www.thealchemy.nyc/terms-conditions">
3. Verify that the URL in the canonical tag exactly matches the page's actual URL (no trailing slashes, parameters, or protocol mismatches).
4. Check if your site platform (WordPress, Shopify, custom CMS) has a built-in SEO/canonical plugin—if so, enable it to auto-generate canonicals across all pages.
5. Test the change using Google's URL Inspection tool (search.google.com → URL Inspection → paste the terms page URL → check 'Inspected URL' for the canonical tag).

### 44. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/terms-conditions
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your Terms & Conditions page doesn't include JSON-LD structured data—a machine-readable format that tells Google what type of content it is. For a legal/policy page, this means search engines can't automatically understand its purpose, which slightly reduces discoverability and may affect how the page appears in search results.

**Why it matters for your business:** Without schema markup, your Terms & Conditions page ranks lower in search results and doesn't signal to Google that it's an important compliance document, potentially pushing customers to competitors' sites when they search for dispensary policies.

**Technical root cause:** The page lacks JSON-LD blocks in its HTML head or body. This is typically omitted on secondary pages (like T&Cs) because developers prioritize schema on product/location pages, but Google still benefits from it on every page.

**Recommended fix — step by step**

1. Open the Terms & Conditions page HTML and locate the </head> closing tag.
2. Add this JSON-LD block before </head>: <script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"Terms and Conditions","url":"https://www.thealchemy.nyc/terms-conditions","publisher":{"@type":"Organization","name":"The Alchemy","url":"https://www.thealchemy.nyc"}}</script>
3. Test the markup with Google's Rich Results Test (search.google.com/test/rich-results) to confirm no errors.
4. Repeat for your Privacy Policy and other core legal/info pages.

### 45. Missing canonical

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/privacy-policy
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

Your privacy policy page doesn't tell search engines which version of this page is the 'official' one. Without a canonical tag, Google may treat duplicate or similar versions as separate pages, diluting your search visibility and potentially confusing crawlers if the same content appears on multiple URLs.

**Why it matters for your business:** Missing canonicals can weaken your site's SEO authority and cause search engines to index unintended variations of your pages, reducing organic traffic to your actual site.

**Technical root cause:** The page lacks a <link rel="canonical" href="https://www.thealchemy.nyc/privacy-policy"> tag in its HTML head section, which explicitly signals to search engines the preferred URL for this content.

**Recommended fix — step by step**

1. Log into your website's CMS or hosting admin panel and open the HTML editor for /privacy-policy
2. In the <head> section, add this line: <link rel="canonical" href="https://www.thealchemy.nyc/privacy-policy">
3. If using WordPress, install Yoast SEO, go to Settings → Titles & Metas → Canonical URLs, and enable automatic canonicals
4. If using a page builder (Squarespace, Wix, Webflow), check its SEO settings panel for a 'Canonical URL' field and populate it
5. Save and publish the change
6. Run your privacy-policy URL through Google Search Console → URL Inspection to verify the canonical is recognized

### 46. Missing canonical

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/blog
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

Your blog page doesn't have a canonical tag—a line of code that tells search engines which version of a page is the 'official' one. Without it, Google may get confused if the same content appears under multiple URLs (e.g., with or without trailing slashes, or via different navigation paths), which can dilute your search ranking.

**Why it matters for your business:** Missing canonicals can split your blog's search visibility across duplicate URLs, reducing organic traffic and making it harder for customers to find your content when they search for cannabis products or strains you write about.

**Technical root cause:** The blog page template does not include a <link rel="canonical" href="https://www.thealchemy.nyc/blog"> tag in its HTML head section, leaving search engines without explicit guidance on the preferred URL.

**Recommended fix — step by step**

1. Inspect the blog page source (right-click → View Page Source, Ctrl+F for '<head>') to confirm no canonical tag exists
2. If using WordPress, install Yoast SEO plugin → Settings → Site Connections → enable canonical URLs, then regenerate the sitemap
3. If on a custom platform or static site, manually add <link rel="canonical" href="https://www.thealchemy.nyc/blog"> in the <head> section of the blog template
4. If using Shopify, go to Products → Blog Posts → select the blog → Scroll to 'Search engine listing' and verify the canonical URL is set correctly
5. Test the fix by re-checking the page source to confirm the canonical tag appears before </head>
6. Submit the updated blog URL to Google Search Console (Tools → URL Inspection) to re-crawl and index with the canonical in place

### 47. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/blog
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your blog page doesn't include JSON-LD structured data — machine-readable code that tells search engines what your content is about. Without it, Google can't reliably understand whether a blog post is about a product, article, or something else, which reduces your chances of appearing in rich search results (the fancy boxes with images and ratings you see on Google).

**Why it matters for your business:** Missing schema markup reduces your blog's visibility in Google Search, limiting organic traffic to educational content that could drive awareness and establish authority in the cannabis retail space.

**Technical root cause:** The blog template or CMS is not outputting JSON-LD schema blocks. No structured data is being generated for blog post pages.

**Recommended fix — step by step**

1. Identify whether your site uses WordPress, Shopify, or a custom platform — check the page source (Ctrl+U) for clues like wp-content or CDN URLs
2. If WordPress: install Yoast SEO or Rank Math (both add schema automatically) — go to Plugins → Add New, search 'Yoast SEO', install, then activate and configure in the SEO sidebar
3. If Shopify or custom: locate your blog post template file (likely blog.liquid for Shopify or blog.html/blog.php for custom code) and request your developer add the BlogPosting schema from schema.org/BlogPosting
4. Add at minimum: headline, datePublished, dateModified, author name, and article body to the schema block
5. Test the markup using Google's Rich Results Test (search.google.com/test/rich-results) and paste your blog URL to verify it renders correctly
6. Resubmit your blog sitemap in Google Search Console (once schema is live) to encourage re-crawling within 24–48 hours

### 48. Missing canonical

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/qr
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

Your /qr page is missing a canonical tag — a line of code that tells search engines which version of a page is the 'official' one. Without it, Google may index duplicate or near-duplicate versions of this page (like www.thealchemy.nyc/qr?ref=email), which dilutes your ranking power and confuses search crawlers.

**Why it matters for your business:** Search engines may penalize your site by splitting ranking credit across multiple versions of the same page, lowering visibility for product or menu searches that drive customer traffic to your dispensary.

**Technical root cause:** The /qr endpoint is either dynamically generated without canonical tag injection, or the template/controller serving it does not include the HTML meta tag. QR landing pages are often overlooked in canonical implementation because they are treated as 'utility' pages rather than core content.

**Recommended fix — step by step**

1. Inspect the source code of https://www.thealchemy.nyc/qr in your browser (Ctrl+U or Cmd+U), then search for '<link rel="canonical"' — confirm it is absent.
2. Identify the backend language/framework: check the page source for clues (Next.js, Django, Laravel comments; or check HTTP response headers for 'X-Powered-By'). If unknown, ask your hosting/development team.
3. Add a canonical tag in the <head> section of the /qr page: <link rel="canonical" href="https://www.thealchemy.nyc/qr" /> — ensure the domain, protocol (https), and path exactly match your preferred URL.
4. If this is a static HTML page, edit the file directly and deploy. If dynamic (PHP, Node, Python), add the canonical tag to the template or response header before the closing </head> tag.
5. Re-deploy or save changes and clear your CDN / browser cache.
6. Use Google Search Console (search.google.com) → URL Inspection tool → enter https://www.thealchemy.nyc/qr and request indexing. Verify the canonical tag appears in the 'Indexing' section.
7. Monitor Search Console for 'Duplicate without user-selected canonical' errors over the next 2 weeks; if none appear, the fix is working.

### 49. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/flatiron/terms-conditions-flatiron
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your Terms & Conditions page doesn't include JSON-LD structured data — a standardized code block that tells search engines what type of content lives on the page. For a legal/compliance page, this is especially important because search engines use it to understand and index the content correctly. Without it, search engines have to guess the page's purpose, which can lead to lower visibility in search results.

**Why it matters for your business:** Search engines may deprioritize or misclassify your legal pages, reducing organic traffic to important compliance documentation that customers and regulators may be looking for.

**Technical root cause:** The page template lacks JSON-LD markup. This is typically implemented in the <head> or footer of the HTML; it's not present in the current page code.

**Recommended fix — step by step**

1. Identify your CMS or hosting platform by inspecting the page source (View Source → look for 'Powered by', comment tags, or CMS-specific meta tags)
2. For a Terms & Conditions page, add a JSON-LD 'WebPage' or 'CreativeWork' block in the <head> section with properties: @context (https://schema.org), @type (WebPage), name (page title), description (meta description), datePublished, and dateModified
3. Paste this template into your page template or theme header: <script type="application/ld+json">{"@context": "https://schema.org", "@type": "WebPage", "name": "Terms & Conditions", "description": "[your meta description]", "url": "https://www.thealchemy.nyc/flatiron/terms-conditions-flatiron"}</script>
4. Test the markup using Google's Rich Results Test (search.google.com/test/rich-results) — paste your URL and verify it renders without errors
5. Repeat for all major page types: homepage (Organization), product pages (LocalBusiness or Product), and contact/about pages

### 50. Missing canonical

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/flatiron/privacy-policy-flatiron
- **Rule:** `tier2.meta.no-canonical`

**What it means (plain English)**

This page doesn't tell search engines which version of the content is the 'official' one. If the same privacy policy appears under multiple URLs (e.g., /flatiron/privacy-policy-flatiron and /privacy-policy), search engines may index both, splitting your credibility signal and potentially ranking the wrong version.

**Why it matters for your business:** Duplicate content pages dilute SEO authority and can confuse search rankings for important trust pages like privacy policies, which affect customer confidence and regulatory compliance visibility.

**Technical root cause:** The page is missing the HTML <link rel="canonical" href="..."/> tag in its <head> section, which explicitly points search engines to the preferred URL for this content.

**Recommended fix — step by step**

1. Audit your site structure to confirm whether /flatiron/privacy-policy-flatiron is the canonical URL or if privacy policy should live at a single location (e.g., /privacy-policy)
2. If /flatiron/privacy-policy-flatiron is the canonical version, open the page HTML and add <link rel="canonical" href="https://www.thealchemy.nyc/flatiron/privacy-policy-flatiron" /> in the <head> section
3. If /privacy-policy is canonical, redirect /flatiron/privacy-policy-flatiron to it using a server 301 redirect (ask your hosting provider or developer to configure this in .htaccess or server config)
4. Check all other location-specific pages (Flatiron, other locations) for the same issue and apply canonicals or redirects consistently
5. Use Google Search Console > Pages to verify Google is now recognizing the canonical and not indexing duplicates

### 51. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/post/cannabis-storage-best-practices-to-keep-your-stash-fresh
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your blog post about cannabis storage has no structured data markup — essentially, search engines can't automatically understand what type of content this is or who published it. This makes it harder for Google to categorize the page and show it in rich results (like featured snippets or knowledge panels), which are especially valuable for educational content in the cannabis space.

**Why it matters for your business:** Without schema markup, you lose visibility in Google's rich results and voice search answers, which drive traffic to educational content that builds brand authority and trust with customers.

**Technical root cause:** The page HTML lacks JSON-LD blocks that tell search engines the content type, author, publish date, and other metadata. This is a markup omission, not a functionality issue.

**Recommended fix — step by step**

1. Install a schema markup plugin (e.g., Yoast SEO, RankMath, or Schema Pro if WordPress; or manually add if static HTML)
2. For the blog post, add Article schema with: headline, datePublished, dateModified, author name, and description
3. Consider adding Organization schema to your homepage with your business name, address, phone, and license info (critical for local cannabis dispensaries)
4. Test the markup using Google's Rich Results Test (search.google.com/test/rich-results) to ensure no validation errors
5. Add LocalBusiness schema to homepage with your physical address, hours, and cannabis license number if you operate a physical location

### 52. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/post/celebrate-the-grand-opening-of-the-alchemy-7-days-of-activations-experiences-elevated-nyc-vibes
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your blog post about the grand opening has no JSON-LD schema—structured data that tells Google what the page is about (e.g., an event, article, or product). Without it, search engines have to guess the content type, which reduces the chance it appears in rich search results (the boxes with images, dates, or ratings that catch customer eyes).

**Why it matters for your business:** Missing schema means your grand opening event won't show up in Google's event carousel or news results, losing foot traffic from local customers actively searching for cannabis events in NYC.

**Technical root cause:** The page lacks JSON-LD markup in the <head> or <body>. This is either absent from the page template or the CMS is not auto-generating it.

**Recommended fix — step by step**

1. Identify your CMS/platform by checking the page source (right-click → View Page Source, look for generator meta tag or CMS indicators like WordPress, Shopify, custom)
2. If WordPress: install Yoast SEO or RankMath plugin → go to plugin settings → enable JSON-LD for posts
3. If Shopify: JSON-LD is built-in; check theme settings to ensure Event schema is enabled for blog posts
4. For this specific grand opening post, add Event schema manually using Google's Structured Data Markup Helper (schema.org/Event) with: name, date, location (The Alchemy address), description, and image URL
5. Validate the markup using Google's Rich Results Test (search.google.com/test/rich-results) to confirm no errors
6. Repeat for all other blog posts and product pages to standardize schema across the site

### 53. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/post/dry-january-reimagined-the-alchemy-of-cali-sober-rituals
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your blog post about Dry January lacks structured data markup — a machine-readable format that tells search engines what your content is about. Without it, Google can't confidently categorize your post as a blog article, which means it's less likely to appear in search results or rich snippets (the fancy preview cards that appear above regular listings).

**Why it matters for your business:** Missing schema markup reduces your visibility in Google search results and knowledge panels, limiting organic traffic to your educational content and brand authority pages.

**Technical root cause:** The page HTML does not include JSON-LD script blocks in the <head> or <body> that define the article schema (headline, author, date published, image, etc.).

**Recommended fix — step by step**

1. Identify your site platform by inspecting the page source (Ctrl+U) and looking for CMS indicators (WordPress, Webflow, Shopify, etc.) or ask your hosting provider.
2. If WordPress: install Yoast SEO or All in One SEO, then navigate to the plugin settings → Schema tab and enable Article schema for blog posts.
3. If Webflow: open the blog post in the Designer, select the post element, go to the Settings panel → SEO → Schema, and set type to 'Article' with dynamic fields for title, author, date, and featured image.
4. If custom-built or other platform: add JSON-LD schema directly to the post template. Paste this into the <head>: <script type='application/ld+json'>{"@context":"https://schema.org","@type":"BlogPosting","headline":"[post title]","datePublished":"[publish date]","author":{"@type":"Organization","name":"The Alchemy"},"image":"[featured image URL]"}</script>
5. Test the result using Google's Rich Results Test (search.google.com/test/rich-results) to confirm schema renders without errors.
6. Repeat for other blog posts and ensure the schema includes author, publication date, and featured image for best results.

### 54. No JSON-LD schema

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://www.thealchemy.nyc/post/ritual-boxes-by-the-alchemy
- **Rule:** `tier2.schema.none`

**What it means (plain English)**

Your website is missing JSON-LD structured data — machine-readable code that tells Google, Bing, and other search engines what your content is about. Think of it like a label on a product: you can see the product, but the label tells a machine exactly what it contains. Without it, search engines have to guess, which means your pages rank less accurately and show fewer rich results (like star ratings, prices, or product images in search results).

**Why it matters for your business:** Premium cannabis dispensaries rely on local search visibility and accurate product display in search results to drive foot traffic and online orders; missing schema data reduces your visibility compared to competitors with properly structured pages.

**Technical root cause:** The page lacks JSON-LD blocks (structured data in <script type='application/ld+json'> tags) that describe the content type, product details, business information, or other key entities that search engines use to understand and rank pages.

**Recommended fix — step by step**

1. Install a schema markup plugin (for WordPress, use 'Yoast SEO' or 'Schema Pro'; for other platforms, skip to step 2). If WordPress: go to Admin → Plugins → Add New → search 'Yoast SEO' → Install & Activate → go to Yoast SEO → General → Features, enable Schema.
2. For product pages like /post/ritual-boxes-by-the-alchemy: configure product schema in your plugin by filling in: product name, price, description, image URL, availability, and brand (The Alchemy).
3. For your homepage and business pages: add Organization schema with business name, address (if public-facing), phone, and website URL.
4. Test each schema block using Google's Rich Results Test (https://search.google.com/test/rich-results): paste the page URL, verify no errors, and confirm schema type appears.
5. Submit updated pages to Google Search Console via the URL Inspection tool to trigger re-crawl and indexing.
6. If not on WordPress or a managed platform: request your web host/developer add <script type='application/ld+json'> blocks to page templates before closing </head> tags.

### 55. No JSON-LD schema

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/flatiron/about-us-flatiron
- **Rule:** `tier2.schema.none`

**Detail**

Page has no JSON-LD structured data blocks.

### 56. Missing canonical

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/flatiron/promotions-flatiron
- **Rule:** `tier2.meta.no-canonical`

**Detail**

Page has no <link rel=canonical>.

### 57. Missing canonical

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/flatiron/contact-us-flatiron
- **Rule:** `tier2.meta.no-canonical`

**Detail**

Page has no <link rel=canonical>.

### 58. No JSON-LD schema

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/post/cannabis-for-seniors-in-nyc-a-guide-to-wellness-sleep-and-pain-relief
- **Rule:** `tier2.schema.none`

**Detail**

Page has no JSON-LD structured data blocks.

### 59. Missing canonical

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/post/cannabis-for-stress-anxiety-sleep
- **Rule:** `tier2.meta.no-canonical`

**Detail**

Page has no <link rel=canonical>.

### 60. Missing canonical

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/post/cannabis-storage-best-practices-to-keep-your-stash-fresh
- **Rule:** `tier2.meta.no-canonical`

**Detail**

Page has no <link rel=canonical>.

### 61. 6 image(s) missing alt text

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/post/cannabis-storage-best-practices-to-keep-your-stash-fresh
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 62. Missing canonical

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/post/celebrate-the-grand-opening-of-the-alchemy-7-days-of-activations-experiences-elevated-nyc-vibes
- **Rule:** `tier2.meta.no-canonical`

**Detail**

Page has no <link rel=canonical>.

### 63. 6 image(s) missing alt text

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/post/celebrate-the-grand-opening-of-the-alchemy-7-days-of-activations-experiences-elevated-nyc-vibes
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 64. Missing canonical

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/post/dry-january-reimagined-the-alchemy-of-cali-sober-rituals
- **Rule:** `tier2.meta.no-canonical`

**Detail**

Page has no <link rel=canonical>.

### 65. Missing canonical

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/post/how-to-choose-the-right-cannabis-dispensary-in-nyc
- **Rule:** `tier2.meta.no-canonical`

**Detail**

Page has no <link rel=canonical>.

### 66. No JSON-LD schema

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/post/new-year-new-rituals-how-cannabis-can-elevate-your-wellness-routine
- **Rule:** `tier2.schema.none`

**Detail**

Page has no JSON-LD structured data blocks.

### 67. 7 image(s) missing alt text

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/post/ritual-boxes-by-the-alchemy
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 68. Missing canonical

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/post/what-is-croptober-and-what-does-it-mean-for-consumers
- **Rule:** `tier2.meta.no-canonical`

**Detail**

Page has no <link rel=canonical>.

### 69. No JSON-LD schema

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/post/what-is-croptober-and-what-does-it-mean-for-consumers
- **Rule:** `tier2.schema.none`

**Detail**

Page has no JSON-LD structured data blocks.

### 70. 5 image(s) missing alt text

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/post/what-is-croptober-and-what-does-it-mean-for-consumers
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 71. Missing canonical

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/post/your-nyc-cannabis-guide-best-strains-and-products-for-every-occasion
- **Rule:** `tier2.meta.no-canonical`

**Detail**

Page has no <link rel=canonical>.

### 72. No JSON-LD schema

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/post/your-nyc-cannabis-guide-best-strains-and-products-for-every-occasion
- **Rule:** `tier2.schema.none`

**Detail**

Page has no JSON-LD structured data blocks.

### 73. 6 image(s) missing alt text

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/post/your-nyc-cannabis-guide-best-strains-and-products-for-every-occasion
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 74. Missing meta description

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/promo-products/fernway-ritual
- **Rule:** `tier2.meta.no-description`

**Detail**

Page has no meta description.

### 75. Missing canonical

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/promo-products/fernway-ritual
- **Rule:** `tier2.meta.no-canonical`

**Detail**

Page has no <link rel=canonical>.

### 76. No JSON-LD schema

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/promo-products/fernway-ritual
- **Rule:** `tier2.schema.none`

**Detail**

Page has no JSON-LD structured data blocks.

### 77. 7 image(s) missing alt text

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/promo-products/fernway-ritual
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 78. Missing meta description

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/promo-products-flatiron/fernway-ritual
- **Rule:** `tier2.meta.no-description`

**Detail**

Page has no meta description.

### 79. Missing canonical

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/promo-products-flatiron/fernway-ritual
- **Rule:** `tier2.meta.no-canonical`

**Detail**

Page has no <link rel=canonical>.

### 80. No JSON-LD schema

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/promo-products-flatiron/fernway-ritual
- **Rule:** `tier2.schema.none`

**Detail**

Page has no JSON-LD structured data blocks.

### 81. 6 image(s) missing alt text

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/promo-products-flatiron/fernway-ritual
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 82. 1 broken internal link(s)

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier2.links.broken`

**Detail**

Broken internal links degrade UX + crawl equity.

### 83. Layout shift (mobile): 0.164

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier3.cwv.cls-mobile`

**Detail**

CLS 0.164 exceeds 0.05 target.

### 84. Layout shift (desktop): 0.107

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier3.cwv.cls-desktop`

**Detail**

CLS 0.107 exceeds 0.05 target.

### 85. Missing core schema types: Organization, LocalBusiness, WebSite

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier4.schema.missing-core`

**Detail**

Every site should emit Organization + LocalBusiness + WebSite JSON-LD.

### 86. Missing security header: x-frame-options

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier5.header.x-frame-options`

**Detail**

x-frame-options not present on homepage response. Affects fortress score and CSP posture.

### 87. Missing security header: content-security-policy

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier5.header.content-security-policy`

**Detail**

content-security-policy not present on homepage response. Affects fortress score and CSP posture.

### 88. No DMARC policy published

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier5.fortress.dmarc-missing`

**Detail**

No v=DMARC1 record at _dmarc.thealchemy.nyc. Without DMARC, spoofed email from your domain is harder to filter. Start with p=none for monitoring.

### 89. 13 tap targets under 44px at mobile-320

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier6.a11y.small-targets`

**Detail**

Interactive elements smaller than 44x44 fail WCAG 2.5.5 target size.

### 90. 13 tap targets under 44px at mobile-375

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier6.a11y.small-targets`

**Detail**

Interactive elements smaller than 44x44 fail WCAG 2.5.5 target size.

### 91. 13 tap targets under 44px at mobile-414

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier6.a11y.small-targets`

**Detail**

Interactive elements smaller than 44x44 fail WCAG 2.5.5 target size.

### 92. 12 tap targets under 44px at tablet-768

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier6.a11y.small-targets`

**Detail**

Interactive elements smaller than 44x44 fail WCAG 2.5.5 target size.

### 93. Lighthouse a11y (desktop): 74/100

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier8.lighthouse.a11y-desktop`

**Detail**

Score 74 is below target 95. See HTML report for details.

### 94. Lighthouse bestPractices (desktop): 74/100

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier8.lighthouse.bestPractices-desktop`

**Detail**

Score 74 is below target 90. See HTML report for details.

### 95. A11y: Landmarks should have a unique role or role/label/title (i.e. accessible name) combination

- **Severity:** P2
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier9.a11y.landmark-unique`

**Detail**

Ensure landmarks are unique
Impact: moderate
WCAG: 
Learn more: https://dequeuniversity.com/rules/axe/4.11/landmark-unique?application=playwright

---

### P3 — 65 findings

### 1. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/about-us
- **Rule:** `tier2.meta.no-og`

**Detail**

Page missing og:title and/or og:image.

### 2. 2 image(s) missing alt text

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/about-us
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 3. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/contact-us
- **Rule:** `tier2.meta.no-og`

**Detail**

Page missing og:title and/or og:image.

### 4. 2 image(s) missing alt text

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/contact-us
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 5. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/terms-conditions
- **Rule:** `tier2.meta.no-og`

**Detail**

Page missing og:title and/or og:image.

### 6. 2 image(s) missing alt text

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/terms-conditions
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 7. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/privacy-policy
- **Rule:** `tier2.meta.no-og`

**Detail**

Page missing og:title and/or og:image.

### 8. 2 image(s) missing alt text

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/privacy-policy
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 9. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/shop
- **Rule:** `tier2.meta.no-og`

**Detail**

Page missing og:title and/or og:image.

### 10. 4 image(s) missing alt text

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/shop
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 11. Title length 4 chars

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/blog
- **Rule:** `tier2.meta.title-length`

**Detail**

Title should be 20-65 chars. Got: "Blog"

### 12. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/blog
- **Rule:** `tier2.meta.no-og`

**Detail**

Page missing og:title and/or og:image.

### 13. Missing Twitter card

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/blog
- **Rule:** `tier2.meta.no-twitter-card`

**Detail**

No twitter:card meta tag.

### 14. Title length 2 chars

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/qr
- **Rule:** `tier2.meta.title-length`

**Detail**

Title should be 20-65 chars. Got: "QR"

### 15. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/qr
- **Rule:** `tier2.meta.no-og`

**Detail**

Page missing og:title and/or og:image.

### 16. 2 image(s) missing alt text

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/qr
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 17. Title length 16 chars

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/current-specials
- **Rule:** `tier2.meta.title-length`

**Detail**

Title should be 20-65 chars. Got: "Current Specials"

### 18. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/current-specials
- **Rule:** `tier2.meta.no-og`

**Detail**

Page missing og:title and/or og:image.

### 19. 3 image(s) missing alt text

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/current-specials
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 20. Title length 10 chars

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/promotions
- **Rule:** `tier2.meta.title-length`

**Detail**

Title should be 20-65 chars. Got: "Promotions"

### 21. Description length 180 chars

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/promotions
- **Rule:** `tier2.meta.description-length`

**Detail**

Description should be 80-160 chars.

### 22. 2 image(s) missing alt text

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/promotions
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 23. Missing Twitter card

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/flatiron/the-alchemy-flatiron
- **Rule:** `tier2.meta.no-twitter-card`

**Detail**

No twitter:card meta tag.

### 24. Title length 19 chars

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/flatiron/about-us-flatiron
- **Rule:** `tier2.meta.title-length`

**Detail**

Title should be 20-65 chars. Got: "About Us | Flatiron"

### 25. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/flatiron/about-us-flatiron
- **Rule:** `tier2.meta.no-og`

**Detail**

Page missing og:title and/or og:image.

### 26. 2 image(s) missing alt text

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/flatiron/about-us-flatiron
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 27. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/flatiron/current-specials-flatiron
- **Rule:** `tier2.meta.no-og`

**Detail**

Page missing og:title and/or og:image.

### 28. 3 image(s) missing alt text

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/flatiron/current-specials-flatiron
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 29. Description length 180 chars

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/flatiron/promotions-flatiron
- **Rule:** `tier2.meta.description-length`

**Detail**

Description should be 80-160 chars.

### 30. 2 image(s) missing alt text

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/flatiron/promotions-flatiron
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 31. Title length 15 chars

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/flatiron/shop-flatiron
- **Rule:** `tier2.meta.title-length`

**Detail**

Title should be 20-65 chars. Got: "Shop | Flatiron"

### 32. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/flatiron/shop-flatiron
- **Rule:** `tier2.meta.no-og`

**Detail**

Page missing og:title and/or og:image.

### 33. 4 image(s) missing alt text

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/flatiron/shop-flatiron
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 34. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/flatiron/contact-us-flatiron
- **Rule:** `tier2.meta.no-og`

**Detail**

Page missing og:title and/or og:image.

### 35. 2 image(s) missing alt text

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/flatiron/contact-us-flatiron
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 36. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/flatiron/terms-conditions-flatiron
- **Rule:** `tier2.meta.no-og`

**Detail**

Page missing og:title and/or og:image.

### 37. 2 image(s) missing alt text

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/flatiron/terms-conditions-flatiron
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 38. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/flatiron/privacy-policy-flatiron
- **Rule:** `tier2.meta.no-og`

**Detail**

Page missing og:title and/or og:image.

### 39. 2 image(s) missing alt text

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/flatiron/privacy-policy-flatiron
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 40. Title length 11 chars

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/promo-products/fernway-ritual
- **Rule:** `tier2.meta.title-length`

**Detail**

Title should be 20-65 chars. Got: "The Alchemy"

### 41. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/promo-products/fernway-ritual
- **Rule:** `tier2.meta.no-og`

**Detail**

Page missing og:title and/or og:image.

### 42. Missing Twitter card

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/promo-products/fernway-ritual
- **Rule:** `tier2.meta.no-twitter-card`

**Detail**

No twitter:card meta tag.

### 43. Title length 11 chars

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/promo-products-flatiron/fernway-ritual
- **Rule:** `tier2.meta.title-length`

**Detail**

Title should be 20-65 chars. Got: "The Alchemy"

### 44. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/promo-products-flatiron/fernway-ritual
- **Rule:** `tier2.meta.no-og`

**Detail**

Page missing og:title and/or og:image.

### 45. Missing Twitter card

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/promo-products-flatiron/fernway-ritual
- **Rule:** `tier2.meta.no-twitter-card`

**Detail**

No twitter:card meta tag.

### 46. Heavy JS payload (mobile): 843KB

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier3.weight.js-mobile`

**Detail**

JavaScript transfer exceeds 250KB budget.

### 47. Heavy page weight (mobile): 3362KB

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier3.weight.total-mobile`

**Detail**

Total transfer exceeds 2500KB budget.

### 48. Heavy JS payload (desktop): 841KB

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier3.weight.js-desktop`

**Detail**

JavaScript transfer exceeds 250KB budget.

### 49. Heavy page weight (desktop): 3325KB

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier3.weight.total-desktop`

**Detail**

Total transfer exceeds 2500KB budget.

### 50. Sitemap lastmod dates are stale

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/sitemap.xml
- **Rule:** `tier4.sitemap.stale`

**Detail**

31/31 URLs have lastmod older than 90 days.

### 51. Missing security header: x-content-type-options

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier5.header.x-content-type-options`

**Detail**

x-content-type-options not present on homepage response. Affects fortress score and CSP posture.

### 52. Missing security header: referrer-policy

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier5.header.referrer-policy`

**Detail**

referrer-policy not present on homepage response. Affects fortress score and CSP posture.

### 53. Missing security header: permissions-policy

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier5.header.permissions-policy`

**Detail**

permissions-policy not present on homepage response. Affects fortress score and CSP posture.

### 54. SSL Labs grade: unknown

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier5.fortress.ssl-grade`

**Detail**

Qualys SSL Labs: SSL Labs HTTP 400. Aim for A+ via strong TLS 1.3, HSTS, CAA, and preload.

### 55. DNSSEC not enabled

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier5.fortress.dnssec-missing`

**Detail**

DNSSEC adds cryptographic verification to DNS responses. Consider enabling via your registrar.

### 56. No CAA DNS records

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier5.fortress.caa-missing`

**Detail**

CAA records restrict which CAs may issue certs for your domain, preventing rogue issuance. Add CAA for letsencrypt.org / digicert.com / etc.

### 57. Visual change detected at tablet-768

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier6.visual.changed`

**Detail**

Screenshot hash differs from baseline. Prev=1d44293ce1bdceee, now=5c5666287d9482af. Review for unintended regression.

### 58. Visual change detected at desktop-1440

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier6.visual.changed`

**Detail**

Screenshot hash differs from baseline. Prev=5d6538ab0315360d, now=7ea66cf246591d33. Review for unintended regression.

### 59. Lighthouse mobile audit failed to run

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier8.lighthouse.mobile-failed`

**Detail**

The "start lh:driver:navigate" performance mark has not been set

### 60. Lighthouse seo (desktop): 92/100

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier8.lighthouse.seo-desktop`

**Detail**

Score 92 is below target 95. See HTML report for details.

### 61. LH desktop: Minify CSS (Est savings of 4 KiB)

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier8.lh-opportunity.unminified-css-desktop`

**Detail**

Minifying CSS files can reduce network payload sizes. [Learn how to minify CSS](https://developer.chrome.com/docs/lighthouse/performance/unminified-css/).

### 62. LH desktop: Minify JavaScript (Est savings of 5 KiB)

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier8.lh-opportunity.unminified-javascript-desktop`

**Detail**

Minifying JavaScript files can reduce payload sizes and script parse time. [Learn how to minify JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unminified-javascript/).

### 63. LH desktop: Reduce unused CSS (Est savings of 14 KiB)

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier8.lh-opportunity.unused-css-rules-desktop`

**Detail**

Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).

### 64. LH desktop: Reduce unused JavaScript (Est savings of 211 KiB)

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier8.lh-opportunity.unused-javascript-desktop`

**Detail**

Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).

### 65. LH desktop: Serve images in next-gen formats (Est savings of 802 KiB)

- **Severity:** P3
- **Page URL:** https://www.thealchemy.nyc/
- **Rule:** `tier8.lh-opportunity.modern-image-formats-desktop`

**Detail**

Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).

---

## Findings by Page

Grouped by URL — useful when working through the site one page at a time.

### https://www.thealchemy.nyc/
_43 findings on this page_

- **[P1] 2 mixed-content references (http://)** 🔴 DO FIRST
  Your website is served over HTTPS (secure), but it contains links to HTTP resources (non-secure). Modern browsers will either block these resources or show a security warning to visitors, which erodes
- **[P1] A11y: ARIA dialog and alertdialog nodes should have an accessible name** 🔴 DO FIRST
  Your age-verification popup (the modal dialog that appears when visitors enter the site) is missing a label that screen readers can read aloud. Screen reader users — including blind and low-vision cus
- **[P1] A11y: Required ARIA attributes must be provided** 🔴 DO FIRST
  A heading element on your site is missing a required ARIA attribute called 'aria-level,' which tells screen readers (software that reads web pages aloud for blind and low-vision users) what level of h
- **[P1] A11y: Certain ARIA roles must contain particular children** 🔴 DO FIRST
  Your product carousel (the sliding list showing items) has an ARIA role of "list" but contains child elements with role="group" instead of the required role="listitem". ARIA roles are invisible labels
- **[P1] A11y: ARIA roles used must conform to valid values** 🔴 DO FIRST
  Your site has a div element with role="page wrap" — but ARIA (Accessible Rich Internet Applications) only allows single, valid role names. "page wrap" is two words and isn't a recognized role. Screen 
- **[P1] A11y: Elements must meet minimum color contrast ratio thresholds** 🔴 DO FIRST
  A label on your product carousel ('Active') uses white text on a bright green background with insufficient contrast. The colors blend together, making the text hard to read for anyone with color visio
- **[P1] A11y: Links must have discernible text (×2)** 🔴 DO FIRST
  Your website has two links that screen reader users cannot identify. One is a social media icon link (Instagram) in the footer, and the other is your logo link at the bottom of the page. Both links ex
- **[P1] Journey failed: default: homepage → age gate → menu visible** 🔴 DO FIRST
  Your site is failing to complete the critical customer journey of viewing your menu after passing the age gate. The audit detected three errors: a missing resource (404), a rate-limit response (429), 
- **[P2] Missing canonical** 🟠 HIGH
  Your homepage doesn't include a canonical tag—a small piece of code that tells search engines which version of a page is the 'official' one. Without it, search engines might index duplicate or similar
- **[P2] 11 image(s) missing alt text** 🟠 HIGH
  Your homepage has 11 images without alt text — descriptive labels that screen readers use to tell visually impaired visitors what an image shows. Search engines also use alt text to understand and ind
- **[P2] 1 broken internal link(s)** 
- **[P2] Layout shift (mobile): 0.164** 
- **[P2] Layout shift (desktop): 0.107** 
- **[P2] Missing core schema types: Organization, LocalBusiness, WebSite** 
- **[P2] Missing security header: x-frame-options** 
- **[P2] Missing security header: content-security-policy** 
- **[P2] No DMARC policy published** 
- **[P2] 13 tap targets under 44px at mobile-320** 
- **[P2] 13 tap targets under 44px at mobile-375** 
- **[P2] 13 tap targets under 44px at mobile-414** 
- **[P2] 12 tap targets under 44px at tablet-768** 
- **[P2] Lighthouse a11y (desktop): 74/100** 
- **[P2] Lighthouse bestPractices (desktop): 74/100** 
- **[P2] A11y: Landmarks should have a unique role or role/label/title (i.e. accessible name) combination** 
- **[P3] Heavy JS payload (mobile): 843KB** 
- **[P3] Heavy page weight (mobile): 3362KB** 
- **[P3] Heavy JS payload (desktop): 841KB** 
- **[P3] Heavy page weight (desktop): 3325KB** 
- **[P3] Missing security header: x-content-type-options** 
- **[P3] Missing security header: referrer-policy** 
- **[P3] Missing security header: permissions-policy** 
- **[P3] SSL Labs grade: unknown** 
- **[P3] DNSSEC not enabled** 
- **[P3] No CAA DNS records** 
- **[P3] Visual change detected at tablet-768** 
- **[P3] Visual change detected at desktop-1440** 
- **[P3] Lighthouse mobile audit failed to run** 
- **[P3] Lighthouse seo (desktop): 92/100** 
- **[P3] LH desktop: Minify CSS (Est savings of 4 KiB)** 
- **[P3] LH desktop: Minify JavaScript (Est savings of 5 KiB)** 
- **[P3] LH desktop: Reduce unused CSS (Est savings of 14 KiB)** 
- **[P3] LH desktop: Reduce unused JavaScript (Est savings of 211 KiB)** 
- **[P3] LH desktop: Serve images in next-gen formats (Est savings of 802 KiB)** 

### https://www.thealchemy.nyc/blog
_7 findings on this page_

- **[P2] Missing meta description** 🟠 HIGH
  The /blog page is missing a meta description—the 155-character summary that appears under your page title in Google search results. Without it, Google generates a guess from your page content, which o
- **[P2] Missing canonical** 🟡 MEDIUM
  Your blog page doesn't have a canonical tag—a line of code that tells search engines which version of a page is the 'official' one. Without it, Google may get confused if the same content appears unde
- **[P2] No JSON-LD schema** 🟡 MEDIUM
  Your blog page doesn't include JSON-LD structured data — machine-readable code that tells search engines what your content is about. Without it, Google can't reliably understand whether a blog post is
- **[P2] 7 image(s) missing alt text** 🟠 HIGH
  Your blog page has 7 images without alternative text descriptions. Alt text is the hidden label that describes what an image shows — search engines read it to understand your content, and screen reade
- **[P3] Title length 4 chars** 
- **[P3] Missing OpenGraph metadata** 
- **[P3] Missing Twitter card** 

### https://www.thealchemy.nyc/promo-products/fernway-ritual
_7 findings on this page_

- **[P2] Missing meta description** 
- **[P2] Missing canonical** 
- **[P2] No JSON-LD schema** 
- **[P2] 7 image(s) missing alt text** 
- **[P3] Title length 11 chars** 
- **[P3] Missing OpenGraph metadata** 
- **[P3] Missing Twitter card** 

### https://www.thealchemy.nyc/promo-products-flatiron/fernway-ritual
_7 findings on this page_

- **[P2] Missing meta description** 
- **[P2] Missing canonical** 
- **[P2] No JSON-LD schema** 
- **[P2] 6 image(s) missing alt text** 
- **[P3] Title length 11 chars** 
- **[P3] Missing OpenGraph metadata** 
- **[P3] Missing Twitter card** 

### https://www.thealchemy.nyc/qr
_5 findings on this page_

- **[P2] Missing canonical** 🟡 MEDIUM
  Your /qr page is missing a canonical tag — a line of code that tells search engines which version of a page is the 'official' one. Without it, Google may index duplicate or near-duplicate versions of 
- **[P2] No JSON-LD schema** 🟠 HIGH
  Your website is missing JSON-LD structured data—machine-readable code that tells Google what your pages are about. Without it, search engines can't understand your products, business hours, location, 
- **[P3] Title length 2 chars** 
- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://www.thealchemy.nyc/current-specials
_5 findings on this page_

- **[P2] Missing canonical** 🟠 HIGH
  Your /current-specials page doesn't include a canonical tag — a line of code that tells search engines which version of a page is the 'official' one. Without it, search engines may get confused if the
- **[P2] No JSON-LD schema** 🟠 HIGH
  Your website doesn't have structured data—machine-readable code that tells search engines what your pages are about. For a dispensary, this means Google can't automatically understand your product lis
- **[P3] Title length 16 chars** 
- **[P3] Missing OpenGraph metadata** 
- **[P3] 3 image(s) missing alt text** 

### https://www.thealchemy.nyc/promotions
_5 findings on this page_

- **[P2] Missing canonical** 🟠 HIGH
  Your /promotions page doesn't tell search engines which version is the 'official' one. Without a canonical tag, Google may get confused if the same content appears under multiple URLs (like with/witho
- **[P2] No JSON-LD schema** 🟠 HIGH
  Your promotions page doesn't include structured data — a block of code that tells search engines what your page is about in a machine-readable format. Without it, Google can't easily understand that y
- **[P3] Title length 10 chars** 
- **[P3] Description length 180 chars** 
- **[P3] 2 image(s) missing alt text** 

### https://www.thealchemy.nyc/flatiron/about-us-flatiron
_5 findings on this page_

- **[P2] Missing canonical** 🟠 HIGH
  This page is missing a canonical tag — a line of code that tells search engines which version of a page is the 'official' one. Without it, search engines may not know if this page should rank, or may 
- **[P2] No JSON-LD schema** 
- **[P3] Title length 19 chars** 
- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://www.thealchemy.nyc/flatiron/shop-flatiron
_5 findings on this page_

- **[P2] Missing canonical** 🟠 HIGH
  Your product page at /flatiron/shop-flatiron doesn't include a canonical tag—an HTML instruction that tells search engines which version of a page is the 'official' one. Without it, Google may treat d
- **[P2] No JSON-LD schema** 🟠 HIGH
  Your product pages (like the Flatiron shop) don't include structured data—machine-readable code that tells Google, Apple Maps, and other services what your page is about. Without it, search engines ha
- **[P3] Title length 15 chars** 
- **[P3] Missing OpenGraph metadata** 
- **[P3] 4 image(s) missing alt text** 

### https://www.thealchemy.nyc/about-us
_4 findings on this page_

- **[P2] Missing canonical** 🟠 HIGH
  Your About Us page doesn't have a canonical tag — a line of code that tells search engines which version of a page is the 'official' one. Without it, Google may treat similar or duplicate content as s
- **[P2] No JSON-LD schema** 🟠 HIGH
  Your website doesn't include JSON-LD structured data — machine-readable code that tells search engines what your business is, where it's located, and what you sell. Without it, Google has to guess at 
- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://www.thealchemy.nyc/contact-us
_4 findings on this page_

- **[P2] Missing canonical** 🟠 HIGH
  Your contact page doesn't tell search engines which version of the URL is the official one. If the same page is accessible via multiple URLs (like with or without a trailing slash, or through differen
- **[P2] No JSON-LD schema** 🟡 MEDIUM
  Your contact page doesn't include structured data—machine-readable information that tells Google what your business is, where it's located, and how to reach you. This means search engines have to gues
- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://www.thealchemy.nyc/terms-conditions
_4 findings on this page_

- **[P2] Missing canonical** 🟡 MEDIUM
  Your Terms & Conditions page doesn't declare a canonical URL—a single, definitive web address that tells search engines 'this is the official version of this page.' Without it, search engines may get 
- **[P2] No JSON-LD schema** 🟡 MEDIUM
  Your Terms & Conditions page doesn't include JSON-LD structured data—a machine-readable format that tells Google what type of content it is. For a legal/policy page, this means search engines can't au
- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://www.thealchemy.nyc/privacy-policy
_4 findings on this page_

- **[P2] Missing canonical** 🟡 MEDIUM
  Your privacy policy page doesn't tell search engines which version of this page is the 'official' one. Without a canonical tag, Google may treat duplicate or similar versions as separate pages, diluti
- **[P2] No JSON-LD schema** 🟠 HIGH
  Your privacy policy page (and likely many others) lacks JSON-LD structured data — code that tells search engines what type of content is on the page. Without it, Google can't confidently categorize yo
- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://www.thealchemy.nyc/shop
_4 findings on this page_

- **[P2] Missing canonical** 🟠 HIGH
  Your shop page doesn't tell search engines which version of the URL is the 'official' one. Without a canonical tag, Google may index duplicate versions (like /shop vs /shop/ or www vs non-www), splitt
- **[P2] No JSON-LD schema** 🟠 HIGH
  Your shop page doesn't include JSON-LD structured data — a standardized code format that tells search engines exactly what your content is (e.g., product names, prices, ratings). Without it, Google ha
- **[P3] Missing OpenGraph metadata** 
- **[P3] 4 image(s) missing alt text** 

### https://www.thealchemy.nyc/flatiron/current-specials-flatiron
_4 findings on this page_

- **[P2] Missing canonical** 🟠 HIGH
  This page doesn't have a canonical tag — a line of code that tells search engines which version of a page is the 'main' one. Without it, Google may get confused if the same content appears at multiple
- **[P2] No JSON-LD schema** 🟠 HIGH
  Your product pages don't include JSON-LD structured data—invisible code that tells Google what your products are, their prices, and availability. Without it, search engines guess at your content inste
- **[P3] Missing OpenGraph metadata** 
- **[P3] 3 image(s) missing alt text** 

### https://www.thealchemy.nyc/flatiron/promotions-flatiron
_4 findings on this page_

- **[P2] Missing canonical** 
- **[P2] No JSON-LD schema** 🟠 HIGH
  Your promotions page doesn't include JSON-LD structured data — a machine-readable format that tells Google what content is on the page (e.g., 'this is a promotion with a discount code and expiration d
- **[P3] Description length 180 chars** 
- **[P3] 2 image(s) missing alt text** 

### https://www.thealchemy.nyc/flatiron/contact-us-flatiron
_4 findings on this page_

- **[P2] Missing canonical** 
- **[P2] No JSON-LD schema** 🟠 HIGH
  Your website doesn't include JSON-LD structured data — machine-readable code that tells Google what your pages are about. For a cannabis retailer, this means search engines can't automatically underst
- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://www.thealchemy.nyc/flatiron/terms-conditions-flatiron
_4 findings on this page_

- **[P2] Missing canonical** 🟠 HIGH
  This page lacks a canonical tag—an HTML instruction that tells search engines which version of a page is the 'official' one. Without it, search engines may not know whether to rank this URL or a simil
- **[P2] No JSON-LD schema** 🟡 MEDIUM
  Your Terms & Conditions page doesn't include JSON-LD structured data — a standardized code block that tells search engines what type of content lives on the page. For a legal/compliance page, this is 
- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://www.thealchemy.nyc/flatiron/privacy-policy-flatiron
_4 findings on this page_

- **[P2] Missing canonical** 🟡 MEDIUM
  This page doesn't tell search engines which version of the content is the 'official' one. If the same privacy policy appears under multiple URLs (e.g., /flatiron/privacy-policy-flatiron and /privacy-p
- **[P2] No JSON-LD schema** 🟠 HIGH
  Your website is missing JSON-LD structured data — machine-readable code that tells search engines what your pages are about. For a cannabis retailer, this means Google can't easily understand your sto
- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://www.thealchemy.nyc/flatiron/the-alchemy-flatiron
_3 findings on this page_

- **[P2] Missing canonical** 🟠 HIGH
  Your product page doesn't declare a preferred version of itself to search engines. Without a canonical tag (a single HTML line that says 'this is the official version'), Google may index duplicate or 
- **[P2] 8 image(s) missing alt text** 🟠 HIGH
  Your website has 8 images without alt text (descriptive text read aloud by screen readers and used by search engines to understand images). These images appear on your Flatiron location page. Without 
- **[P3] Missing Twitter card** 

### https://www.thealchemy.nyc/post/cannabis-for-seniors-in-nyc-a-guide-to-wellness-sleep-and-pain-relief
_3 findings on this page_

- **[P2] Missing canonical** 🟠 HIGH
  This page doesn't tell search engines which version of the content is the official one. If the same article appears on multiple URLs (e.g., with tracking parameters, different category paths, or inter
- **[P2] No JSON-LD schema** 
- **[P2] 6 image(s) missing alt text** 🟠 HIGH
  Your blog post about cannabis for seniors has 6 images without alt text — descriptive text that describes what each image shows. Search engines and assistive technology (screen readers used by blind/l

### https://www.thealchemy.nyc/post/cannabis-for-stress-anxiety-sleep
_3 findings on this page_

- **[P2] Missing canonical** 
- **[P2] No JSON-LD schema** 🟠 HIGH
  Your blog post page doesn't include JSON-LD structured data — machine-readable code that tells Google what the page is about (e.g., 'this is an article about cannabis for stress'). Without it, search 
- **[P2] 6 image(s) missing alt text** 🟠 HIGH
  Six images on your blog post page lack alt text — descriptive labels that screen readers read aloud to visually impaired visitors, and that search engines use to understand image content. This blocks 

### https://www.thealchemy.nyc/post/cannabis-storage-best-practices-to-keep-your-stash-fresh
_3 findings on this page_

- **[P2] Missing canonical** 
- **[P2] No JSON-LD schema** 🟡 MEDIUM
  Your blog post about cannabis storage has no structured data markup — essentially, search engines can't automatically understand what type of content this is or who published it. This makes it harder 
- **[P2] 6 image(s) missing alt text** 

### https://www.thealchemy.nyc/post/celebrate-the-grand-opening-of-the-alchemy-7-days-of-activations-experiences-elevated-nyc-vibes
_3 findings on this page_

- **[P2] Missing canonical** 
- **[P2] No JSON-LD schema** 🟡 MEDIUM
  Your blog post about the grand opening has no JSON-LD schema—structured data that tells Google what the page is about (e.g., an event, article, or product). Without it, search engines have to guess th
- **[P2] 6 image(s) missing alt text** 

### https://www.thealchemy.nyc/post/dry-january-reimagined-the-alchemy-of-cali-sober-rituals
_3 findings on this page_

- **[P2] Missing canonical** 
- **[P2] No JSON-LD schema** 🟡 MEDIUM
  Your blog post about Dry January lacks structured data markup — a machine-readable format that tells search engines what your content is about. Without it, Google can't confidently categorize your pos
- **[P2] 6 image(s) missing alt text** 🟠 HIGH
  Six images on your Dry January blog post lack alt text—descriptive labels that screen readers use to describe images to visually impaired visitors, and that search engines use to understand image cont

### https://www.thealchemy.nyc/post/how-the-alchemy-is-transforming-the-ny-dispensary-experience
_3 findings on this page_

- **[P2] Missing canonical** 🟠 HIGH
  Your blog post page doesn't tell search engines which version is the 'official' one to rank. This matters when the same content is accessible via multiple URLs (with or without www, with or without tr
- **[P2] No JSON-LD schema** 🟠 HIGH
  Your website isn't using structured data (JSON-LD)—a standardized format that tells search engines like Google exactly what your pages are about. Without it, Google has to guess whether a page is a pr
- **[P2] 6 image(s) missing alt text** 🟠 HIGH
  Six images on your blog post lack alt text — descriptive labels that tell search engines and visitors using screen readers what each image shows. This hurts both accessibility (people using assistive 

### https://www.thealchemy.nyc/post/how-to-choose-the-right-cannabis-dispensary-in-nyc
_3 findings on this page_

- **[P2] Missing canonical** 
- **[P2] No JSON-LD schema** 🟠 HIGH
  Your blog post about choosing a cannabis dispensary in NYC is missing structured data—invisible code that tells Google what the page is about (e.g., article type, author, publish date). Without it, se
- **[P2] 6 image(s) missing alt text** 🟠 HIGH
  Six images on your blog post lack alt text—descriptions that screen readers use to tell visually-impaired visitors what an image shows. These same descriptions help Google understand your images, whic

### https://www.thealchemy.nyc/post/new-year-new-rituals-how-cannabis-can-elevate-your-wellness-routine
_3 findings on this page_

- **[P2] Missing canonical** 🟠 HIGH
  Your blog post page doesn't have a canonical tag — a line of code that tells search engines which version of a page is the 'official' one. Without it, Google may not know whether to rank this post, a 
- **[P2] No JSON-LD schema** 
- **[P2] 6 image(s) missing alt text** 🟠 HIGH
  Six images on your wellness blog post are missing alternative text (alt text) — a brief description that screen readers use to convey what the image shows to visually impaired visitors. Without it, th

### https://www.thealchemy.nyc/post/ritual-boxes-by-the-alchemy
_3 findings on this page_

- **[P2] Missing canonical** 🟠 HIGH
  This page lacks a canonical tag — a line of code that tells search engines which version of a page is the official one. Without it, search engines may get confused if the same content appears at multi
- **[P2] No JSON-LD schema** 🟡 MEDIUM
  Your website is missing JSON-LD structured data — machine-readable code that tells Google, Bing, and other search engines what your content is about. Think of it like a label on a product: you can see
- **[P2] 7 image(s) missing alt text** 

### https://www.thealchemy.nyc/post/what-is-croptober-and-what-does-it-mean-for-consumers
_3 findings on this page_

- **[P2] Missing canonical** 
- **[P2] No JSON-LD schema** 
- **[P2] 5 image(s) missing alt text** 

### https://www.thealchemy.nyc/post/your-nyc-cannabis-guide-best-strains-and-products-for-every-occasion
_3 findings on this page_

- **[P2] Missing canonical** 
- **[P2] No JSON-LD schema** 
- **[P2] 6 image(s) missing alt text** 

### https://www.thealchemy.nyc
_2 findings on this page_

- **[P2] Missing canonical** 🟠 HIGH
  Your homepage doesn't include a canonical tag—a line of code that tells search engines which version of a page is the official one. Without it, search engines may not know whether to prioritize www.th
- **[P2] 11 image(s) missing alt text** 🟠 HIGH
  Your site has 11 images without alt text — descriptions that screen readers use to understand images, and that search engines use to index image content. This means visually impaired visitors and sear

### https://www.thealchemy.nyc/sitemap.xml
_1 finding on this page_

- **[P3] Sitemap lastmod dates are stale** 


---

_Generated by Apex Sentinel Monthly Audit · 2026-04-19T06:30:50.557Z · Powered by Bud Authority._