# Apex Sentinel — Cottonmouth (WP) Monthly Audit

**URL:** https://getcottonmouth.com/
**Platform:** wordpress
**Archetype:** fun
**Run ID:** 2026-04-19T06-18-18-831Z
**Scanned:** 2026-04-19T06:18:19.213Z
**Duration:** 976s

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:** **F**

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

---

## Top 10 Actions (Ranked)

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

1. **[P0] 🔴 DO FIRST Sensitive artifact exposed: /wp-login.php** — _An exposed login page increases the risk of account takeover, which could lead to your site being defaced, customers' data compromised, or malware injected—directly threatening customer trust and legal compliance in the cannabis industry._
   Page: https://getcottonmouth.com/wp-login.php
   Effort: Quick win (< 30 min)
2. **[P1] 🔴 DO FIRST A11y: Inline text spacing must be adjustable with custom stylesheets (×4)** — _Visitors relying on assistive technology may abandon your site, and you're exposed to accessibility lawsuits; moreover, search engines penalize serious WCAG violations in rankings._
   Page: https://getcottonmouth.com/
   Effort: Moderate (1-3 hours)
3. **[P1] 🔴 DO FIRST A11y: Elements must meet minimum color contrast ratio thresholds (×3)** — _Customers unable to read your contact information cannot reach you; this also exposes you to ADA compliance risk and makes your site inaccessible to roughly 1 in 4 adults with some form of visual impairment._
   Page: https://getcottonmouth.com/
   Effort: Quick win (< 30 min)
4. **[P1] 🔴 DO FIRST A11y: Links must have discernible text (×2)** — _You're excluding disabled customers from accessing your social media, risking legal exposure under the ADA, and damaging brand trust with an important audience segment._
   Page: https://getcottonmouth.com/
   Effort: Quick win (< 30 min)
5. **[P1] ⚪ LOW 2 mixed-content references (http://)** — _Customers may see security warnings or broken elements, reducing confidence in your dispensary's site professionalism and data safety during checkout or age verification._
   Page: https://getcottonmouth.com/
   Effort: Quick win (< 30 min)
6. **[P1] A11y: Frames must have an accessible name**
   Page: https://getcottonmouth.com/
7. **[P2] 🟠 HIGH 7 image(s) missing alt text** — _Missing alt text reduces your blog's search ranking for cannabis-related keywords, limits reach to customers using assistive technology, and creates potential legal exposure under accessibility regulations like the ADA._
   Page: https://getcottonmouth.com/2024/02/lets-be-clear-medical-vs-recreational-cannabis/
   Effort: Quick win (< 30 min)
8. **[P2] 🟠 HIGH 9 image(s) missing alt text** — _Missing alt text reduces search visibility for image-driven content, limits reach to assistive-technology users, and may expose you to ADA compliance risk if a visitor using a screen reader files a complaint._
   Page: https://getcottonmouth.com/2024/02/embracing-transparency-the-power-of-phytofacts-reports/
   Effort: Moderate (1-3 hours)
9. **[P2] 🟠 HIGH 7 image(s) missing alt text** — _Missing alt text reduces your article's SEO ranking potential, locks out customers using screen readers or with images disabled, and signals poor site quality to search engines._
   Page: https://getcottonmouth.com/2024/02/lets-be-clear-botanical-vs-cannabis-derived-terpenes/
   Effort: Quick win (< 30 min)
10. **[P2] 🟠 HIGH 7 image(s) missing alt text** — _You're losing search visibility for image-based queries (e.g., 'cannabis terpene charts') and excluding customers who use accessibility tools — a legal and ethical gap for a retail site._
   Page: https://getcottonmouth.com/2024/02/beyond-thc-the-intriguing-world-of-cannabis-terpenes/
   Effort: Moderate (1-3 hours)

---

## Findings by Severity

### P0 — 1 finding

### 1. Sensitive artifact exposed: /wp-login.php

- **Severity:** P0   |   **Priority:** 🔴 DO FIRST
- **Effort:** Quick win (< 30 min)
- **Business category:** security
- **Page URL:** https://getcottonmouth.com/wp-login.php
- **Rule:** `tier5.exposed.artifact`

**What it means (plain English)**

Your WordPress admin login page (/wp-login.php) is publicly accessible and returns a successful response. This is a standard WordPress file, but leaving it exposed and unprotected makes it easier for attackers to attempt break-ins. While WordPress login pages are expected to exist, best practice is to either hide this path from direct access or require additional security layers like IP whitelisting or a Web Application Firewall.

**Why it matters for your business:** An exposed login page increases the risk of account takeover, which could lead to your site being defaced, customers' data compromised, or malware injected—directly threatening customer trust and legal compliance in the cannabis industry.

**Technical root cause:** WordPress installs with /wp-login.php enabled by default. No firewall rule or .htaccess restriction is currently blocking public access to this endpoint.

**Recommended fix — step by step**

1. Install the free 'Wordfence Security' plugin (Plugins → Add New → search 'Wordfence' → Install & Activate)
2. In Wordfence settings (left sidebar → Wordfence → Login Security), enable 'Wordfence Login Page' to move login to a hidden URL like /unique-login-path-12345
3. Enable 'Two-factor authentication' in the same section for all admin accounts
4. Alternatively, if using a managed WordPress host (GoDaddy, Kinsta, WP Engine), check their security settings for built-in login protection or IP whitelisting options
5. Test by visiting https://getcottonmouth.com/wp-login.php in an incognito window—it should redirect or show a 404

---

### P1 — 5 findings

### 1. A11y: Inline text spacing must be adjustable with custom stylesheets (×4)

- **Severity:** P1   |   **Priority:** 🔴 DO FIRST
- **Effort:** Moderate (1-3 hours)
- **Business category:** compliance
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier9.a11y.avoid-inline-spacing`

**What it means (plain English)**

Your age-gate pop-up and text elements use inline CSS (style="...") to set letter-spacing, which overrides user accessibility preferences. People with dyslexia or low vision often customize text spacing in their browser to read more easily—your inline styles block that. WCAG 1.4.12 requires that text spacing adjustments work without breaking the layout.

**Why it matters for your business:** Visitors relying on assistive technology may abandon your site, and you're exposed to accessibility lawsuits; moreover, search engines penalize serious WCAG violations in rankings.

**Technical root cause:** The age-gate buttons (#AVyes, #AVno) and text container (#AVtextA) have letter-spacing hardcoded in style attributes (0.06em, 0em) instead of in a separate CSS class, preventing user stylesheets from overriding them.

**Recommended fix — step by step**

1. Log into WordPress admin → Appearance → Custom CSS (or use a child theme if you have one).
2. Create three new CSS classes: .av-text-container { /* no letter-spacing or use 0.12em */ }, .av-button { letter-spacing: 0.12em; }.
3. Open your page builder (likely Elementor, Divi, or the block editor) and find the age-gate pop-up component; remove style="letter-spacing: 0em" from #AVtextA and apply class="av-text-container" instead.
4. Do the same for #AVyes and #AVno buttons: remove inline style attributes and apply class="av-button".
5. If the pop-up is hardcoded in a plugin or theme file, ask your hosting provider for FTP access or use a code-snippets plugin (Code Snippets by Code Snippets Pro) to inject CSS overrides with !important flags only as a last resort.
6. Test with a browser extension like WAVE (WebAIM) or axe DevTools to confirm the violation is resolved.
7. Retest on multiple devices and screen readers (NVDA, JAWS if possible) to ensure letter-spacing customization works.

### 2. A11y: Elements must meet minimum color contrast ratio thresholds (×3)

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

**What it means (plain English)**

Three text elements on your homepage use a dark green color (#018242) on a dark gray background (#222222), creating a contrast ratio of only 3.23:1. WCAG accessibility standards require at least 4.5:1 contrast for readable text. This means visitors with low vision or color blindness will struggle to read your phone number, email, and "Headquartered" label.

**Why it matters for your business:** Customers unable to read your contact information cannot reach you; this also exposes you to ADA compliance risk and makes your site inaccessible to roughly 1 in 4 adults with some form of visual impairment.

**Technical root cause:** The green brand color was applied directly to text without checking contrast against the dark background. The Elementor page builder (used to build this section) allows color customization without automatic accessibility validation.

**Recommended fix — step by step**

1. Log into WordPress admin → Pages → Home (or whichever page contains these elements)
2. Click 'Edit with Elementor' to open the page builder
3. Select the phone number link element (Phone text box) → go to Style tab → Text Color
4. Change the foreground color from #018242 to a lighter green (try #00D084 or #00E89E) or switch to white (#FFFFFF) if the green is a brand requirement
5. Repeat for the Email link and the 'HEADQUARTERED' span with the same updated color
6. Use a free contrast checker (WebAIM Contrast Checker: https://webaim.org/resources/contrastchecker/) to verify each element now shows at least 4.5:1 ratio
7. Click Publish and test on a real device to visually confirm readability

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

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

**What it means (plain English)**

Your site has two social media icon links (Instagram and another platform) that don't have readable labels. Screen readers—software that reads web pages aloud for blind and low-vision users—can't tell visitors what these links do. This violates accessibility law (WCAG 2.1 Level A) and blocks customers who rely on assistive technology.

**Why it matters for your business:** You're excluding disabled customers from accessing your social media, risking legal exposure under the ADA, and damaging brand trust with an important audience segment.

**Technical root cause:** Elementor's social icon widget is rendering icon-only links without aria-label attributes or text alternatives. The links contain only icon elements with no accessible name property for screen readers.

**Recommended fix — step by step**

1. Log into WordPress admin → Pages/Home → Edit with Elementor
2. Find the social icons widget (visible in the evidence selectors as 'social-icons-wrapper')
3. Click the social icons widget to select it
4. In the left panel, look for 'Social Icons' settings
5. For each social icon (Instagram, etc.), click the icon and check if there's an 'Accessibility' or 'Label' field—if yes, enter the platform name (e.g., 'Follow us on Instagram')
6. If no label field exists in Elementor's UI, click the HTML/Advanced tab and add aria-label="Follow us on Instagram" directly to each <a> tag
7. Publish and test using a free tool like WAVE (wave.webaim.org) or axe DevTools browser extension to confirm the labels are readable

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

- **Severity:** P1   |   **Priority:** ⚪ LOW
- **Effort:** Quick win (< 30 min)
- **Business category:** polish
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier5.mixed-content`

**What it means (plain English)**

Your website is served over HTTPS (secure), but two resources are being referenced using HTTP (insecure). Modern browsers will block these resources or show warnings, degrading user trust and potentially breaking functionality. This is a false positive in this case: the 'evidence' shows email addresses (info@getcottonmouth.com) being parsed as http:// links, which browsers reject by design — not actual HTTP resource references.

**Why it matters for your business:** Customers may see security warnings or broken elements, reducing confidence in your dispensary's site professionalism and data safety during checkout or age verification.

**Technical root cause:** A scanner misidentified email addresses formatted as mailto: links (or plain text emails) as HTTP resource references. The actual issue, if present, would be image/script/stylesheet URLs using http:// instead of https://, but the evidence suggests this is a false positive.

**Recommended fix — step by step**

1. Run a manual HTTPS audit: use Chrome DevTools (press F12 → Console tab) on https://getcottonmouth.com/ and check for any red 'Mixed Content' warnings.
2. If no warnings appear in DevTools, this finding is a false positive; document and close it.
3. If warnings DO appear, identify the specific resource URLs in the Console and note their paths (e.g., 'http://cdn.example.com/image.jpg').
4. In WordPress Admin → Customize → Additional CSS or via a search-replace tool (SearchRegex plugin), replace any http:// URLs with https:// for images, scripts, stylesheets.
5. Test again in DevTools to confirm no Mixed Content warnings remain.

### 5. A11y: Frames must have an accessible name

- **Severity:** P1
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier9.a11y.frame-title`

**Detail**

Ensure <iframe> and <frame> elements have an accessible name
Impact: serious
WCAG: wcag2a, wcag412
Learn more: https://dequeuniversity.com/rules/axe/4.11/frame-title?application=playwright

---

### P2 — 35 findings

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

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/2024/02/lets-be-clear-medical-vs-recreational-cannabis/
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Seven images on your blog post about medical vs. recreational cannabis are missing alt text—short descriptions that tell screen readers and search engines what each image shows. This blocks visually impaired visitors from understanding your content and signals to Google that your page is incomplete.

**Why it matters for your business:** Missing alt text reduces your blog's search ranking for cannabis-related keywords, limits reach to customers using assistive technology, and creates potential legal exposure under accessibility regulations like the ADA.

**Technical root cause:** Images were uploaded to WordPress without filling in the Alt Text field during insertion, or the field was left blank in the Media Library.

**Recommended fix — step by step**

1. Log in to WordPress → Posts → Edit 'Let's Be Clear: Medical vs. Recreational Cannabis'
2. Scan the post content for all images; for each one, click the image → Edit → Alt Text field
3. Write a concise, descriptive alt text (10–15 words) for each image—e.g., 'Medical cannabis leaf with prescription bottle' or 'Recreational cannabis product display on shelf'
4. Repeat for all 7 images and click Update
5. Use a free accessibility checker (WAVE Browser Extension or Axe DevTools) to verify all images now have alt text
6. Optional: Use Yoast SEO plugin (if installed) → Readability tab → it will flag missing alt text on future posts

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

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/2024/02/embracing-transparency-the-power-of-phytofacts-reports/
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

All 9 images on this blog post are missing alt text — descriptive labels that screen readers use to tell blind/low-vision visitors what an image shows, and that search engines use to understand your content. This hurts both accessibility (you're excluding users) and SEO (Google can't index the images or their context).

**Why it matters for your business:** Missing alt text reduces search visibility for image-driven content, limits reach to assistive-technology users, and may expose you to ADA compliance risk if a visitor using a screen reader files a complaint.

**Technical root cause:** Images were likely uploaded and inserted into the post without filling in the Alt Text field in WordPress's image uploader or the block editor.

**Recommended fix — step by step**

1. Log in to WordPress and navigate to Posts → Edit the 'Embracing Transparency' post.
2. In the editor, click on the first image to select it.
3. In the right-hand panel (or sidebar), look for the 'Alt text' field under the image settings.
4. Write a concise, descriptive alt text (8–15 words) for each image—e.g., 'Lab technician holding cannabis sample vial with test results printout' instead of 'image123'.
5. Repeat for all 9 images in the post.
6. After completing all alt text, click 'Update' to save the post.
7. Optional but recommended: Install the free plugin 'WP Accessibility' or 'Alt Text Generator' (via Plugins → Add New) to catch missing alt text on future posts before publishing.

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

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/2024/02/lets-be-clear-botanical-vs-cannabis-derived-terpenes/
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Seven images on your terpenes article have no alt text—descriptive text that screen readers announce to visually-impaired visitors and that search engines use to understand image content. This blocks both accessibility and SEO benefit from those images.

**Why it matters for your business:** Missing alt text reduces your article's SEO ranking potential, locks out customers using screen readers or with images disabled, and signals poor site quality to search engines.

**Technical root cause:** Images were uploaded to WordPress without filling the Alt Text field in the media uploader or post editor.

**Recommended fix — step by step**

1. Open WordPress Admin → Posts → 'Let's Be Clear: Botanical vs Cannabis-Derived Terpenes'
2. In the post editor, click each image to open its sidebar panel
3. In the Alt Text field, write a short, descriptive phrase (e.g., 'Close-up of cannabis flower showing terpene crystals' or 'Molecular structure diagram of limonene terpene') — aim for 5–10 words per image
4. Do not duplicate the image filename or caption; alt text should describe *what the image shows*, not the file name
5. Save the post and verify in a front-end browser that the alt text appears in the image's HTML (right-click image → Inspect)
6. Repeat for all 7 images on this article

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

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/2024/02/beyond-thc-the-intriguing-world-of-cannabis-terpenes/
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Every image on your site is missing alt text — descriptive labels that explain what's in the picture. Screen readers (used by people with vision loss) can't describe the images without this, and search engines can't understand them either. This affects both accessibility and SEO rankings.

**Why it matters for your business:** You're losing search visibility for image-based queries (e.g., 'cannabis terpene charts') and excluding customers who use accessibility tools — a legal and ethical gap for a retail site.

**Technical root cause:** Images were inserted into WordPress posts without filling the 'Alt Text' field in the media library or image block settings. WordPress doesn't auto-generate alt text; it must be manually added.

**Recommended fix — step by step**

1. Go to WordPress Admin → Posts → find 'Beyond THC: The Intriguing World of Cannabis Terpenes' → click Edit
2. For each image in the post, click the image block → check the right sidebar under 'Image settings' → locate the 'Alt text' field
3. Write a concise, descriptive alt text (e.g., 'Chemical structure diagram of limonene terpene' or 'Close-up photo of cannabis flower buds') for each of the 7 images
4. Repeat this process for all other blog posts and pages with images — WordPress Admin → Media Library → click each image → add alt text in the 'Alternative Text' field
5. For future uploads: before inserting an image, add alt text immediately in the upload dialog or media block settings
6. Optional: install the Yoast SEO plugin (free version) → activate its image alt-text checker to get warnings on unpublished posts

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

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/2024/02/lets-be-clear-delta-8-thc-vs-delta-9-thc/
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Every image on your site is missing alt text — a brief description that screen readers read aloud to visually impaired visitors and that search engines use to understand image content. On this blog post about Delta-8 vs Delta-9 THC, all 7 images lack these descriptions. This blocks both accessibility and SEO benefit.

**Why it matters for your business:** You're losing search rankings for image-related queries (e.g., 'delta-8 vs delta-9 comparison chart') and excluding visually impaired customers who cannot understand what your product images show.

**Technical root cause:** Images were likely uploaded to WordPress without filling the 'Alt Text' field in the Media library or the block editor, or alt attributes are being stripped by a theme or plugin.

**Recommended fix — step by step**

1. Log into WordPress admin → Media Library → filter by 'Unattached' or visit the affected post
2. Open the blog post in the WordPress editor (edit page)
3. For each image, click it → open the 'Image' block settings panel on the right → find the 'Alt text' field
4. Write a 5–15 word description for each image (e.g., 'chemical structure comparison of delta-8 and delta-9 THC molecules')
5. Install the Yoast SEO plugin (free version) → activate → go to Tools → Image SEO → it will flag all missing alt text across your site
6. Use Yoast's bulk alt-text suggestions as a starting point, then refine for accuracy and keyword relevance
7. Publish changes and monitor Google Search Console → Image search coverage to confirm indexing

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

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

**What it means (plain English)**

Five images on your homepage don't have alt text—a short description that search engines and screen readers use to understand what the image shows. This means customers using assistive technology can't see what those images represent, and search engines can't index them properly, which limits your visibility.

**Why it matters for your business:** Missing alt text reduces your SEO ranking for image-based searches, locks out visually impaired customers, and may trigger compliance issues under accessibility laws that apply to retail sites.

**Technical root cause:** Images were likely uploaded to WordPress without filling in the Alt Text field during media insertion, or were added via HTML without an alt attribute.

**Recommended fix — step by step**

1. Log into WordPress admin → Media Library → identify which 5 images appear on the homepage (use the evidence count to narrow focus).
2. For each image, click Edit → scroll to Alt Text field → write a brief, descriptive phrase (e.g., 'Cannabis flower variety in glass jar' not just 'flower').
3. Alternatively, go to homepage edit screen → click each image → use the Image Block settings panel on the right → fill Alt Text field.
4. Test by disabling images in your browser (or use a screen reader like NVDA or JAWS) to confirm alt text reads aloud correctly.
5. Run the homepage through axe DevTools (free Chrome extension) to confirm the count drops to zero.

### 7. Missing meta description

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

**What it means (plain English)**

Your /test/ page doesn't have a meta description — that's the 150-160 character summary that appears below your page title in Google search results. Without it, search engines may auto-generate a snippet from your page content, which often looks unprofessional and doesn't persuade people to click through.

**Why it matters for your business:** Missing meta descriptions reduce click-through rates from search results, directly hurting traffic to that page and overall site visibility for potential customers searching for your products.

**Technical root cause:** The page was likely created without a meta description tag in the WordPress page editor, or a plugin that manages descriptions isn't enabled/configured for this page type.

**Recommended fix — step by step**

1. Log in to WordPress and navigate to Pages → All Pages, then find and edit the /test/ page.
2. Scroll down to the Yoast SEO (or All in One SEO) plugin box — if you don't see it, install Yoast SEO from Plugins → Add New.
3. In the Yoast SEO section, click the 'Edit snippet' button and enter a custom meta description (150–160 characters) that describes what visitors will find on that page.
4. Make sure the description includes a relevant keyword (e.g., 'cannabis products,' 'testing,' etc.) and a call-to-action if appropriate (e.g., 'Shop our tested products today').
5. Click 'Save draft' or 'Update' to apply the change.
6. Repeat this process for any other pages flagged in your audit that lack descriptions.

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

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

**What it means (plain English)**

Every image on your site should have alt text — a short text description that displays if an image fails to load, and that search engines and screen readers (used by people with vision disabilities) can read. All 16 images on your uncategorized category page are missing this description, which means assistive technology users can't understand what those images show, and search engines can't index their content.

**Why it matters for your business:** Missing alt text reduces your SEO ranking for image searches, locks out customers using screen readers, and creates legal liability under accessibility laws; it also suggests an unprofessional site to visitors.

**Technical root cause:** Images were likely uploaded and inserted into the page without filling in the alt text field in WordPress's media library, leaving the alt attribute empty or absent in the HTML.

**Recommended fix — step by step**

1. Log in to WordPress admin → Posts → Uncategorized (or the parent category page)
2. Open the page editor; identify the first image block
3. Click the image → in the right sidebar under 'Image Settings' or 'Alt Text', enter a brief description (5–10 words describing what the image shows, e.g., 'Cottonmouth cannabis edible gummies in fruity flavors')
4. Repeat for all 16 images on this page
5. For future uploads: go to Media Library → hover over an image → click 'Edit' → scroll to 'Alternative Text' field and fill it in before saving
6. Optional: install the plugin 'Image SEO' (free) to bulk-edit alt text and get reminders for missing descriptions

### 9. Missing meta description

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/product-category/tshirts/
- **Rule:** `tier2.meta.no-description`

**What it means (plain English)**

Your T-shirt category page is missing a meta description — the 160-character summary that appears below your page title in Google search results. Without it, Google generates one automatically, which is often choppy or irrelevant. This is a quick fix that improves how your product category looks to potential customers searching for apparel.

**Why it matters for your business:** Missing meta descriptions reduce click-through rate from search results; customers may skip your T-shirt category for competitors' listings that have clearer, more compelling descriptions.

**Technical root cause:** The WordPress page or product category does not have a custom meta description field filled in. WordPress does not auto-generate these, so search engines fall back to excerpting page content.

**Recommended fix — step by step**

1. Log in to WordPress admin → Products → Categories.
2. Click on the T-shirts category to edit it.
3. Scroll to the product category description area and look for a meta description field (usually provided by Yoast SEO or All in One SEO Pack if installed).
4. If no field exists, install Yoast SEO: Plugins → Add New → search 'Yoast SEO' → Install & Activate.
5. Return to Products → Categories → T-shirts and scroll to the Yoast SEO box at the bottom.
6. Write a meta description: include primary keyword ('cannabis apparel' or 't-shirts'), brand name, and call-to-action. Example: 'Shop premium Cottonmouth cannabis T-shirts. Comfortable, high-quality tees with bold designs. Fast shipping.'
7. Ensure it is 150–160 characters (Yoast shows a green light when correct).
8. Click Update.

### 10. Missing meta description

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/product-category/hoodies/
- **Rule:** `tier2.meta.no-description`

**What it means (plain English)**

Your product category page for hoodies doesn't have a meta description — that's the 155-character summary that appears below your page title in Google search results. Without it, Google will auto-generate one from your page content, which is often choppy and doesn't tell customers what they'll find.

**Why it matters for your business:** Missing meta descriptions reduce click-through rates from search results because potential customers see a generic snippet instead of a compelling reason to visit your hoodies category.

**Technical root cause:** The page template for product categories likely doesn't include a meta description field, or the field is empty. WordPress product category pages often need manual meta description entry or plugin configuration.

**Recommended fix — step by step**

1. Log into WordPress admin → Products → Categories → click 'Hoodies'
2. Scroll to the SEO section (if using Yoast SEO, look for 'SEO' box below the editor; if using Rank Math, check the 'General' tab in the right sidebar)
3. Write a 155-character meta description, e.g. 'Shop premium cannabis hoodies & apparel. Comfortable, stylish gear for cannabis enthusiasts. Free shipping on orders over $50.'
4. Click 'Update Category' to save
5. Repeat for other product category pages (edibles, accessories, etc.)
6. If no SEO plugin is active, install Yoast SEO (free) → activate → return to step 1

### 11. Missing meta description

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/product-category/accessories/
- **Rule:** `tier2.meta.no-description`

**What it means (plain English)**

Your Accessories category page doesn't have a meta description — the short text snippet (usually 150–160 characters) that appears below your page title in Google search results. Without it, Google may auto-generate one from your page content, which often looks choppy or incomplete and reduces click-through rates.

**Why it matters for your business:** Missing meta descriptions on category pages reduce organic search click-through rate, meaning fewer potential customers visit your site from Google even if you rank well.

**Technical root cause:** The WordPress page or product category wasn't assigned a custom meta description field, likely because the SEO plugin (Yoast, Rank Math, etc.) wasn't configured or the description field was left blank.

**Recommended fix — step by step**

1. Log in to WordPress admin → Products → Categories → click 'Accessories'
2. Scroll to the SEO section (usually below the main content; if missing, ensure Yoast SEO or Rank Math plugin is active)
3. In the 'Meta description' or 'SEO description' field, enter a unique 150–160 character description, e.g., 'Shop cannabis accessories, grinders, rolling papers, and more at Cottonmouth. High-quality, discreet shipping.'
4. Include your target keyword ('cannabis accessories' or 'bong', etc.) naturally in the first 120 characters
5. Click 'Update' to save
6. Repeat for other product category pages (Flower, Edibles, etc.) — prioritize high-traffic categories first

### 12. Mobile perf measurement failed

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** performance
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier3.perf.mobile-fail`

**What it means (plain English)**

Our automated mobile performance test timed out while trying to load your homepage — the page took longer than 60 seconds to fully load and become interactive. This suggests either genuine slowness on mobile networks, server response delays, or assets (images, scripts, ads) that block page rendering. We couldn't complete the test to measure actual performance metrics.

**Why it matters for your business:** Slow mobile load times directly hurt search rankings, user experience, and conversion rates; for a cannabis retailer, mobile visitors are often deciding whether to visit your location, so delays cause lost foot traffic and online sales.

**Technical root cause:** The page likely has unoptimized images, render-blocking JavaScript or CSS, slow third-party scripts (analytics, ads, age-gate plugins), or server-side delays. WordPress sites often load many plugins and assets synchronously, delaying when the page becomes interactive.

**Recommended fix — step by step**

1. Install Google PageSpeed Insights (free) at https://pagespeed.web.dev, paste your homepage URL, and screenshot the Mobile tab results — identify which assets are flagged as 'Eliminate render-blocking resources' or 'Reduce unused JavaScript'.
2. In WordPress Admin → Plugins, search for and install 'WP Rocket' (freemium) or 'Autoptimize' (free) — both defer JavaScript loading and lazy-load images, which typically cuts load time in half.
3. Go to WordPress Admin → Settings → Reading, set 'Posts per page' to 5–8 (if homepage shows blog posts) to reduce initial DOM size.
4. Check Admin → Plugins for age-gate or compliance plugins (e.g., 'Sprout Age Gate', 'WP Age Gate') — these sometimes load slowly; if found, test disabling temporarily to confirm they're the bottleneck, then contact the plugin author or switch to a lighter alternative.
5. Install 'Smush' (free tier via WordPress.com or EWWW Image Optimizer) to compress all images to <100 KB per image and enable WebP format conversion.
6. Go to Admin → Appearance → Customize, disable or defer any video backgrounds, auto-playing media, or third-party embeds on the homepage.

### 13. Missing core schema types: LocalBusiness

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier4.schema.missing-core`

**What it means (plain English)**

Your site is missing LocalBusiness schema markup — a structured data format that tells Google you operate a physical cannabis retail location. You have Organization and WebSite schema, but LocalBusiness is the critical piece that surfaces your store hours, address, and phone number in Google Maps and local search results.

**Why it matters for your business:** Without LocalBusiness markup, you're invisible in Google Local Pack results (the map + business cards that appear when someone searches for 'cannabis dispensary near me') and won't display hours, directions, or reviews prominently in search.

**Technical root cause:** Your WordPress SEO plugin (likely Yoast, All in One SEO, or Rank Math) is configured to emit Organization schema but has not been instructed to output LocalBusiness, which requires explicit setup with your business address, phone, and hours.

**Recommended fix — step by step**

1. Log into WordPress admin → navigate to your SEO plugin settings (if using Yoast SEO, go to SEO → Search Appearance; if Rank Math, go to Rank Math → Business; if All in One SEO, go to All in One SEO → Business)
2. Look for 'Local Business' or 'Business Type' option and select 'Cannabis Dispensary' or 'Retail' as the business type
3. Fill in all required fields: physical store address (street, city, state, zip), phone number, and business hours for each day of the week
4. Ensure the address exactly matches your Google Business Profile and dispensary license documentation
5. Save and publish; wait 5 minutes, then visit your homepage and right-click → View Page Source, search for 'LocalBusiness' to confirm the markup is present
6. Paste your homepage URL into Google's Rich Results Test (search.google.com/test/rich-results) to validate the schema renders without errors

### 14. Missing security header: strict-transport-security

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** security
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier5.header.strict-transport-security`

**What it means (plain English)**

Your website is missing the Strict-Transport-Security (HSTS) header, which tells browsers to always use HTTPS when visiting your site. Without it, browsers may attempt insecure HTTP connections first, creating a window where attackers could intercept data. This is especially important for a cannabis retailer handling age verification and potentially sensitive customer information.

**Why it matters for your business:** Missing HSTS weakens your security posture and could expose customer data during the initial connection, damaging trust and creating compliance risk for a regulated industry.

**Technical root cause:** Your WordPress site is hosted behind Cloudflare, but the HSTS header has not been configured in either your WordPress settings, Cloudflare's security rules, or your server. Cloudflare is serving the response but this particular header is not being injected.

**Recommended fix — step by step**

1. Log into your Cloudflare dashboard → SSL/TLS → HSTS (HTTP Strict Transport Security) → Enable HSTS and set Max Age to 31536000 (1 year) with 'Include subdomains' checked
2. If you prefer to set it at the WordPress layer instead, install the 'WP Security' or 'really-simple-ssl' plugin, then go to Settings → SSL → Security headers → enable HSTS with max-age 31536000
3. After enabling, test using https://securityheaders.com and enter your URL to confirm the header now appears
4. Wait 24–48 hours for browser caches to update, then retest to confirm HSTS is being served on all pages

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

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** security
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier5.header.content-security-policy`

**What it means (plain English)**

Your site is missing a Content Security Policy (CSP) header — a security rule that tells browsers which external resources (scripts, images, fonts) are trusted. Without it, attackers could inject malicious code more easily. While your site uses Cloudflare, adding CSP provides an extra layer of protection specific to your domain.

**Why it matters for your business:** A CSP breach could expose customer data, damage trust, and trigger compliance issues — critical for a cannabis retailer handling age verification and payment info.

**Technical root cause:** WordPress isn't sending the CSP header by default. You need to add it either via Cloudflare Workers (since you're on Cloudflare), via a WordPress plugin, or via your .htaccess file if you have Apache.

**Recommended fix — step by step**

1. Log in to your Cloudflare dashboard → Workers → create a new worker or edit your existing rule to add the header: `response.headers.set('Content-Security-Policy', "default-src 'self'; script-src 'self' 'unsafe-inline' *.cloudflare.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:;")`
2. Alternatively, install the free plugin 'HTTP Headers' (search in WordPress Admin → Plugins → Add New) → activate it → go to Settings → HTTP Headers
3. In that plugin, paste this CSP header: `default-src 'self'; script-src 'self' 'unsafe-inline' *.cloudflare.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:;`
4. Test the fix using https://securityheaders.com → enter getcottonmouth.com → confirm 'Content-Security-Policy' now appears in the report
5. If you have custom third-party tracking or ad scripts, add their domains to the CSP rule (e.g., Google Analytics, Facebook Pixel) and re-test

### 16. 30 tap targets under 44px at mobile-320

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier6.a11y.small-targets`

**What it means (plain English)**

Your website has 30 clickable elements (buttons, links, menus) that are smaller than 44×44 pixels when viewed on a phone at 320px width. This makes them hard to tap accurately—especially for people with vision or motor control challenges. It also frustrates mobile users generally, who often hit the wrong button.

**Why it matters for your business:** Visitors on mobile devices (where most cannabis retail browsing happens) will abandon your site due to frustration or accessibility barriers, directly reducing conversions and violating WCAG accessibility standards that some jurisdictions expect from licensed retailers.

**Technical root cause:** The WordPress theme or custom CSS is not applying adequate padding/margin to interactive elements, or the mobile viewport is being squeezed without corresponding touch-target resizing. Navigation menus, buttons, and links likely lack the 44px minimum on the shortest dimension.

**Recommended fix — step by step**

1. Open WordPress Admin → Customize (or Elementor/page builder if installed) and test touch targets on an actual mobile phone at 320px width; identify which elements are too small (buttons, menu items, product filters).
2. For WordPress menu items: go to Appearance → Menus, and ensure the CSS class or custom padding adds at least 12px vertical/horizontal padding to each link (target: 44px minimum height).
3. Use Chrome DevTools (F12 → Device Toolbar set to 320px width) to inspect each small element and note its dimensions; capture a screenshot for reference.
4. If using Elementor or WP page builder: select each undersized button/link → increase padding to 16px+ and set min-height to 44px in the element settings.
5. If custom theme: edit wp-content/themes/[theme-name]/style.css or use Appearance → Custom CSS to add rules like `a, button { min-height: 44px; padding: 8px 12px; }` (adjust as needed per element type).
6. Test navigation, product category links, 'Add to Cart' buttons, and footer links on a real phone or Android emulator at 320px; verify each is at least 44×44 and spaced 8px+ from neighbors.
7. Run a fresh audit in Google Lighthouse (Accessibility tab) or WAVE (WebAIM) to confirm the count drops below 5 undersized targets.

### 17. 30 tap targets under 44px at mobile-375

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier6.a11y.small-targets`

**What it means (plain English)**

Your site has 30 buttons, links, and interactive elements that are smaller than 44×44 pixels on mobile devices. This makes them hard to tap accurately—especially for people with motor control challenges, arthritis, or shaky hands. Mobile visitors will frequently mis-tap and get frustrated.

**Why it matters for your business:** Poor mobile tap targets drive up bounce rates, increase support tickets, and hurt conversion on age-gate and product-browse flows—critical for a cannabis retailer where compliance and user trust are paramount.

**Technical root cause:** Elements like navigation links, filter buttons, or CTA buttons were likely sized for desktop viewing and not resized responsively for mobile viewports. WordPress themes often inherit small touch targets from parent theme CSS without mobile-first padding or sizing.

**Recommended fix — step by step**

1. Open Chrome DevTools (F12), switch to mobile view (375px), and identify the 30 undersized targets using the Accessibility Tree (right-click → Inspect → Accessibility tab) to prioritize highest-traffic elements first.
2. In WordPress admin, go to Appearance → Customize → Additional CSS and add `.mobile-button { min-width: 44px; min-height: 44px; display: inline-flex; align-items: center; justify-content: center; }` to establish a baseline.
3. Apply that class (or equivalent padding) to primary navigation links: in your theme's header.php or via Appearance → Menus, ensure each `<a>` tag inside nav has `padding: 12px 16px` minimum (44px total with font size).
4. Audit form inputs and checkboxes: in any custom product filters or age-gate forms, set `input[type='checkbox'], input[type='radio'] { min-width: 44px; min-height: 44px; }` and wrap labels with at least 8px padding.
5. Test all links in footer and sidebar using WordPress's built-in menu editor; add spacing classes or use a plugin like "WP Mobile Menu" to auto-size touch targets on small screens.
6. Use WebAIM's mobile contrast checker (https://webaim.org/resources/contrastchecker/) to verify that enlarged targets also maintain color contrast while resizing.
7. Install the WAVE Accessibility plugin (wordpress.org/plugins/wave-accessibility-checker/) and run a full site audit to catch any remaining sub-44px targets you may have missed.
8. Test on a real iOS/Android device at 375px width, tapping each nav item, button, and link to confirm no mis-taps occur before deploying.

### 18. 30 tap targets under 44px at tablet-768

- **Severity:** P2   |   **Priority:** 🟠 HIGH
- **Effort:** Moderate (1-3 hours)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier6.a11y.small-targets`

**What it means (plain English)**

Your site has 30 interactive buttons, links, or form fields that are smaller than 44×44 pixels when viewed on tablets (like iPads). This makes them hard for users with limited dexterity or large fingers to tap accurately. WCAG 2.5.5 is a web accessibility standard that requires buttons and links to be at least 44×44 pixels so anyone can use them comfortably.

**Why it matters for your business:** Customers using tablets to browse your menu or complete checkout may struggle to tap small buttons, leading to frustration, abandoned orders, and reduced mobile revenue.

**Technical root cause:** The theme or custom CSS is sizing interactive elements (buttons, navigation links, menu toggles, quantity adjusters) below the 44px minimum, likely because the design was optimized for desktop first without responsive testing on actual tablets.

**Recommended fix — step by step**

1. Use Chrome DevTools (F12 → toggle device toolbar → select iPad/tablet view) to identify which elements are under 44px and document them by screenshot.
2. In WordPress admin, go to Appearance → Customize → Additional CSS and add: button, a, input[type='submit'], input[type='checkbox'], input[type='radio'] { min-width: 44px; min-height: 44px; }
3. For nav menu items, add padding: nav a { padding: 12px 16px; min-height: 44px; display: flex; align-items: center; }
4. Test product quantity spinners and add-to-cart buttons by adding: input[type='number'] { min-height: 44px; min-width: 44px; }
5. Install the WAVE Accessibility Checker plugin (Search in WordPress plugins for 'WAVE') and run it on the homepage and product pages to verify no elements remain under 44px.
6. On mobile/tablet, ensure spacing between buttons is at least 8px to avoid mis-taps, using CSS margin or gap properties.
7. Test on a real iPad or Android tablet (or use DevTools device emulation) by attempting to tap every interactive element; adjust min-height/min-width in custom CSS until all easily tappable.

### 19. Missing meta description

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/my-account/
- **Rule:** `tier2.meta.no-description`

**What it means (plain English)**

Your account page (/my-account/) doesn't have a meta description — the 160-character summary that appears below your page title in Google search results. Without it, Google generates a random snippet from your page content, which often looks unprofessional and doesn't encourage clicks.

**Why it matters for your business:** Customers searching for account-related help may see a poor preview of your page in search results, reducing click-through rates and appearing less trustworthy than competitors.

**Technical root cause:** The page template for /my-account/ either lacks the meta description tag in its HTML head, or the WordPress theme/plugin managing that page isn't populating the description field.

**Recommended fix — step by step**

1. Log in to WordPress admin → Pages → My Account
2. Scroll to the Yoast SEO or All in One SEO box (whichever plugin you use) at the bottom of the editor
3. Fill in the 'Meta Description' field with a clear, 155–160 character summary (e.g., 'Log in to your Cottonmouth account to track orders, manage preferences, and access your rewards.')
4. Verify the description does NOT include keywords stuffing or misleading claims
5. Click Update and wait 2–3 minutes, then visit https://getcottonmouth.com/my-account/ in an incognito browser to confirm the meta tag appears in the page source (Ctrl+U, search for 'meta description')

### 20. Missing meta description

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/product/cottonmouth-c-lighter/
- **Rule:** `tier2.meta.no-description`

**What it means (plain English)**

Your product page for the Cottonmouth C Lighter doesn't have a meta description — that's the 160-character summary Google shows under your page title in search results. Without it, Google generates a random snippet from your page content, which often looks unprofessional and doesn't tell customers why they should click.

**Why it matters for your business:** Weak or missing meta descriptions reduce click-through rates from search results, meaning fewer visitors land on your product pages even when Google ranks them.

**Technical root cause:** The product page was published without filling in the meta description field in WordPress's page editor, or the description was left blank during product creation.

**Recommended fix — step by step**

1. In WordPress admin, navigate to Products → All Products and open the 'Cottonmouth C Lighter' product.
2. Scroll to the right sidebar and find the 'Yoast SEO' box (or your active SEO plugin — e.g., Rank Math, All in One SEO).
3. Click 'Edit snippet' or the meta description field.
4. Write a unique description (140–160 characters) that includes a key benefit, e.g. 'Premium refillable lighter with ergonomic design. Fast ignition, windproof flame. Shop online now.'
5. Check the preview to ensure it displays cleanly in search results.
6. Click 'Save' and publish the product.
7. Repeat this process for all 20+ product pages on your site using a bulk approach: use Yoast SEO → Search Console to identify all products with missing descriptions, then batch-edit them.

### 21. Missing meta description

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/category/uncategorized/
- **Rule:** `tier2.meta.no-description`

**What it means (plain English)**

Your category archive page (Uncategorized) has no meta description — the 160-character summary that appears under your page title in Google search results. Without it, Google generates a random snippet from your page content, which often looks unprofessional and doesn't tell searchers why they should click.

**Why it matters for your business:** Missing meta descriptions reduce click-through rates from search results, meaning fewer visitors discover your products even when you rank well; this is especially costly for cannabis retailers where search visibility is already limited by platform restrictions.

**Technical root cause:** WordPress category pages don't auto-generate meta descriptions by default. If you're using an SEO plugin like Yoast or Rankmath, this category likely wasn't configured with a custom description in the plugin's settings.

**Recommended fix — step by step**

1. In WordPress admin, go to Posts → Categories and click 'Uncategorized'
2. If using Yoast SEO: scroll to the Yoast metabox at the bottom, paste a 155-character description like 'Explore our full selection of cannabis products, edibles, flower, and accessories at Cottonmouth' into the Snippet Preview area
3. If using Rankmath: click the Rankmath settings panel on the right, find 'Meta Description' field and enter the same description
4. If using neither plugin: install Yoast SEO (free version), activate it, then repeat step 2
5. Save/Update the category
6. Monitor via Google Search Console (google.com/webmasters) to confirm the new description appears in search results within 1–2 weeks

### 22. Missing meta description

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/product-category/hats/
- **Rule:** `tier2.meta.no-description`

**What it means (plain English)**

Your product category page for hats doesn't have a meta description — that's the 155-character summary that appears under your page title in Google search results. Without it, Google will auto-generate a snippet from your page content, which often looks choppy and doesn't sell the product category as effectively as a hand-written one would.

**Why it matters for your business:** Missing meta descriptions reduce click-through rates from search results because potential customers see a generic auto-generated preview instead of a compelling reason to visit your hats collection.

**Technical root cause:** The page template for product category archives in WordPress isn't populating the meta description field, likely because the description wasn't set in the category edit screen or your SEO plugin (if installed) isn't configured to generate one automatically.

**Recommended fix — step by step**

1. Log into WordPress admin → Products → Categories
2. Click 'Hats' to edit that category
3. Scroll down to find the description field (or look for an SEO plugin meta description field if Yoast/Rank Math is installed)
4. Write a 150–160 character description focusing on what makes your hat products unique (e.g., 'Shop premium cannabis apparel hats. Limited edition designs, fast shipping.')
5. If using Yoast SEO plugin: expand the Yoast metabox below the editor and paste the description into 'Meta description' field
6. If no SEO plugin is active, consider installing Yoast SEO or Rank Math to auto-manage descriptions across all category pages
7. Repeat this for other product category pages (e.g., accessories, branded merch) to ensure consistent coverage

### 23. Missing meta description

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/product-category/drinkware/
- **Rule:** `tier2.meta.no-description`

**What it means (plain English)**

Your product category page for drinkware doesn't have a meta description — the 160-character summary that appears below your page title in Google search results. Without it, Google generates a random snippet from your page, which often looks unprofessional and doesn't encourage clicks.

**Why it matters for your business:** Missing meta descriptions reduce click-through rates from search results, meaning fewer potential customers visit your drinkware category even if you rank well.

**Technical root cause:** The WordPress page or product category wasn't assigned a meta description in the SEO plugin (likely Yoast SEO or Rank Math) or the theme's built-in SEO fields.

**Recommended fix — step by step**

1. Log in to WordPress admin → Products → Categories → click 'Drinkware'
2. Scroll to the bottom and open the 'Yoast SEO' section (or equivalent plugin panel if you use Rank Math or All in One SEO)
3. Find the 'Meta description' field and write a compelling 155–160 character description, e.g., 'Shop premium cannabis drinkware — water pipes, bongs, grinders & accessories. Fast shipping & discreet packaging.'
4. Click 'Update' to save
5. Repeat this process for all other product category pages (edibles, flower, vapes, etc.) using your audit report to identify which ones are missing descriptions

### 24. A11y: Banner landmark should not be contained in another landmark

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Moderate (1-3 hours)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier9.a11y.landmark-banner-is-top-level`

**What it means (plain English)**

Your site's header (the top navigation and branding area) is nested inside another landmark region, which confuses screen readers. Landmarks are like a map of your page for people using assistive technology—the banner should be at the top level of that map, not buried inside another section. This doesn't break functionality, but it makes your site harder to navigate for blind and low-vision visitors.

**Why it matters for your business:** Screen reader users may struggle to find your navigation and skip past your header entirely, reducing accessibility compliance and potentially limiting traffic from customers using assistive devices.

**Technical root cause:** The Elementor header template (element class 'elementor-18') is likely wrapped inside a parent container that also has a landmark role (such as main, navigation, or region), creating nested landmarks.

**Recommended fix — step by step**

1. Log in to WordPress admin → Elementor → My Library → find the header template (check if it's named 'Header' or similar)
2. Click Edit on that template to open the Elementor builder
3. Inspect the outermost container of the header—click the outer wrapper element in the canvas
4. In the right panel under 'Advanced', find the 'HTML Tag' setting and ensure it is set to 'header' (not 'div' or 'section')
5. Check if there is a parent container wrapping this header; if so, remove the landmark role by setting its HTML Tag to 'div' instead of 'aside', 'nav', 'main', or 'region'
6. Save and republish the template, then clear your WordPress cache (if using a caching plugin like WP Super Cache, go to Settings → WP Super Cache → Delete Cache)

### 25. A11y: Contentinfo landmark should not be contained in another landmark

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Moderate (1-3 hours)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier9.a11y.landmark-contentinfo-is-top-level`

**What it means (plain English)**

Your footer (the contentinfo landmark) is nested inside another landmark element instead of sitting at the top level of the page. Think of landmarks like chapters in a book — the footer should be its own chapter, not buried inside another one. Screen readers use these landmarks to help visitors navigate your site, and nesting them confuses that navigation.

**Why it matters for your business:** Customers using screen readers may struggle to navigate to your footer where you list hours, location, and compliance information — potentially losing sales and creating accessibility compliance risk.

**Technical root cause:** Elementor's footer widget (elementor-11) is being rendered inside a parent landmark container (likely .elementor-11's parent is a navigation or main landmark) instead of directly under the body tag, violating WCAG 2.1 landmark structure.

**Recommended fix — step by step**

1. Log in to WordPress admin → Elementor Editor for your footer template
2. Click on the footer container (data-elementor-id="11") to select it
3. Open the Advanced tab in the left panel
4. Check the HTML Tag dropdown — if it shows 'footer', verify the parent container's HTML Tag is not set to 'nav', 'main', or 'region'
5. Select the parent wrapper around the footer widget and change its HTML Tag from 'nav' or 'div' to 'div' if needed, ensuring footer sits outside any landmark wrapper
6. Alternatively, disable any 'Sticky Header' or 'Sticky Navigation' features that may be wrapping the footer, then save and republish
7. After publishing, run an axe DevTools scan (free Chrome extension) on the homepage to confirm 'landmark-contentinfo-is-top-level' is resolved

### 26. A11y: Document should not have more than one banner landmark

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Moderate (1-3 hours)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier9.a11y.landmark-no-duplicate-banner`

**What it means (plain English)**

Your WordPress theme (JupiterX) has created a banner landmark (the HTML5 <header> element with role="banner") that's being detected as a duplicate. Screen readers and assistive technologies use landmarks to help users navigate pages quickly. Multiple banner landmarks confuse these tools because there should only be one main header per page. This is a structural HTML issue, not a visual one.

**Why it matters for your business:** Customers using screen readers or keyboard navigation may struggle to find your main navigation and store information, potentially abandoning their visit before they can access your age-gate or product catalog.

**Technical root cause:** The JupiterX theme is likely outputting the header element with role="banner" in multiple places (perhaps in a mobile menu, sticky header, or template duplication), or a plugin is inserting an additional banner landmark. The audit detected at least two instances where the browser treats the markup as separate banner regions.

**Recommended fix — step by step**

1. Log into WordPress admin and navigate to Appearance → Header to check if you have multiple header templates or modules enabled.
2. Inspect the page using Chrome DevTools (right-click → Inspect) and search for all instances of role="banner" or <header> tags; screenshot each one you find.
3. If you see two headers (e.g., one sticky and one normal), contact JupiterX support OR disable the sticky header temporarily via Appearance → Customize → Header settings and test.
4. If a plugin is adding a header, deactivate it one by one and re-run an accessibility audit (using axe DevTools browser extension, free) to confirm which one is the culprit.
5. Once identified, either remove the duplicate or change the second instance from role="banner" to a neutral role like role="region" or remove the role entirely if it's not a true page header.
6. Re-test using axe DevTools to confirm only one banner landmark remains.

### 27. A11y: Document should not have more than one contentinfo landmark

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Moderate (1-3 hours)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier9.a11y.landmark-no-duplicate-contentinfo`

**What it means (plain English)**

Your site has multiple footer sections marked as 'contentinfo' landmarks (a special HTML region that tells screen readers 'this is the footer'). Assistive technology users may become confused when encountering duplicate footers, since they expect only one footer per page. This typically happens when a theme includes both a visible footer and a hidden or dynamically-loaded footer, or when custom code adds extra footer markup.

**Why it matters for your business:** Visitors using screen readers may have a degraded experience navigating your site, which can reduce time-on-site and undermine trust for accessibility-conscious customers.

**Technical root cause:** The WordPress theme (Jupiter X) or a plugin is rendering multiple `<footer role="contentinfo">` elements on the homepage. The evidence shows `.jupiterx-footer` has the contentinfo role; there is likely a second footer element (possibly in a widget area, plugin output, or custom code) also marked with this role.

**Recommended fix — step by step**

1. Log into WordPress admin → Appearance → Footer / Widget Areas and check for any widgets or custom code in footer zones that duplicate the main footer.
2. In WordPress admin → Appearance → Customize, navigate to the Footer section and verify only one footer block/widget area is active and visible.
3. Check Plugins → Installed Plugins for any footer-related plugins (e.g., 'Footer Manager', 'Footer Credit', custom cookie-notice plugins) that may be adding a second footer; deactivate/remove if redundant.
4. Open the site in a browser, open Developer Tools (F12), and search the HTML (Ctrl+F) for all instances of `<footer` and `role="contentinfo"` to locate the duplicate.
5. Remove the duplicate footer markup: either delete the widget/plugin or edit the theme's footer.php file (Appearance → Theme File Editor, then search footer.php) to ensure only one contentinfo landmark exists.
6. After fixing, re-test using a free tool like axe DevTools browser extension to confirm only one contentinfo landmark remains.

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

- **Severity:** P2   |   **Priority:** 🟡 MEDIUM
- **Effort:** Moderate (1-3 hours)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier9.a11y.landmark-unique`

**What it means (plain English)**

Your site has two landmark regions (header and footer) that screen readers cannot distinguish from one another because they lack unique labels. Landmarks are the major structural sections of a page (like 'navigation', 'main content', 'sidebar'). When landmarks are unlabeled, users with visual impairments cannot quickly jump between sections or understand the page structure.

**Why it matters for your business:** Visitors using screen readers cannot efficiently navigate your site to find products, age verification, or compliance information, reducing accessibility compliance and potentially excluding a segment of customers.

**Technical root cause:** The header and footer elements have the correct semantic roles (banner and contentinfo), but neither has an aria-label, aria-labelledby, or title attribute to provide a unique accessible name. Screen readers see two unlabeled landmarks and cannot distinguish them.

**Recommended fix — step by step**

1. Log into WordPress admin → Appearance → Customize (or use a page builder if JupiterX has one)
2. Locate the Header settings in the customizer and note whether you can add custom HTML attributes; if not, proceed to next step
3. Install the 'Code Snippets' plugin (via Plugins → Add New → search 'Code Snippets' → Install → Activate)
4. Go to Snippets → Add New and paste: add_filter('jupiterx_header_attributes', function($attrs) { return $attrs . ' aria-label="Site Header"'; }); — save and activate
5. Create a second snippet for the footer: add_filter('jupiterx_footer_attributes', function($attrs) { return $attrs . ' aria-label="Site Footer"'; }); — save and activate
6. Test with a free screen reader (NVDA on Windows or VoiceOver on Mac) by navigating with 'r' key to jump between landmarks; you should now hear 'Site Header' and 'Site Footer'
7. Alternative (if Code Snippets doesn't work): Contact JupiterX support to confirm whether the theme supports aria-label in header/footer template settings, or request they add this in a future update

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

- **Severity:** P2
- **Page URL:** https://getcottonmouth.com/2024/02/better-together-exploring-the-entourage-effect/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

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

- **Severity:** P2
- **Page URL:** https://getcottonmouth.com/blog/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 31. No H1 on homepage

- **Severity:** P2
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier4.h1.missing`

**Detail**

Every page should have exactly one H1.

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

- **Severity:** P2
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier5.header.x-frame-options`

**Detail**

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

### 33. 29 tap targets under 44px at mobile-414

- **Severity:** P2
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier6.a11y.small-targets`

**Detail**

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

### 34. Lighthouse perf (desktop): 73/100

- **Severity:** P2
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier8.lighthouse.perf-desktop`

**Detail**

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

### 35. A11y: All page content should be contained by landmarks (×3)

- **Severity:** P2
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier9.a11y.region`

**Detail**

Ensure all page content is contained by landmarks
Impact: moderate
WCAG: 
Learn more: https://dequeuniversity.com/rules/axe/4.11/region?application=playwright

---

### P3 — 98 findings

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

- **Severity:** P3   |   **Priority:** 🟠 HIGH
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/cart/
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Two images on your cart page don't have alt text — descriptive labels that screen readers read aloud to blind customers and that search engines use to understand image content. This makes those images invisible to accessibility tools and search bots, and it's also a WCAG compliance issue that could expose you to accessibility lawsuits.

**Why it matters for your business:** Customers using screen readers can't understand what those cart images show, hurting both accessibility compliance and SEO ranking for image-heavy product searches.

**Technical root cause:** The img HTML tags lack the alt attribute, or the alt attribute is empty. WordPress doesn't auto-fill alt text; it must be added manually when uploading or editing images.

**Recommended fix — step by step**

1. Log in to WordPress admin → go to Media Library
2. Search for or browse to the two images used on the cart page (getcottonmouth.com/cart/)
3. Click each image and open its details panel
4. In the 'Alt Text' field, write a concise, descriptive label (e.g., 'Green cannabis flower product image' or 'Shopping cart icon') — avoid keyword stuffing
5. Click 'Update' to save
6. If images are embedded in a page/post instead of via Media Library, edit the page → click the image → click the pencil/edit icon → fill in Alt Text field → Update
7. Re-run an accessibility scan (e.g., WAVE browser extension or Lighthouse in Chrome DevTools) to confirm both images now have alt text

### 2. robots.txt does not reference sitemap

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/robots.txt
- **Rule:** `tier2.robots.no-sitemap`

**What it means (plain English)**

Your robots.txt file (the text file that tells search engines how to crawl your site) doesn't list your XML sitemap. A sitemap is a map of all your pages that helps Google find and index them faster. Without this pointer, Google may take longer to discover new products, blog posts, or dispensary locations.

**Why it matters for your business:** Slower indexing of your dispensary pages, product updates, and compliance-critical content (like license information) means potential customers searching for your location or products may not find you as quickly.

**Technical root cause:** The robots.txt file is missing a 'Sitemap:' directive that should point to your sitemap.xml URL. This is typically generated by WordPress SEO plugins but requires explicit configuration to be referenced.

**Recommended fix — step by step**

1. Log into WordPress admin → Settings → Reading and confirm a sitemap plugin is active (Yoast SEO, Rank Math, or built-in WordPress sitemap).
2. Go to your site URL + /sitemap.xml (e.g., getcottonmouth.com/sitemap.xml) to confirm it exists and is accessible.
3. Access your site files via SFTP or the WordPress file editor (if available) at Tools → File Manager, or ask your host for FTP credentials.
4. Download or open robots.txt from the root directory.
5. Add this line at the end: Sitemap: https://getcottonmouth.com/sitemap.xml (replace domain with yours).
6. Save and re-upload the file.
7. Verify the change by visiting getcottonmouth.com/robots.txt in your browser and confirming the Sitemap line appears at the bottom.

### 3. Title length 72 chars

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/2024/02/better-together-exploring-the-entourage-effect/
- **Rule:** `tier2.meta.title-length`

**What it means (plain English)**

Your page title is 72 characters long, but search engines like Google typically display only the first 50–60 characters in search results on desktop and even fewer on mobile. The end of your title ("| Cottonmouth Dispensary") will be cut off and invisible to searchers, wasting valuable real estate that could highlight your unique selling point.

**Why it matters for your business:** Searchers see a truncated title in Google results, reducing click-through rate and brand visibility for this content.

**Technical root cause:** The title was written without considering the character limit that search engines enforce when rendering snippets in search result pages.

**Recommended fix — step by step**

1. Log in to WordPress → Posts → Edit the post "Better Together: Exploring the Entourage Effect"
2. In the post editor, scroll to the SEO section (typically Yoast SEO or similar plugin) or click the post settings panel on the right
3. Find the field labeled "SEO Title" or "Meta Title" — this is what appears in Google search results
4. Revise the title to 50–60 characters. Example: "Entourage Effect in Cannabis | Cottonmouth" (50 chars)
5. Save the post and verify the change appears in WordPress search preview
6. Optional: Review other blog posts on the site for similar over-long titles and apply the same fix

### 4. Title length 80 chars

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/2024/02/embracing-transparency-the-power-of-phytofacts-reports/
- **Rule:** `tier2.meta.title-length`

**What it means (plain English)**

Your page title is 80 characters long, but search engines display titles best between 50–60 characters on desktop and 40–50 on mobile. Anything longer gets cut off in search results, making your page look incomplete to potential customers searching for cannabis products.

**Why it matters for your business:** Truncated titles in Google search results reduce click-through rates; users see '…' instead of your full message, making your blog post less appealing in competitive search results for cannabis education content.

**Technical root cause:** The WordPress page title (set in Yoast SEO, Rank Math, or manually in the post editor) exceeds recommended pixel width for search engine display snippets. Most CMS defaults don't enforce length limits.

**Recommended fix — step by step**

1. Log into WordPress admin → Posts → edit the 'Embracing Transparency' post.
2. If using Yoast SEO: scroll to the Yoast box at bottom → click the pencil icon next to 'SEO title' → trim to 55–60 characters. Example: 'PhytoFacts Reports: Cannabis Transparency | Cottonmouth'
3. If using Rank Math: click the 'Title' field in the Rank Math sidebar → trim to 55–60 characters.
4. If neither plugin is active: click 'Document' (top right) → find 'Meta Description/Title' section → edit the title field directly.
5. Preview the change by searching the post title in Google Incognito to confirm it no longer truncates.
6. Apply the same trim to any other blog posts over 65 characters (check via Yoast SEO dashboard → General → Title Length report).

### 5. Title length 80 chars

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/2024/02/lets-be-clear-botanical-vs-cannabis-derived-terpenes/
- **Rule:** `tier2.meta.title-length`

**What it means (plain English)**

Your page title (the blue clickable text in Google search results) is 80 characters long, but Google typically displays only 50–60 characters before cutting it off with '…'. This means your brand name 'Cottonmouth Dispensary' gets cut off in search results, wasting valuable real estate. The title should lead with your keyword and stay under 65 characters.

**Why it matters for your business:** Potential customers searching for terpene information won't see your dispensary name in search results, reducing brand recognition and click-through rates from organic search.

**Technical root cause:** The page title was written for readability rather than search optimization. WordPress allows any length, but search engines have character limits based on pixel width, not character count—most screens cut off around 50–65 characters.

**Recommended fix — step by step**

1. Log into WordPress Admin → Pages / Posts → edit the blog post 'Let's Be Clear: Botanical vs. Cannabis-Derived Terpenes'
2. Scroll to 'Yoast SEO' metabox at the bottom (or equivalent SEO plugin you're using)
3. In the 'SEO title' field, replace the current title with: 'Botanical vs Cannabis Terpenes | Cottonmouth' (57 chars)
4. Verify the preview shows your full title + brand without truncation
5. Click 'Update' to save
6. Repeat for any other blog posts with titles over 65 characters (audit other URLs in the same pattern)

### 6. Missing OpenGraph metadata

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/sample-page/
- **Rule:** `tier2.meta.no-og`

**What it means (plain English)**

Your website is missing Open Graph tags — hidden code that tells Facebook, Instagram, and other social platforms how to display your content when someone shares a link. Without these tags, your posts appear as plain text links instead of attractive cards with your brand image and description, which dramatically reduces click-through rates on social media.

**Why it matters for your business:** Missing Open Graph metadata reduces social sharing engagement and brand visibility, directly impacting traffic from platforms where cannabis consumers discover dispensaries and product reviews.

**Technical root cause:** Open Graph meta tags (og:title, og:image, og:description) are not present in the page's <head> section. WordPress does not add these automatically; they require either manual HTML insertion or a dedicated SEO plugin.

**Recommended fix — step by step**

1. Install Yoast SEO (free version) via WordPress Admin → Plugins → Add New → search 'Yoast SEO' → Install Now → Activate
2. In WordPress Admin, go to Yoast SEO → Integrations → Social → connect your Facebook and Instagram accounts
3. Go to WordPress Admin → Pages → Sample Page (or each page affected) → scroll to Yoast SEO box → click 'Social' tab → upload a featured image if missing → Yoast will auto-generate og:title and og:image
4. Alternatively, if you prefer manual control: install 'All in One SEO' plugin → go to affected page → scroll to AIOSEO box → fill in 'Social Title' and 'Social Image' fields
5. Test the fix by pasting your page URL into Facebook's Sharing Debugger (facebook.com/sharing/debugger/) — you should see your brand image and title appear in the preview

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

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/sample-page/
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Two images on your Sample Page don't have descriptive alt text — text that explains what the image shows. Search engines and assistive technology (screen readers used by people with vision disabilities) rely on this text to understand images. Without it, you're missing SEO value and excluding potential customers.

**Why it matters for your business:** Missing alt text limits your reach: customers using screen readers can't understand product images, and Google has less context to index and rank your pages in image search and web search.

**Technical root cause:** The HTML for these images lacks an 'alt' attribute, or the alt attribute is empty. WordPress makes it easy to add alt text, but it was skipped during image upload or post creation.

**Recommended fix — step by step**

1. Log in to WordPress admin → go to Pages → Sample Page (or click Edit on that page)
2. In the post editor, click on the first image to select it
3. In the image toolbar or sidebar (right panel), find the 'Alt Text' field and enter a clear, descriptive phrase (e.g., 'Cottonmouth cannabis product bottle' — 5-10 words, no keyword stuffing)
4. Repeat for the second image
5. Click Update to save
6. Optional: Install the Yoast SEO plugin (free version) → activate → run a post analysis to flag missing alt text in the future

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

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/glass-accessories/
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Three images on your Glass Accessories page don't have alt text — descriptive captions that explain what each image shows. Search engines and screen readers (used by people with vision loss) can't understand images without these captions, so they treat them as invisible. This makes your products harder to find in search results and excludes potential customers who use accessibility tools.

**Why it matters for your business:** Missing alt text reduces your product page's visibility in image search results and limits your ability to reach customers with disabilities, which both shrink your addressable market and may expose you to accessibility compliance risk.

**Technical root cause:** The three images on that page were uploaded or inserted into the page without filling in the alt text field in WordPress's image settings, leaving the alt attribute empty or missing entirely.

**Recommended fix — step by step**

1. Log in to WordPress admin → go to Pages → find 'Glass Accessories' → click Edit
2. In the page editor, find each of the 3 product images and click on it
3. In the right sidebar under 'Image Settings' (or the image block panel), locate the 'Alt Text' field
4. Write a clear, descriptive alt text for each image (e.g., 'Hand-blown borosilicate bong with blue swirl pattern' instead of just 'bong')
5. Save/update the page
6. Test by opening the page in your browser, right-clicking each image, and selecting 'Inspect' to confirm the alt attribute now contains your text

### 9. Description length 26 chars

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/glass-art/artist-lineup/
- **Rule:** `tier2.meta.description-length`

**What it means (plain English)**

Your page's meta description (the snippet shown in Google search results) is only 26 characters long. Google recommends 80–160 characters so your full message displays without being cut off in search listings. Right now, potential customers see an incomplete preview of what your page offers.

**Why it matters for your business:** A truncated search result loses credibility and click-through opportunity — customers can't tell what they're getting before they click, so they may choose a competitor's listing instead.

**Technical root cause:** The meta description tag in the page's HTML head is either missing, too short, or set to a single word or phrase rather than a complete sentence describing the page content.

**Recommended fix — step by step**

1. Log in to WordPress admin → Pages → Glass Art: Artist Lineup (or search 'Artist Lineup' in the page list)
2. Scroll to the bottom of the editor and find the 'Yoast SEO' or 'All in One SEO' box (whichever plugin is active)
3. Click 'Edit snippet' or the snippet preview area
4. In the 'Meta description' field, write 80–160 characters describing the artist lineup (e.g., 'Browse our curated collection of glass artists and their work. Meet the talented creators behind Cottonmouth's premium glass art selection.')
5. Click 'Save' or 'Update' and refresh the page to confirm the new description appears in the snippet preview

### 10. Missing OpenGraph metadata

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/glass-art/artist-lineup/
- **Rule:** `tier2.meta.no-og`

**What it means (plain English)**

OpenGraph tags are snippets of code that tell social media platforms (Facebook, Instagram, Pinterest, etc.) how to display your page when someone shares a link. Without them, your posts show up with a generic preview instead of your chosen title, description, and image — making shared links less appealing and less likely to drive clicks.

**Why it matters for your business:** When customers share your artist lineup or product pages on social media, missing preview images and titles reduce click-through rates and social engagement, directly hurting word-of-mouth traffic to your dispensary.

**Technical root cause:** The page is missing the og:title and og:image meta tags in the <head> section of the HTML. WordPress doesn't add these automatically; they require either manual entry, a plugin, or theme configuration.

**Recommended fix — step by step**

1. Install Yoast SEO Premium or All in One SEO Pack (free version) via WordPress Admin → Plugins → Add New.
2. Activate the plugin and go to its settings (Yoast SEO → Titles & Metas, or All in One SEO → Titles & Metas).
3. Enable 'Social Media' or 'OpenGraph' features in the plugin settings.
4. Edit the Artist Lineup page (Pages → Artist Lineup → Edit) and scroll to the Yoast/AIOSEO metabox at the bottom.
5. Fill in the 'Social Title' field (e.g., 'Meet Our Glass Artists | Cottonmouth') and upload a Social Image (e.g., a hero shot of artists or featured glass pieces).
6. Repeat for other key pages (product pages, homepage, about page).
7. After publishing, test the preview using Facebook's Sharing Debugger (facebook.com/developers/tools/debug/sharing) to confirm og:title and og:image now appear.

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

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/glass-art/artist-lineup/
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Two images on your Artist Lineup page don't have alt text—descriptive labels that screen readers read aloud and search engines use to understand what an image shows. This makes the page harder to navigate for people using assistive technology, and it signals to Google that those images aren't optimized.

**Why it matters for your business:** Missing alt text reduces your page's SEO ranking for image search and limits accessibility for customers with visual impairments, shrinking your potential audience.

**Technical root cause:** The images were likely uploaded without alt text filled in during the WordPress media library upload or page builder block configuration.

**Recommended fix — step by step**

1. Go to WordPress Admin → Media Library and find the two images used on the Artist Lineup page
2. Click each image and scroll to the 'Alt Text' field in the sidebar; write a short, descriptive phrase (e.g., 'Artist Jane Doe holding glass art piece' or 'Glass bong with color gradient design')
3. Alternatively, navigate to the Artist Lineup page in WordPress editor, click each image block, and paste alt text into the 'Alt text' field in the right sidebar
4. Save/publish the page changes
5. Run the page through a free accessibility checker like WAVE (wave.webaim.org) to confirm alt text is now present

### 12. Missing OpenGraph metadata

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/glass-art/book-glass-studio/
- **Rule:** `tier2.meta.no-og`

**What it means (plain English)**

When this page is shared on Facebook, Instagram, or other social platforms, those sites won't have a custom preview image or title to display. Instead, they'll show a generic or broken preview, making the link look unprofessional and less clickable.

**Why it matters for your business:** Reduced click-through rates on social shares; potential customers won't see an appealing preview of your glass studio booking service, hurting organic social traffic and brand perception.

**Technical root cause:** The page is missing og:title, og:image, og:description, and og:url meta tags in the HTML head. WordPress doesn't add these automatically; they require either manual addition or an SEO plugin.

**Recommended fix — step by step**

1. Install and activate Yoast SEO (free version) if not already active: wp-admin → Plugins → Add New → search 'Yoast SEO' → Install Now → Activate.
2. Go to wp-admin → Yoast SEO → Social → Facebook tab. Verify 'Add Open Graph meta tags' is enabled (it should be by default).
3. Navigate to wp-admin → Pages, find 'Book Glass Studio', and edit it. Scroll to the Yoast SEO metabox at the bottom.
4. Click 'Social preview' (Facebook icon) in the Yoast box. Upload or select a high-quality image (1200×630px) of the glass studio or a booking interface. Set the 'Social title' to something like 'Book Your Glass Art Studio Session'.
5. Repeat for other product/service pages that you want to promote on social media.
6. Click 'Update' to save the page changes.
7. Test the fix using Facebook's Sharing Debugger (facebook.com/sharing/debugger) — paste the URL and verify the preview now shows your custom image and title.

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

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/glass-art/book-glass-studio/
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Two images on your glass studio booking page don't have alt text — descriptive text that explains what's in the image. Screen readers (used by people with vision loss) can't tell visitors what those images show. Search engines also can't understand image content without alt text, which weakens your SEO.

**Why it matters for your business:** Visitors using assistive technology get a poor experience, and you're missing SEO value for image search — especially important for a visually-driven product like glass art.

**Technical root cause:** Images were likely uploaded and embedded without filling in the alt text field in WordPress's image uploader, or the theme template displays images without alt attributes in the HTML.

**Recommended fix — step by step**

1. Log into WordPress → navigate to the Pages section → open 'Book Glass Studio' in the editor
2. Click on the first image in the page content to select it
3. In the right-side Image block settings panel, find the 'Alt text' field and enter a brief, accurate description (e.g., 'Glass studio workspace with furnace and work tables' or 'Custom glass piece being shaped')
4. Repeat for the second image
5. Save and publish the page
6. Test with a free tool like WAVE (wave.webaim.org) to confirm alt text is now present

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

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/privacy-policy/
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Two images on your Privacy Policy page don't have alt text — descriptive labels that explain what the image shows. Search engines and screen readers (used by people with vision loss) can't understand unlabeled images, which means you're missing SEO signals and excluding potential customers.

**Why it matters for your business:** Missing alt text reduces your search visibility for image-related queries and signals to Google that your site may not be fully accessible, which can lower overall rankings. It also means visitors using assistive technology get a degraded experience.

**Technical root cause:** Images were added to the WordPress page without filling in the 'Alt Text' field in the image block or media settings, or the HTML img tags lack alt attributes.

**Recommended fix — step by step**

1. Log into WordPress admin → go to Pages → Privacy Policy
2. In the editor, click on the first image to select it
3. In the right sidebar (Image block settings), find the 'Alt Text' field and write a brief, descriptive label (e.g., 'Cottonmouth cannabis product packaging' or 'Customer testimonial photo')
4. Repeat for the second image
5. Click Publish or Update
6. Optional: Run the page through a free accessibility checker like WAVE (wave.webaim.org) to confirm the fix

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

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/terms-of-service/
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Two images on your Terms of Service page don't have alt text — descriptive text that screen readers use to understand images, and that search engines use to index them. This means visually impaired visitors and search bots can't see what those images show.

**Why it matters for your business:** Missing alt text reduces SEO ranking for image search, limits accessibility for disabled visitors (potential legal risk), and makes your site feel incomplete to search engines.

**Technical root cause:** Images were inserted into the page without the alt attribute populated. This is common when editors upload images quickly without filling in the description field.

**Recommended fix — step by step**

1. Log in to WordPress admin → Pages → Terms of Service (or find the page in the editor)
2. Click Edit with your page builder (or classic editor)
3. Locate each image on the page
4. Click the image → Image Settings → find the Alt Text field
5. Write 1–2 brief, descriptive sentences for each (e.g., 'Cottonmouth logo' or 'Cannabis product packaging seal')
6. Save/publish the page
7. Optional: install Yoast SEO free plugin → SEO → Site Connections to verify crawl

### 16. Missing OpenGraph metadata

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/cart/
- **Rule:** `tier2.meta.no-og`

**What it means (plain English)**

Your cart page is missing OpenGraph tags — special metadata that controls how your site appears when shared on Facebook, Instagram, or other social platforms. Without these tags, the preview will look generic or broken, discouraging customers from clicking through.

**Why it matters for your business:** Cart abandonment often leads to social sharing (customers ask friends about products); a broken preview reduces click-through rate and perceived legitimacy when shared.

**Technical root cause:** The cart page template in WordPress is not generating og:title and og:image meta tags in the HTML head. This typically happens when the SEO plugin or theme isn't configured to populate social metadata on dynamic pages like cart.

**Recommended fix — step by step**

1. Install or verify Yoast SEO is active (Plugins → Installed Plugins). If not installed, go to Plugins → Add New, search 'Yoast SEO', install and activate.
2. Go to Yoast SEO → Search Appearance → Social. Enable 'Facebook' and upload a default OG image (at least 1200×630px).
3. Go to Pages → Cart (or the page that serves your cart). Scroll to Yoast SEO meta box at bottom. In the 'Social' tab, upload a cart-specific og:image or leave blank to use the default.
4. If using a different SEO plugin (e.g., Rank Math, All in One SEO), follow their social metadata UI; the principle is the same.
5. Alternatively, if no SEO plugin is active, add this line to your theme's functions.php or a custom plugin: `add_theme_support('title-tag')` and use a WordPress social meta plugin like 'Social Meta Tags for WordPress'.
6. Test the fix using Facebook's Sharing Debugger (facebook.com/sharing/debugger) — paste the cart URL and verify og:title and og:image appear in the preview.

### 17. Missing OpenGraph metadata

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Moderate (1-3 hours)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/my-account/
- **Rule:** `tier2.meta.no-og`

**What it means (plain English)**

When someone shares your My Account page on social media (Facebook, Twitter, etc.), there's no custom image or title showing up—instead, the platform guesses or shows nothing. OpenGraph tags are the instructions you give to social networks about what to display when your content is shared.

**Why it matters for your business:** Missing social preview metadata reduces click-through rates on shared links and makes your brand look unprofessional if customers accidentally share account pages; for a fun cannabis brand, this is a missed engagement opportunity.

**Technical root cause:** The My Account page (and likely other pages) lack og:title and og:image meta tags in the HTML head. WordPress doesn't add these automatically unless a plugin like Yoast SEO, Rank Math, or All in One SEO is configured and active.

**Recommended fix — step by step**

1. Install and activate Yoast SEO (free version) from WordPress Plugins → Add New
2. Go to Yoast SEO → Settings → Integrations and connect your site's social media profiles (especially Facebook)
3. Navigate to each page (including My Account) and edit its Yoast snippet preview to set a custom og:title (e.g., 'My Account – Cottonmouth') and upload an og:image (recommended 1200×630px)
4. For My Account specifically, use a branded social preview image—avoid generic or sensitive account info imagery
5. Run a social share test: go to facebook.com/sharer/debugger and paste your My Account URL to confirm og:title and og:image now appear

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

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/my-account/
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Two images on your account page don't have alt text—descriptive labels that screen readers read aloud and search engines use to understand images. This makes the page harder for visitors using assistive technology and misses a small SEO signal. Since this is your account/login area with likely just icons or logos, the impact is minor.

**Why it matters for your business:** Customers using screen readers won't know what those images represent, creating a poor experience; also a minor SEO miss, though login pages aren't typically ranked heavily.

**Technical root cause:** The <img> tags on that page lack the 'alt' attribute entirely, leaving no fallback text for accessibility tools or search engines.

**Recommended fix — step by step**

1. Log into WordPress admin → Pages → My Account
2. Click Edit with Gutenberg (block editor) or classic editor depending on your setup
3. Locate each image block in the page content
4. Click the image → in the right sidebar under Image settings, find 'Alt text' field
5. Write a short, descriptive phrase for each (e.g., 'Login account icon' or 'Dispensary logo')
6. Click Update/Publish to save

### 19. Missing OpenGraph metadata

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** revenue
- **Page URL:** https://getcottonmouth.com/sign-up/
- **Rule:** `tier2.meta.no-og`

**What it means (plain English)**

When someone shares your sign-up page on Facebook, Instagram, or other social platforms, those sites look for Open Graph tags (special HTML code that tells them what title and image to display). Your sign-up page is missing these tags, so social platforms will either show nothing or pull random text/images, making your page look unprofessional when shared.

**Why it matters for your business:** Poor social sharing preview directly reduces click-through rates when customers share referral links or when you promote sign-ups on social media—costing you acquisition and word-of-mouth growth.

**Technical root cause:** The sign-up page template lacks og:title and og:image meta tags in the HTML head section. WordPress doesn't add these automatically; they require either manual addition or an SEO plugin like Yoast SEO or Rank Math.

**Recommended fix — step by step**

1. Install and activate Yoast SEO (free version) from wp-admin → Plugins → Add New
2. Go to wp-admin → Yoast SEO → General → Social, and enable Facebook and Instagram integration
3. Navigate to wp-admin → Pages → Sign Up, scroll to the Yoast SEO meta box, and fill in the Social Title and Social Image fields
4. Upload a 1200×630px branded image (e.g., your logo on a colored background) to use as the og:image for the sign-up page
5. Save the page and test the preview using Facebook's Sharing Debugger (facebook.com/sharing/debugger/) to confirm og:title and og:image now appear

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

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/sign-up/
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Two images on your sign-up page don't have alt text—a short text description that tells search engines and people using screen readers what the image shows. This makes the page harder to use for visitors with visual impairments and gives search engines less information about your content.

**Why it matters for your business:** Missing alt text limits your SEO visibility in image search results and makes your site less welcoming to customers who rely on screen readers, potentially violating accessibility standards that could expose you to legal risk.

**Technical root cause:** The image elements in your HTML lack the 'alt' attribute, which is required for accessibility compliance and helps search engines index images correctly.

**Recommended fix — step by step**

1. Log into your WordPress admin dashboard and navigate to Media → Library
2. Search for images used on the /sign-up/ page (likely your logo and any promotional graphics)
3. Click each image and scroll down to the 'Alt Text' field in the sidebar
4. Write a brief, descriptive alt text for each (e.g., 'Cottonmouth cannabis product logo' or 'Sign up form background')
5. Save changes and clear your WordPress cache if you use a caching plugin like WP Super Cache
6. Verify the fix by visiting https://getcottonmouth.com/sign-up/ and using a browser inspector (right-click image → Inspect) to confirm the alt attribute is now present

### 21. Missing OpenGraph metadata

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/test/
- **Rule:** `tier2.meta.no-og`

**What it means (plain English)**

Your website is missing OpenGraph tags — special code that tells social media platforms (Facebook, Instagram, LinkedIn) what title and image to display when someone shares your link. Without these tags, shared posts look plain and generic, which reduces click-through rates.

**Why it matters for your business:** When customers share your products or promotions on social media, the preview looks unprofessional and fails to drive traffic back to your site, directly reducing word-of-mouth visibility and repeat visits.

**Technical root cause:** WordPress theme or SEO plugin (likely Yoast SEO, Rank Math, or All in One SEO) is not configured to automatically generate og:title and og:image meta tags, or the page itself lacks featured images and proper title setup.

**Recommended fix — step by step**

1. Install Yoast SEO (free version) if not already active: WordPress Admin → Plugins → Add New → search 'Yoast SEO' → Install → Activate
2. Go to Yoast SEO → General → Features and enable Social media features if disabled
3. Navigate to WordPress Admin → Posts/Pages → edit the affected page (/test/) → scroll to Yoast meta box → ensure 'Featured Image' is set (upload one if missing)
4. In Yoast meta box, check 'Social' tab and verify og:title and og:description are auto-populated; if blank, edit the Yoast snippet title/description
5. Go to Yoast SEO → Social → Facebook and Instagram, and paste your brand's social media profile URLs to ensure platform-specific settings are active
6. Test the fix: open https://getcottonmouth.com/test/ in Facebook Sharing Debugger (facebook.com/sharer/debug/), paste URL, and confirm og:title and og:image appear in preview

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

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/test/
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Two images on your test page don't have alt text — descriptive text that explains what each image shows. This text is read aloud by screen readers (software that helps blind and low-vision visitors navigate your site) and is also used by search engines to understand your images. Without it, both visitors and search engines miss important context.

**Why it matters for your business:** Missing alt text reduces your SEO ranking for image searches, blocks access for customers using assistive technology, and may expose you to accessibility compliance claims — particularly risky in the cannabis industry where regulatory scrutiny is high.

**Technical root cause:** Images were inserted into the page without the alt attribute populated in the HTML. This is typically an oversight during content creation or page building.

**Recommended fix — step by step**

1. Log into WordPress admin and navigate to Pages → test (or find the affected page in your editor).
2. Switch to the Block Editor or Classic Editor view for that page.
3. Click on the first image to select it.
4. In the right sidebar under Image Settings, locate the Alt text field and write a brief, descriptive phrase (e.g., 'Cottonmouth cannabis product packaging' or 'dispensary storefront interior').
5. Repeat for the second image.
6. Click Publish or Update to save changes.
7. Run a quick check: visit https://getcottonmouth.com/test/ in a fresh browser and hover over each image to confirm the alt text appears (or use a free tool like WAVE to verify).

### 23. Missing OpenGraph metadata

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/merch/
- **Rule:** `tier2.meta.no-og`

**What it means (plain English)**

Your merchandise page is missing OpenGraph metadata — special tags that control how your page appears when shared on Facebook, Instagram, Twitter, and other social platforms. Without these tags, social shares show a generic preview instead of your custom title and product image, which reduces click-through rates from social traffic.

**Why it matters for your business:** Social shares of your merch page will display poorly and drive fewer clicks back to your site, directly reducing traffic and potential merchandise sales from social referrals.

**Technical root cause:** The page template or WordPress SEO plugin is not outputting og:title and og:image meta tags in the <head> section. This is typically a missing configuration in Yoast SEO, Rank Math, or the theme's social sharing settings.

**Recommended fix — step by step**

1. Log in to WordPress admin → Dashboard → Yoast SEO (or Rank Math if installed) → go to the Merch page edit screen
2. Scroll to the Yoast/Rank Math preview panel at the bottom of the editor
3. Check if 'Social Templates' or 'Social Preview' is enabled; if not, enable it
4. Ensure a featured image is set on the merch page (WordPress → Featured Image in the right sidebar)
5. In Yoast/Rank Math settings, verify that 'Add Open Graph meta tags' is enabled: go to SEO → Settings → Social → toggle 'Add Open Graph meta tags' to ON
6. Save and clear any page cache (if using WP Super Cache, W3 Total Cache, or similar: go to the cache plugin settings → Purge cache)
7. Re-check the page source (right-click → View Page Source, search for 'og:title' and 'og:image') to confirm tags are now present

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

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/merch/
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Two product images on your merchandise page lack alt text—descriptive labels that screen readers use to tell visually impaired visitors what's in the image. Without alt text, those visitors miss out on product details, and search engines can't understand what the images show, which weakens your SEO.

**Why it matters for your business:** Missing alt text reduces discoverability of your merch products in image search and makes your site less accessible to customers using screen readers, potentially losing sales and creating legal exposure under accessibility standards.

**Technical root cause:** Images were uploaded to WordPress without filling in the alt text field during upload, or alt text was left blank when the image was inserted into the page.

**Recommended fix — step by step**

1. Log in to WordPress admin → go to Merch page → click Edit
2. In the page editor, locate the first image without alt text (hover to see which ones are missing descriptions)
3. Click the image → in the right panel under Image settings, fill in the Alt text field with a clear, product-focused description (e.g., 'Cottonmouth branded water bottle, white with logo')
4. Repeat for the second image with a unique, descriptive alt text
5. Click Publish/Update to save changes
6. Optionally, use the WordPress Media Library to bulk-review all images on the site: Admin → Media → sort by alt text to find other missing instances

### 25. Description length 68 chars

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/checkout/
- **Rule:** `tier2.meta.description-length`

**What it means (plain English)**

Your checkout page's meta description — the short text that appears under your link in Google search results — is only 68 characters long. Google recommends 80–160 characters so the full message displays without being cut off. A truncated description may hurt click-through rates because customers don't see your complete value proposition.

**Why it matters for your business:** A weak checkout page description in search results reduces the chance that shoppers will click through to complete a purchase, directly impacting conversion rate and revenue.

**Technical root cause:** The meta description tag in the <head> of the checkout page is too short. WordPress may have auto-generated a brief description, or it was manually set without meeting the length guideline.

**Recommended fix — step by step**

1. Log into WordPress admin and navigate to the checkout page editor (Pages → Checkout).
2. Scroll to the Yoast SEO metabox (or equivalent SEO plugin you use) at the bottom of the page.
3. Locate the 'Meta description' field and expand it.
4. Replace the current description with one 100–150 characters that includes your key checkout benefit (e.g., 'Secure checkout. Fast delivery. Cannabis products shipped to your door. Complete your order in minutes.').
5. Check the character counter in the plugin to confirm you're within range (plugin will show green if correct).
6. Click 'Update' to save the change.

### 26. Missing OpenGraph metadata

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/checkout/
- **Rule:** `tier2.meta.no-og`

**What it means (plain English)**

Your checkout page is missing OpenGraph tags—special code that tells social platforms (Facebook, Instagram, LinkedIn) what to display when someone shares your site. Without these tags, social shares look unprofessional and don't drive traffic back to your site.

**Why it matters for your business:** When customers share your checkout page or product links on social media, the preview will be blank or generic, reducing click-through rates and losing potential repeat business.

**Technical root cause:** WordPress doesn't automatically generate OpenGraph tags unless you use an SEO plugin or manually add them to your theme's header. Most WordPress installs lack this setup by default.

**Recommended fix — step by step**

1. Install a free SEO plugin: go to WordPress Admin → Plugins → Add New, search for 'Yoast SEO' or 'Rank Math', install and activate
2. In the plugin settings, enable OpenGraph and Twitter Card generation (usually under Settings → SEO / Social)
3. Edit the checkout page in WordPress Admin → Pages → Checkout, scroll to the plugin's meta box, add a Title and Featured Image (the image will become og:image)
4. Regenerate your sitemap: plugin dashboard → Tools → Regenerate → confirm
5. Test with Facebook's Sharing Debugger (facebook.com/developers/tools/debug/sharing) — paste your checkout URL and verify og:title and og:image appear

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

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** accessibility
- **Page URL:** https://getcottonmouth.com/checkout/
- **Rule:** `tier2.a11y.img-missing-alt`

**What it means (plain English)**

Two images on your checkout page don't have alt text—descriptive labels that screen readers use to understand images, and that search engines use to index visual content. This means customers using screen readers can't understand what those images show, and you're missing a small SEO opportunity.

**Why it matters for your business:** Checkout accessibility barriers can reduce conversions for customers with vision impairments, and missing alt text slightly weakens SEO for product/brand visibility.

**Technical root cause:** Images were uploaded or inserted in WordPress without filling in the Alt Text field in the media uploader or block editor.

**Recommended fix — step by step**

1. Log into WordPress admin → go to Media Library → search for images used on /checkout/
2. For each image missing alt text, click Edit → scroll to Alt Text field → write a brief description (e.g., 'Cannabis flower product in glass jar' or 'Order confirmation icon')
3. Alternatively, navigate to Pages → Checkout → edit with block editor → click each image → fill Alt Text field in the right sidebar
4. Save changes and publish
5. Test checkout page with a screen reader (Windows: NVDA free; Mac: built-in VoiceOver) or browser extension to confirm alt text is read aloud

### 28. Missing OpenGraph metadata

- **Severity:** P3   |   **Priority:** 🟡 MEDIUM
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/contact/
- **Rule:** `tier2.meta.no-og`

**What it means (plain English)**

Your contact page doesn't have Open Graph tags — special metadata that controls how the page appears when shared on Facebook, Instagram, Twitter, and other social platforms. Without these tags, your link preview will be generic or blank, making shares look unprofessional and reducing click-through rates from social traffic.

**Why it matters for your business:** When customers share your contact page or product links on social media, they won't see an appealing preview image or custom title, which reduces trust and discourages others from clicking through to your dispensary.

**Technical root cause:** The page is missing og:title and og:image meta tags in the HTML head. WordPress doesn't add these automatically; they must be added via a plugin, theme settings, or manual code.

**Recommended fix — step by step**

1. Install and activate the free 'Yoast SEO' plugin (Plugins → Add New → search 'Yoast SEO')
2. Go to Yoast SEO → General → Social → connect your Facebook app (or skip if not ready, Yoast adds defaults)
3. Edit the Contact page (Pages → Contact) and scroll to the Yoast SEO box at the bottom
4. Under the 'Social' tab in Yoast, set a custom og:title (e.g., 'Contact Cottonmouth Cannabis Dispensary') and upload a og:image (recommend 1200×630px with your logo or store photo)
5. Save and publish; test the preview by pasting the contact URL into facebook.com/sharer or Twitter Card validator

### 29. Title length 74 chars

- **Severity:** P3   |   **Priority:** ⚪ LOW
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/2024/02/lets-be-clear-medical-vs-recreational-cannabis/
- **Rule:** `tier2.meta.title-length`

**What it means (plain English)**

Your page title is 74 characters long, but search engines display best with 50–60 characters on desktop and 20–65 on mobile. Titles longer than 65 characters risk being cut off in Google search results, hiding your brand name or key message. This particular title loses visibility because visitors won't see the full text.

**Why it matters for your business:** Truncated titles in search results reduce click-through rates, meaning fewer people visit this educational content from your organic search traffic.

**Technical root cause:** The page title combines a long article headline ('Let's Be Clear: Medical vs. Recreational Cannabis') with the full site name ('Cottonmouth Dispensary'), exceeding the 65-character soft limit that search engines respect.

**Recommended fix — step by step**

1. Log into WordPress admin → go to Posts → edit the post 'Let's Be Clear: Medical vs. Recreational Cannabis'
2. Scroll to the Yoast SEO plugin box at the bottom of the editor (or check if using All in One SEO – look for 'SEO' tab)
3. Find the 'SEO Title' field and replace with: 'Medical vs. Recreational Cannabis | Cottonmouth' (59 chars)
4. Click the green preview icon next to the title field to confirm it displays fully in the mock Google search result
5. Save the post
6. Repeat this check for other long-titled blog posts using WordPress Admin → Posts → List view, scanning the Yoast readability column

### 30. Title length 78 chars

- **Severity:** P3   |   **Priority:** ⚪ LOW
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/2024/02/beyond-thc-the-intriguing-world-of-cannabis-terpenes/
- **Rule:** `tier2.meta.title-length`

**What it means (plain English)**

Your page title is 78 characters long, but search engines like Google typically display 50–60 characters on desktop and fewer on mobile. When your title exceeds this, Google cuts it off mid-sentence, showing "Beyond THC: The Intriguing World of Cannabis Terpenes | Cottonmouth..." instead of the full text. This truncation weakens the message and can reduce click-through rates from search results.

**Why it matters for your business:** Potential customers searching for terpene information won't see your full brand name or value proposition, making them less likely to click your link over competitors who have concise, fully-visible titles.

**Technical root cause:** The page title combines a descriptive phrase, a separator, and the site name, totaling 78 characters. Search engine display guidelines recommend 50–60 characters for optimal visibility across all devices.

**Recommended fix — step by step**

1. Log into WordPress admin → go to the blog post "Beyond THC: The Intriguing World of Cannabis Terpenes"
2. Edit the post and scroll to the Yoast SEO meta box (or All in One SEO, depending on your plugin)
3. Find the "SEO Title" field (not the post title) and shorten it to 50–60 characters, e.g.: "Cannabis Terpenes: Beyond THC | Cottonmouth"
4. Check the preview bar in the SEO plugin to confirm the title displays fully in Google search results
5. Click "Update" and verify the change on the live site by searching Google or checking Google Search Console

### 31. Title length 68 chars

- **Severity:** P3   |   **Priority:** ⚪ LOW
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/2024/02/lets-be-clear-delta-8-thc-vs-delta-9-thc/
- **Rule:** `tier2.meta.title-length`

**What it means (plain English)**

Your blog post title is 68 characters long, which exceeds the recommended maximum of 65 characters. In search results, Google typically displays 50–60 characters on desktop before truncating with an ellipsis (…). This particular title will be cut off, hiding the 'Dispensary' brand identifier that users see in search.

**Why it matters for your business:** Searchers won't see your brand name in the search result snippet, reducing click-through rate and making it harder for customers to identify you as a dispensary rather than a general educational site.

**Technical root cause:** The WordPress page title (set via Yoast SEO or the native title field) concatenates the post name with the site name suffix, pushing the total over the 60-char practical limit that search engines display without truncation.

**Recommended fix — step by step**

1. Log into WordPress admin → Posts → edit the 'Lets Be Clear: Delta-8 THC vs. Delta-9 THC' post
2. Scroll to the Yoast SEO meta box at the bottom (or check the 'Document' panel if using block editor)
3. Click 'Edit snippet' and shorten the SEO title to: 'Delta-8 vs. Delta-9 THC | Cottonmouth' (54 chars)
4. Verify the preview shows the full title + brand without truncation
5. Click 'Update' to save the post

### 32. Missing OpenGraph metadata

- **Severity:** P3   |   **Priority:** ⚪ LOW
- **Effort:** Quick win (< 30 min)
- **Business category:** polish
- **Page URL:** https://getcottonmouth.com/privacy-policy/
- **Rule:** `tier2.meta.no-og`

**What it means (plain English)**

Your privacy policy page is missing OpenGraph tags—special metadata that tells social platforms (Facebook, LinkedIn, etc.) what title and image to display when someone shares the link. Right now, if a customer shares your privacy page, social media won't know what preview image or headline to show, making the share look broken or generic.

**Why it matters for your business:** Reduced click-through rates on social shares of your privacy policy; lost brand consistency in how your brand appears when customers or advocates share compliance-related content.

**Technical root cause:** WordPress is not automatically generating or the theme is not injecting og:title and og:image meta tags into the page <head> for this URL, likely because the page was created before an SEO plugin was configured or the plugin excludes policy pages from auto-generation.

**Recommended fix — step by step**

1. Install or verify Yoast SEO plugin (free version is sufficient): go to Plugins → Add New, search 'Yoast SEO', click Install Now.
2. Activate Yoast SEO, then navigate to the privacy-policy page in WordPress admin (Pages → Privacy Policy).
3. Scroll to the Yoast SEO meta box at the bottom; under the 'Social' tab, ensure 'Show in social preview' is enabled.
4. Add an og:image: click the social preview, upload or select a branded image (recommend 1200×630px showing your Cottonmouth logo or product).
5. Verify og:title is populated (Yoast defaults to your page title; customize if needed).
6. Click Update, then use Facebook's Sharing Debugger (facebook.com/developers/tools/debug/sharing) to validate the tags are live.

### 33. Missing OpenGraph metadata

- **Severity:** P3   |   **Priority:** ⚪ LOW
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/terms-of-service/
- **Rule:** `tier2.meta.no-og`

**What it means (plain English)**

Your Terms of Service page doesn't include OpenGraph tags—these are special HTML snippets that tell social media platforms (Facebook, Twitter, LinkedIn) what to show when someone shares your link. Without them, social platforms use generic fallbacks, making your shared links look unprofessional and reducing click-through rates.

**Why it matters for your business:** When customers share your terms page or other content on social media, it displays poorly, reducing traffic from social referrals and making your brand look less polished compared to competitors.

**Technical root cause:** The page or site-wide WordPress SEO plugin (Yoast, Rank Math, All in One SEO) is not configured to generate og:title and og:image tags, or they've been disabled for this specific page.

**Recommended fix — step by step**

1. Log into WordPress admin → install or activate Yoast SEO (free version includes OG tags) if not already active
2. Go to Yoast SEO → Settings → Social → toggle 'Add Open Graph meta tags' to ON
3. Navigate to Pages → Terms of Service → edit → scroll to Yoast SEO meta box → under 'Social preview' ensure og:title is populated (should auto-fill from page title) and og:image is set to a branded image or logo
4. If using a different plugin (Rank Math, All in One SEO), follow their equivalent steps: look for 'Social' or 'Open Graph' settings in that plugin's admin panel
5. Test the fix using Facebook's Sharing Debugger (facebook.com/sharing/debugger/) — paste the Terms URL and confirm og:title and og:image now appear

### 34. Description length 68 chars

- **Severity:** P3   |   **Priority:** ⚪ LOW
- **Effort:** Quick win (< 30 min)
- **Business category:** seo
- **Page URL:** https://getcottonmouth.com/cart/
- **Rule:** `tier2.meta.description-length`

**What it means (plain English)**

Your cart page's meta description—the text that appears below your page title in Google search results—is only 68 characters long. Google typically displays 80–160 characters, so you're leaving real estate empty. This is a minor visibility issue, not a critical problem.

**Why it matters for your business:** A fuller, more descriptive summary of your cart page in search results may encourage clicks and set clearer expectations for visitors arriving from Google.

**Technical root cause:** The meta description tag in the HTML head of the cart page is shorter than the recommended range. WordPress may be auto-generating a truncated description, or one was manually set too briefly.

**Recommended fix — step by step**

1. Log into WordPress admin → Pages → Cart (or Products → Cart, depending on your setup).
2. Scroll to the SEO plugin section (Yoast, Rank Math, or All in One SEO, depending on what you use) and locate the meta description field.
3. If you use Yoast: click the Readability tab → Edit snippet → update Description to 100–120 characters, e.g., 'Proceed to checkout securely. Review your order, apply promo codes, and complete your purchase at Cottonmouth.'
4. If you use Rank Math: click the Rank Math section → Meta → Description field and expand to 100–120 characters.
5. If no SEO plugin: edit the page → add or update the `<meta name="description" content="...">` tag in the page head (may require theme customization or a code snippet plugin).
6. Preview the change and save.

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/contact/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/locations/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 37. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/shop-cottonmouth-dispensary/
- **Rule:** `tier2.meta.no-og`

**Detail**

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

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/shop-cottonmouth-dispensary/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 39. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/glass-art/
- **Rule:** `tier2.meta.no-og`

**Detail**

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

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/glass-art/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 41. Description length 67 chars

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/glass-art/artist-application/
- **Rule:** `tier2.meta.description-length`

**Detail**

Description should be 80-160 chars.

### 42. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/glass-art/artist-application/
- **Rule:** `tier2.meta.no-og`

**Detail**

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

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/glass-art/artist-application/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/shop/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 45. Description length 35 chars

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/events/
- **Rule:** `tier2.meta.description-length`

**Detail**

Description should be 80-160 chars.

### 46. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/events/
- **Rule:** `tier2.meta.no-og`

**Detail**

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

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/events/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 48. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/about/
- **Rule:** `tier2.meta.no-og`

**Detail**

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

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/about/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 50. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/terms/
- **Rule:** `tier2.meta.no-og`

**Detail**

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

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/terms/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 52. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/privacy/
- **Rule:** `tier2.meta.no-og`

**Detail**

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

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/privacy/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 54. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/faqs/
- **Rule:** `tier2.meta.no-og`

**Detail**

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

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/faqs/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 56. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/careers/
- **Rule:** `tier2.meta.no-og`

**Detail**

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

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/careers/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product/cottonmouth-dad-hat/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product/moodmats-x-cottonmouth-8/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product/cottonmouth-c-lighter/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 61. Description length 259 chars

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product/black-cottonmouth-dispensary-hoodie/
- **Rule:** `tier2.meta.description-length`

**Detail**

Description should be 80-160 chars.

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product/black-cottonmouth-dispensary-hoodie/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product/cottonmouth-snapback/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 64. Description length 246 chars

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product/cottonmouth-new-jersey-t-shirt/
- **Rule:** `tier2.meta.description-length`

**Detail**

Description should be 80-160 chars.

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product/cottonmouth-new-jersey-t-shirt/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 66. Description length 246 chars

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product/cottonmouth-circle-t-shirt/
- **Rule:** `tier2.meta.description-length`

**Detail**

Description should be 80-160 chars.

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product/cottonmouth-circle-t-shirt/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product/cottonmouth-stainless-steel-tumbler-with-straw/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 69. Title length 76 chars

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/jupiterx-popups/sign-up-popup/
- **Rule:** `tier2.meta.title-length`

**Detail**

Title should be 20-65 chars. Got: "Sign Up Popup | Cottonmouth DispensarySign Up Popup | Cottonmouth Dispensary"

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/jupiterx-popups/sign-up-popup/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 71. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/category/uncategorized/
- **Rule:** `tier2.meta.no-og`

**Detail**

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

### 72. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product-category/tshirts/
- **Rule:** `tier2.meta.no-og`

**Detail**

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

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product-category/tshirts/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 74. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product-category/hoodies/
- **Rule:** `tier2.meta.no-og`

**Detail**

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

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product-category/hoodies/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 76. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product-category/hats/
- **Rule:** `tier2.meta.no-og`

**Detail**

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

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product-category/hats/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 78. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product-category/drinkware/
- **Rule:** `tier2.meta.no-og`

**Detail**

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

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product-category/drinkware/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 80. Missing OpenGraph metadata

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product-category/accessories/
- **Rule:** `tier2.meta.no-og`

**Detail**

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

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/product-category/accessories/
- **Rule:** `tier2.a11y.img-missing-alt`

**Detail**

Images without alt fail a11y + hurt SEO.

### 82. Desktop perf measurement failed

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier3.perf.desktop-fail`

**Detail**

page.goto: Timeout 60000ms exceeded.
Call log:
  - navigating to "https://getcottonmouth.com/", waiting until "networkidle"


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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier5.header.x-content-type-options`

**Detail**

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

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier5.header.referrer-policy`

**Detail**

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

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier5.header.permissions-policy`

**Detail**

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

### 86. SSL Labs grade: unknown

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/
- **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.

### 87. DNSSEC not enabled

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier5.fortress.dnssec-missing`

**Detail**

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

### 88. No CAA DNS records

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/
- **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.

### 89. Lighthouse mobile audit failed to run

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier8.lighthouse.mobile-failed`

**Detail**

The "start lh:runner:gather" performance mark has not been set

### 90. Lighthouse a11y (desktop): 91/100

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier8.lighthouse.a11y-desktop`

**Detail**

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

### 91. Lighthouse bestPractices (desktop): 78/100

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier8.lighthouse.bestPractices-desktop`

**Detail**

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

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

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier8.lighthouse.seo-desktop`

**Detail**

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

### 93. LH desktop: Preconnect to required origins (Est savings of 160 ms)

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier8.lh-opportunity.uses-rel-preconnect-desktop`

**Detail**

Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn how to preconnect to required origins](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/).

### 94. LH desktop: Eliminate render-blocking resources (Est savings of 1,140 ms)

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier8.lh-opportunity.render-blocking-resources-desktop`

**Detail**

Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).

### 95. LH desktop: Minify CSS (Est savings of 3 KiB)

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/
- **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/).

### 96. LH desktop: Minify JavaScript (Est savings of 7 KiB)

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/
- **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/).

### 97. LH desktop: Reduce unused CSS (Est savings of 145 KiB)

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/
- **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/).

### 98. Dutchie menu iframe not found on /, /menu, or /shop

- **Severity:** P3
- **Page URL:** https://getcottonmouth.com/
- **Rule:** `tier-revenue.dutchie.iframe-absent`

**Detail**

No Dutchie iframe detected. If this client uses a different menu provider, add it to clients.yaml dutchieSlug=null + we'll stop flagging.

---

## Findings by Page

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

### https://getcottonmouth.com/
_40 findings on this page_

- **[P1] 2 mixed-content references (http://)** ⚪ LOW
  Your website is served over HTTPS (secure), but two resources are being referenced using HTTP (insecure). Modern browsers will block these resources or show warnings, degrading user trust and potentia
- **[P1] A11y: Inline text spacing must be adjustable with custom stylesheets (×4)** 🔴 DO FIRST
  Your age-gate pop-up and text elements use inline CSS (style="...") to set letter-spacing, which overrides user accessibility preferences. People with dyslexia or low vision often customize text spaci
- **[P1] A11y: Elements must meet minimum color contrast ratio thresholds (×3)** 🔴 DO FIRST
  Three text elements on your homepage use a dark green color (#018242) on a dark gray background (#222222), creating a contrast ratio of only 3.23:1. WCAG accessibility standards require at least 4.5:1
- **[P1] A11y: Frames must have an accessible name** 
- **[P1] A11y: Links must have discernible text (×2)** 🔴 DO FIRST
  Your site has two social media icon links (Instagram and another platform) that don't have readable labels. Screen readers—software that reads web pages aloud for blind and low-vision users—can't tell
- **[P2] 5 image(s) missing alt text** 🟠 HIGH
  Five images on your homepage don't have alt text—a short description that search engines and screen readers use to understand what the image shows. This means customers using assistive technology can'
- **[P2] Mobile perf measurement failed** 🟠 HIGH
  Our automated mobile performance test timed out while trying to load your homepage — the page took longer than 60 seconds to fully load and become interactive. This suggests either genuine slowness on
- **[P2] No H1 on homepage** 
- **[P2] Missing core schema types: LocalBusiness** 🟠 HIGH
  Your site is missing LocalBusiness schema markup — a structured data format that tells Google you operate a physical cannabis retail location. You have Organization and WebSite schema, but LocalBusine
- **[P2] Missing security header: strict-transport-security** 🟠 HIGH
  Your website is missing the Strict-Transport-Security (HSTS) header, which tells browsers to always use HTTPS when visiting your site. Without it, browsers may attempt insecure HTTP connections first,
- **[P2] Missing security header: x-frame-options** 
- **[P2] Missing security header: content-security-policy** 🟠 HIGH
  Your site is missing a Content Security Policy (CSP) header — a security rule that tells browsers which external resources (scripts, images, fonts) are trusted. Without it, attackers could inject mali
- **[P2] 30 tap targets under 44px at mobile-320** 🟠 HIGH
  Your website has 30 clickable elements (buttons, links, menus) that are smaller than 44×44 pixels when viewed on a phone at 320px width. This makes them hard to tap accurately—especially for people wi
- **[P2] 30 tap targets under 44px at mobile-375** 🟠 HIGH
  Your site has 30 buttons, links, and interactive elements that are smaller than 44×44 pixels on mobile devices. This makes them hard to tap accurately—especially for people with motor control challeng
- **[P2] 29 tap targets under 44px at mobile-414** 
- **[P2] 30 tap targets under 44px at tablet-768** 🟠 HIGH
  Your site has 30 interactive buttons, links, or form fields that are smaller than 44×44 pixels when viewed on tablets (like iPads). This makes them hard for users with limited dexterity or large finge
- **[P2] Lighthouse perf (desktop): 73/100** 
- **[P2] A11y: Banner landmark should not be contained in another landmark** 🟡 MEDIUM
  Your site's header (the top navigation and branding area) is nested inside another landmark region, which confuses screen readers. Landmarks are like a map of your page for people using assistive tech
- **[P2] A11y: Contentinfo landmark should not be contained in another landmark** 🟡 MEDIUM
  Your footer (the contentinfo landmark) is nested inside another landmark element instead of sitting at the top level of the page. Think of landmarks like chapters in a book — the footer should be its 
- **[P2] A11y: Document should not have more than one banner landmark** 🟡 MEDIUM
  Your WordPress theme (JupiterX) has created a banner landmark (the HTML5 <header> element with role="banner") that's being detected as a duplicate. Screen readers and assistive technologies use landma
- **[P2] A11y: Document should not have more than one contentinfo landmark** 🟡 MEDIUM
  Your site has multiple footer sections marked as 'contentinfo' landmarks (a special HTML region that tells screen readers 'this is the footer'). Assistive technology users may become confused when enc
- **[P2] A11y: Landmarks should have a unique role or role/label/title (i.e. accessible name) combination (×2)** 🟡 MEDIUM
  Your site has two landmark regions (header and footer) that screen readers cannot distinguish from one another because they lack unique labels. Landmarks are the major structural sections of a page (l
- **[P2] A11y: All page content should be contained by landmarks (×3)** 
- **[P3] Desktop perf measurement failed** 
- **[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] Lighthouse mobile audit failed to run** 
- **[P3] Lighthouse a11y (desktop): 91/100** 
- **[P3] Lighthouse bestPractices (desktop): 78/100** 
- **[P3] Lighthouse seo (desktop): 85/100** 
- **[P3] LH desktop: Preconnect to required origins (Est savings of 160 ms)** 
- **[P3] LH desktop: Eliminate render-blocking resources (Est savings of 1,140 ms)** 
- **[P3] LH desktop: Minify CSS (Est savings of 3 KiB)** 
- **[P3] LH desktop: Minify JavaScript (Est savings of 7 KiB)** 
- **[P3] LH desktop: Reduce unused CSS (Est savings of 145 KiB)** 
- **[P3] Dutchie menu iframe not found on /, /menu, or /shop** 

### https://getcottonmouth.com/glass-art/artist-lineup/
_3 findings on this page_

- **[P3] Description length 26 chars** 🟡 MEDIUM
  Your page's meta description (the snippet shown in Google search results) is only 26 characters long. Google recommends 80–160 characters so your full message displays without being cut off in search 
- **[P3] Missing OpenGraph metadata** 🟡 MEDIUM
  OpenGraph tags are snippets of code that tell social media platforms (Facebook, Instagram, Pinterest, etc.) how to display your page when someone shares a link. Without them, your posts show up with a
- **[P3] 2 image(s) missing alt text** 🟡 MEDIUM
  Two images on your Artist Lineup page don't have alt text—descriptive labels that screen readers read aloud and search engines use to understand what an image shows. This makes the page harder to navi

### https://getcottonmouth.com/cart/
_3 findings on this page_

- **[P3] Description length 68 chars** ⚪ LOW
  Your cart page's meta description—the text that appears below your page title in Google search results—is only 68 characters long. Google typically displays 80–160 characters, so you're leaving real e
- **[P3] Missing OpenGraph metadata** 🟡 MEDIUM
  Your cart page is missing OpenGraph tags — special metadata that controls how your site appears when shared on Facebook, Instagram, or other social platforms. Without these tags, the preview will look
- **[P3] 2 image(s) missing alt text** 🟠 HIGH
  Two images on your cart page don't have alt text — descriptive labels that screen readers read aloud to blind customers and that search engines use to understand image content. This makes those images

### https://getcottonmouth.com/my-account/
_3 findings on this page_

- **[P2] Missing meta description** 🟡 MEDIUM
  Your account page (/my-account/) doesn't have a meta description — the 160-character summary that appears below your page title in Google search results. Without it, Google generates a random snippet 
- **[P3] Missing OpenGraph metadata** 🟡 MEDIUM
  When someone shares your My Account page on social media (Facebook, Twitter, etc.), there's no custom image or title showing up—instead, the platform guesses or shows nothing. OpenGraph tags are the i
- **[P3] 2 image(s) missing alt text** 🟡 MEDIUM
  Two images on your account page don't have alt text—descriptive labels that screen readers read aloud and search engines use to understand images. This makes the page harder for visitors using assisti

### https://getcottonmouth.com/test/
_3 findings on this page_

- **[P2] Missing meta description** 🟠 HIGH
  Your /test/ page doesn't have a meta description — that's the 150-160 character summary that appears below your page title in Google search results. Without it, search engines may auto-generate a snip
- **[P3] Missing OpenGraph metadata** 🟡 MEDIUM
  Your website is missing OpenGraph tags — special code that tells social media platforms (Facebook, Instagram, LinkedIn) what title and image to display when someone shares your link. Without these tag
- **[P3] 2 image(s) missing alt text** 🟡 MEDIUM
  Two images on your test page don't have alt text — descriptive text that explains what each image shows. This text is read aloud by screen readers (software that helps blind and low-vision visitors na

### https://getcottonmouth.com/checkout/
_3 findings on this page_

- **[P3] Description length 68 chars** 🟡 MEDIUM
  Your checkout page's meta description — the short text that appears under your link in Google search results — is only 68 characters long. Google recommends 80–160 characters so the full message displ
- **[P3] Missing OpenGraph metadata** 🟡 MEDIUM
  Your checkout page is missing OpenGraph tags—special code that tells social platforms (Facebook, Instagram, LinkedIn) what to display when someone shares your site. Without these tags, social shares l
- **[P3] 2 image(s) missing alt text** 🟡 MEDIUM
  Two images on your checkout page don't have alt text—descriptive labels that screen readers use to understand images, and that search engines use to index visual content. This means customers using sc

### https://getcottonmouth.com/glass-art/artist-application/
_3 findings on this page_

- **[P3] Description length 67 chars** 
- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/events/
_3 findings on this page_

- **[P3] Description length 35 chars** 
- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/category/uncategorized/
_3 findings on this page_

- **[P2] Missing meta description** 🟡 MEDIUM
  Your category archive page (Uncategorized) has no meta description — the 160-character summary that appears under your page title in Google search results. Without it, Google generates a random snippe
- **[P2] 16 image(s) missing alt text** 🟠 HIGH
  Every image on your site should have alt text — a short text description that displays if an image fails to load, and that search engines and screen readers (used by people with vision disabilities) c
- **[P3] Missing OpenGraph metadata** 

### https://getcottonmouth.com/product-category/tshirts/
_3 findings on this page_

- **[P2] Missing meta description** 🟠 HIGH
  Your T-shirt category page is missing a meta description — the 160-character summary that appears below your page title in Google search results. Without it, Google generates one automatically, which 
- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/product-category/hoodies/
_3 findings on this page_

- **[P2] Missing meta description** 🟠 HIGH
  Your product category page for hoodies doesn't have a meta description — that's the 155-character summary that appears below your page title in Google search results. Without it, Google will auto-gene
- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/product-category/hats/
_3 findings on this page_

- **[P2] Missing meta description** 🟡 MEDIUM
  Your product category page for hats doesn't have a meta description — that's the 155-character summary that appears under your page title in Google search results. Without it, Google will auto-generat
- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/product-category/drinkware/
_3 findings on this page_

- **[P2] Missing meta description** 🟡 MEDIUM
  Your product category page for drinkware doesn't have a meta description — the 160-character summary that appears below your page title in Google search results. Without it, Google generates a random 
- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/product-category/accessories/
_3 findings on this page_

- **[P2] Missing meta description** 🟠 HIGH
  Your Accessories category page doesn't have a meta description — the short text snippet (usually 150–160 characters) that appears below your page title in Google search results. Without it, Google may
- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/2024/02/better-together-exploring-the-entourage-effect/
_2 findings on this page_

- **[P2] 7 image(s) missing alt text** 
- **[P3] Title length 72 chars** 🟡 MEDIUM
  Your page title is 72 characters long, but search engines like Google typically display only the first 50–60 characters in search results on desktop and even fewer on mobile. The end of your title ("|

### https://getcottonmouth.com/2024/02/lets-be-clear-medical-vs-recreational-cannabis/
_2 findings on this page_

- **[P2] 7 image(s) missing alt text** 🟠 HIGH
  Seven images on your blog post about medical vs. recreational cannabis are missing alt text—short descriptions that tell screen readers and search engines what each image shows. This blocks visually i
- **[P3] Title length 74 chars** ⚪ LOW
  Your page title is 74 characters long, but search engines display best with 50–60 characters on desktop and 20–65 on mobile. Titles longer than 65 characters risk being cut off in Google search result

### https://getcottonmouth.com/2024/02/embracing-transparency-the-power-of-phytofacts-reports/
_2 findings on this page_

- **[P2] 9 image(s) missing alt text** 🟠 HIGH
  All 9 images on this blog post are missing alt text — descriptive labels that screen readers use to tell blind/low-vision visitors what an image shows, and that search engines use to understand your c
- **[P3] Title length 80 chars** 🟡 MEDIUM
  Your page title is 80 characters long, but search engines display titles best between 50–60 characters on desktop and 40–50 on mobile. Anything longer gets cut off in search results, making your page 

### https://getcottonmouth.com/2024/02/lets-be-clear-botanical-vs-cannabis-derived-terpenes/
_2 findings on this page_

- **[P2] 7 image(s) missing alt text** 🟠 HIGH
  Seven images on your terpenes article have no alt text—descriptive text that screen readers announce to visually-impaired visitors and that search engines use to understand image content. This blocks 
- **[P3] Title length 80 chars** 🟡 MEDIUM
  Your page title (the blue clickable text in Google search results) is 80 characters long, but Google typically displays only 50–60 characters before cutting it off with '…'. This means your brand name

### https://getcottonmouth.com/2024/02/beyond-thc-the-intriguing-world-of-cannabis-terpenes/
_2 findings on this page_

- **[P2] 7 image(s) missing alt text** 🟠 HIGH
  Every image on your site is missing alt text — descriptive labels that explain what's in the picture. Screen readers (used by people with vision loss) can't describe the images without this, and searc
- **[P3] Title length 78 chars** ⚪ LOW
  Your page title is 78 characters long, but search engines like Google typically display 50–60 characters on desktop and fewer on mobile. When your title exceeds this, Google cuts it off mid-sentence, 

### https://getcottonmouth.com/2024/02/lets-be-clear-delta-8-thc-vs-delta-9-thc/
_2 findings on this page_

- **[P2] 7 image(s) missing alt text** 🟠 HIGH
  Every image on your site is missing alt text — a brief description that screen readers read aloud to visually impaired visitors and that search engines use to understand image content. On this blog po
- **[P3] Title length 68 chars** ⚪ LOW
  Your blog post title is 68 characters long, which exceeds the recommended maximum of 65 characters. In search results, Google typically displays 50–60 characters on desktop before truncating with an e

### https://getcottonmouth.com/sample-page/
_2 findings on this page_

- **[P3] Missing OpenGraph metadata** 🟡 MEDIUM
  Your website is missing Open Graph tags — hidden code that tells Facebook, Instagram, and other social platforms how to display your content when someone shares a link. Without these tags, your posts 
- **[P3] 2 image(s) missing alt text** 🟡 MEDIUM
  Two images on your Sample Page don't have descriptive alt text — text that explains what the image shows. Search engines and assistive technology (screen readers used by people with vision disabilitie

### https://getcottonmouth.com/glass-art/book-glass-studio/
_2 findings on this page_

- **[P3] Missing OpenGraph metadata** 🟡 MEDIUM
  When this page is shared on Facebook, Instagram, or other social platforms, those sites won't have a custom preview image or title to display. Instead, they'll show a generic or broken preview, making
- **[P3] 2 image(s) missing alt text** 🟡 MEDIUM
  Two images on your glass studio booking page don't have alt text — descriptive text that explains what's in the image. Screen readers (used by people with vision loss) can't tell visitors what those i

### https://getcottonmouth.com/privacy-policy/
_2 findings on this page_

- **[P3] Missing OpenGraph metadata** ⚪ LOW
  Your privacy policy page is missing OpenGraph tags—special metadata that tells social platforms (Facebook, LinkedIn, etc.) what title and image to display when someone shares the link. Right now, if a
- **[P3] 2 image(s) missing alt text** 🟡 MEDIUM
  Two images on your Privacy Policy page don't have alt text — descriptive labels that explain what the image shows. Search engines and screen readers (used by people with vision loss) can't understand 

### https://getcottonmouth.com/terms-of-service/
_2 findings on this page_

- **[P3] Missing OpenGraph metadata** ⚪ LOW
  Your Terms of Service page doesn't include OpenGraph tags—these are special HTML snippets that tell social media platforms (Facebook, Twitter, LinkedIn) what to show when someone shares your link. Wit
- **[P3] 2 image(s) missing alt text** 🟡 MEDIUM
  Two images on your Terms of Service page don't have alt text — descriptive text that screen readers use to understand images, and that search engines use to index them. This means visually impaired vi

### https://getcottonmouth.com/sign-up/
_2 findings on this page_

- **[P3] Missing OpenGraph metadata** 🟡 MEDIUM
  When someone shares your sign-up page on Facebook, Instagram, or other social platforms, those sites look for Open Graph tags (special HTML code that tells them what title and image to display). Your 
- **[P3] 2 image(s) missing alt text** 🟡 MEDIUM
  Two images on your sign-up page don't have alt text—a short text description that tells search engines and people using screen readers what the image shows. This makes the page harder to use for visit

### https://getcottonmouth.com/merch/
_2 findings on this page_

- **[P3] Missing OpenGraph metadata** 🟡 MEDIUM
  Your merchandise page is missing OpenGraph metadata — special tags that control how your page appears when shared on Facebook, Instagram, Twitter, and other social platforms. Without these tags, socia
- **[P3] 2 image(s) missing alt text** 🟡 MEDIUM
  Two product images on your merchandise page lack alt text—descriptive labels that screen readers use to tell visually impaired visitors what's in the image. Without alt text, those visitors miss out o

### https://getcottonmouth.com/contact/
_2 findings on this page_

- **[P3] Missing OpenGraph metadata** 🟡 MEDIUM
  Your contact page doesn't have Open Graph tags — special metadata that controls how the page appears when shared on Facebook, Instagram, Twitter, and other social platforms. Without these tags, your l
- **[P3] 3 image(s) missing alt text** 

### https://getcottonmouth.com/shop-cottonmouth-dispensary/
_2 findings on this page_

- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/glass-art/
_2 findings on this page_

- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/about/
_2 findings on this page_

- **[P3] Missing OpenGraph metadata** 
- **[P3] 3 image(s) missing alt text** 

### https://getcottonmouth.com/terms/
_2 findings on this page_

- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/privacy/
_2 findings on this page_

- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/faqs/
_2 findings on this page_

- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/careers/
_2 findings on this page_

- **[P3] Missing OpenGraph metadata** 
- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/product/cottonmouth-c-lighter/
_2 findings on this page_

- **[P2] Missing meta description** 🟡 MEDIUM
  Your product page for the Cottonmouth C Lighter doesn't have a meta description — that's the 160-character summary Google shows under your page title in search results. Without it, Google generates a 
- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/product/black-cottonmouth-dispensary-hoodie/
_2 findings on this page_

- **[P3] Description length 259 chars** 
- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/product/cottonmouth-new-jersey-t-shirt/
_2 findings on this page_

- **[P3] Description length 246 chars** 
- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/product/cottonmouth-circle-t-shirt/
_2 findings on this page_

- **[P3] Description length 246 chars** 
- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/jupiterx-popups/sign-up-popup/
_2 findings on this page_

- **[P3] Title length 76 chars** 
- **[P3] 1 image(s) missing alt text** 

### https://getcottonmouth.com/robots.txt
_1 finding on this page_

- **[P3] robots.txt does not reference sitemap** 🟡 MEDIUM
  Your robots.txt file (the text file that tells search engines how to crawl your site) doesn't list your XML sitemap. A sitemap is a map of all your pages that helps Google find and index them faster. 

### https://getcottonmouth.com/glass-accessories/
_1 finding on this page_

- **[P3] 3 image(s) missing alt text** 🟡 MEDIUM
  Three images on your Glass Accessories page don't have alt text — descriptive captions that explain what each image shows. Search engines and screen readers (used by people with vision loss) can't und

### https://getcottonmouth.com/locations/
_1 finding on this page_

- **[P3] 3 image(s) missing alt text** 

### https://getcottonmouth.com/shop/
_1 finding on this page_

- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/blog/
_1 finding on this page_

- **[P2] 8 image(s) missing alt text** 

### https://getcottonmouth.com/product/cottonmouth-dad-hat/
_1 finding on this page_

- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/product/moodmats-x-cottonmouth-8/
_1 finding on this page_

- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/product/cottonmouth-snapback/
_1 finding on this page_

- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/product/cottonmouth-stainless-steel-tumbler-with-straw/
_1 finding on this page_

- **[P3] 2 image(s) missing alt text** 

### https://getcottonmouth.com/wp-login.php
_1 finding on this page_

- **[P0] Sensitive artifact exposed: /wp-login.php** 🔴 DO FIRST
  Your WordPress admin login page (/wp-login.php) is publicly accessible and returns a successful response. This is a standard WordPress file, but leaving it exposed and unprotected makes it easier for 


---

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