# EV Picked. Maintenance Log

Style rules, quality checklist, and weekly run history for evpicked.com.

## Editorial Style (non-negotiable)

- **ZERO em dashes.** Use periods, commas, or parentheses.
- **ZERO banned phrases:** "delve into", "in today's fast-paced world", "we live in a world where", "game-changer", "revolutionary", "cutting-edge", "the ultimate guide", "elevate your", "unlock the secrets".
- **No first-person hands-on claims.** EV Picked aggregates verified Amazon reviews and manufacturer specs. Never write "I tested," "we tried," or "in our testing." Use "owner reviews note," "verified buyers report," "aggregate review themes show."
- **Tesla trademark hygiene.** Reference "Tesla," "Model Y," "Model 3," "Juniper," "Highland" as descriptive product names only. EV Picked is not affiliated with Tesla, Inc. The affiliate disclosure page states this explicitly.
- **Fitment-first writing.** Every Model Y accessory must specify Juniper (2025-2026) vs Pre-Juniper (2020-2024) vs Universal compatibility. Mis-fitment is the #1 buyer complaint in this niche.

## HTML Quality Rules

- `<a class="card">` only. NEVER `<div class="card">`.
- Internal links use relative extensionless paths: `href="best-tesla-model-y-accessories"` (no `/`, no `.html`).
- Author byline link goes to `/authors/jacob-musselman` (absolute extensionless).
- Sibling-site links use full https URLs with `rel="noopener" target="_blank"`.
- Amazon affiliate links: `https://www.amazon.com/dp/ASIN?tag=chargecomp-20&ascsubtag=evp-<slug>` with `rel="nofollow noopener sponsored" target="_blank"`.
- No hotlinked Amazon product images. Use locally hosted images in `/img/`.

## Mandatory Article Schema

Every article must include three JSON-LD blocks in the head:

1. `Article` schema with `headline` equal to `<title>`, `author` as Person with URL to `/authors/jacob-musselman`, `publisher` as EV Picked Organization.
2. `FAQPage` schema with 4-6 questions and accepted answers (these also appear as visible H3 sections in the article body).
3. `BreadcrumbList` schema with three levels: Home, Category, Article.

## SEO Length Targets

- `<title>` <= 60 characters.
- `<meta name="description">` between 120 and 160 characters.
- `og:title` MUST equal `<title>`.
- Article schema `headline` MUST equal `<title>`.
- Body content 1500 to 2000 words for cornerstone articles.

## Mandatory Article Sections

1. Header with breadcrumb, category label, title, byline, summary, last-updated, FTC disclosure.
2. Fitment note (if Tesla model-year-specific).
3. Top Picks at a Glance (3 verdict cards).
4. Full Comparison Table.
5. Category sections (Cabin and Interior, Exterior and Weather, Charging and Tech, etc.).
6. What Owners Are Saying (paraphrased aggregate themes from verified reviews and subreddits).
7. FAQ section (mirrors FAQPage schema).
8. How We Pick (methodology).
9. Footer with Comparisons, Sibling Sites, Resources, Legal columns.

## Weekly Audit Checklist (before push)

- [ ] Title length <= 60
- [ ] Meta desc 120-160 chars
- [ ] og:title equals title
- [ ] Article headline equals title
- [ ] Zero em dashes, UTF-8 AND entity forms (`grep -cE '\xe2\x80\x94|&mdash;|&#8212;|&#x2014;' *.html`). The UTF-8-only check missed `&mdash;` in methodology.html on 2026-05-23.
- [ ] Zero banned phrases
- [ ] Zero `<div class="card"`
- [ ] All affiliate links use `tag=chargecomp-20`
- [ ] All affiliate links have `rel="nofollow noopener sponsored" target="_blank"`
- [ ] No hotlinked Amazon images
- [ ] Every `<img src="img/...">` reference resolves to a file on disk (`grep -ohE 'src="img/[^"]+"' *.html | sort -u | sed 's|src="||;s|"$||' | while read p; do [ -f "$p" ] || echo "MISSING: $p"; done`). Caught 6 broken refs on 2026-05-23 that step5 had let through.
- [ ] Article includes FTC disclosure above the fold
- [ ] Article includes byline with link to `/authors/jacob-musselman`
- [ ] Article appears in `index.html` cards-grid
- [ ] Article URL is in `sitemap.xml` (extensionless)
- [ ] Article URL is in `_redirects` (the `.html` -> extensionless 301)
- [ ] `<lastmod>` bumped on every file modified in this run
- [ ] Footer "More Guides" or "Comparisons" column updated to include the new article on every existing article page

## Cloud Trigger Pipeline

The weekly trigger (Friday 15:23 UTC recommended) runs Haiku 4.5 with allowed tools: Bash, Read, Write, Edit, Glob, Grep, WebSearch.

| Step | Action |
|---|---|
| 1 | Heartbeat. write a `RUN-STARTED <timestamp>` line to `run-log.md`, commit `chore: heartbeat`. |
| 2 | Read `best-tesla-model-y-accessories.html` as template. |
| 3 | Write 1500-2000 word article with in-place SEO bar checks (title length, meta desc, og:title sync, Article headline sync). Auto-fix loop if any violation. Commit `feat: new article <slug>`. |
| 4 | Add new article to `index.html` (cards-grid) and `sitemap.xml`. Bump `<lastmod>` on every file modified this run. Commit `chore: index + sitemap update`. |
| 4b | Cross-link new article into every other article's footer "More Guides" column via idempotent awk one-liner. Commit `chore: footer cross-link`. |
| 5 | Audit pass: em dashes, banned words, byline/author/og:image/FTC presence, homepage/sitemap coverage, no `<div class="card">`, no hotlinked Amazon images, tag enforcement (only `chargecomp-20`), title/meta length, og:title/headline sync. Auto-fix or block on violations. Commit `chore: audit fixes` if any. |
| 6 | IndexNow ping via `scripts/notify-search-engines.sh`. Commit `chore: indexnow ping`. |
| 7 | Final `RUN-COMPLETE <timestamp>` line in `run-log.md`. Commit `chore: run complete`. |

Each step commits and pushes so partial progress is preserved.

## Run History

| Date | Articles published | Total articles | Notes |
|---|---|---|---|
| 2026-05-14 | best-tesla-model-y-accessories | 1 | Initial launch. 12 SKUs verified via Playwright. Top picks: BASENOR HEPA filter, Wigoo Center Console Organizer Juniper, UGREEN MagSafe mount. |
| 2026-05-14 | best-tesla-model-3-highland-accessories, best-tesla-wireless-phone-chargers, best-tesla-all-weather-floor-mats, best-tesla-cybertruck-accessories | 5 | Manual batch publish (4 articles). |
| 2026-05-15 | best-tesla-screen-protectors | 6 | First weekly run. Matte vs glossy vs privacy. 8 protectors compared (15" main + 8" Juniper rear + Model S/X). |
| 2026-05-22 | best-tesla-mud-flaps-juniper-vs-pre-juniper | 7 | Weekly run. Juniper vs pre-Juniper mud flaps (REEVAA + BASENOR). Pipeline ran but collapsed step2-step6 into one step4b commit (work shipped, granularity drifted). |
| 2026-05-23 | (audit only) | 7 | Audit + cleanup pass. Initial assumption that 2026-05-22 trigger had not fired was wrong (local checkout was 3 commits behind origin); fetch revealed the trigger had run. Fixes applied independently: `&mdash;` em-dash entity in methodology title; missing og:title/og:url/og:description on 404/contact/disclosure/privacy; index.html og:title `&`/`&amp;` mismatch; stale homepage trust-bar stats (22+→50+, 2→3 models); missing Cybertruck cat-card on homepage Browse-by-Model; wrong "23 Picks" copy on featured Model Y card (article is 12). |
| 2026-05-23 | (SERP fix only) | 7 | Round 2 of Search Console audit follow-up. Hero H1 was `<h1>Every Tesla Accessory.<br>Compared...</h1>` with no whitespace character between the two sentences, so `textContent` (Google's parser) saw them concatenated. Inserted a single space before the `<br>`; visual layout unchanged, `textContent` now reads "Every Tesla Accessory. Compared on Fitment, Specs & Price." Same fix applied in parallel on safepicked.com. Round 1 (www->apex Cloudflare Redirect Rule) verified still live: indexed pages went 2 -> 6. |

| 2026-06-12 | (availability audit) | 8 | Live Amazon probe found 7 unavailable links. Floor mats: LASFIT Highland B0DHKRC4XJ->B0CW1NKX4Q (4.5), TAPTES Highland B0CS3M6S1D->SEALIGHT B0FH4S947H (fallback; primary B07ZM823FY would have duplicated the page #1 pick), TAPTES Juniper B0DXQ29S1V->3W B0FDB3798G (4.7), TAPTES pre-Juniper Model Y B09YTGFHGG REMOVED (no verified replacement; page now honestly 12 picks) incl. from same-day trigger article tesla-model-y-floor-mats-juniper-vs-pre-juniper (consolidated onto dual-generation 3D MAXpider). Screen protectors: B078W5RBYB->B0DG25KLZF (generic matte 9H), Tech Armor B07DY6G47Y->Wigoo B0CPDLRCXX. Sunshade: dead Hansshow electric B0F9T1DTZX->B0GK5PD3JC, Hansshow brand + voice-control claims removed (unverifiable). Tier skips to Varies: B0FDWDN8BK (cargo-mats), B0D49MTRNF (cybertruck; also converted numeric Reviews column to qualitative Review Base). Star sync: B0CL4XLLH3 4.6->4.2 (floor mats + Highland page), B0DL5CSXLZ ->4.6. |

| 2026-07-11 | (GSC schema fix, no article change) | 14 | ProfilePage datetime fix. GSC flagged sibling CC's author page: "Invalid datetime value for dateCreated/dateModified" (non-critical) because the v2-profilepage JSON-LD carried date-only values; Google types both as full ISO 8601 DateTime. EVP's identical block fixed proactively (dateCreated 2025-09-01T00:00:00Z, dateModified 2026-07-11T14:18:52Z). Article JSON-LD stays date-only on purpose (valid for Article schema). TRIGGER.md: FATAL-PROFILEPAGE-DATE-ONLY audit gate + datetime author-page bump in step4b. Root-cause detail in CC's maintenance log. |

| 2026-07-12 | (TRIGGER.md cleanup, no article change) | 14 | Stripped the stale OneLink requirement from TRIGGER.md: STEP 2/3 no longer instruct adding the widget (replaced with an explicit do-NOT-add guard; the `dns-prefetch` to amazon.com stays), sticky-cta placement re-anchored to `before <footer>` instead of "after the OneLink script block", and the STEP 3c FIX-OneLink + STEP 5 MISSING_ONELINK greps deleted. The widget itself was removed site-wide 2026-07-06 (dead stub, all-zeros linkid); the checks had false-flagged every article since, per the 2026-07-10 run log. Mirrors CC's 2026-07-06 TRIGGER.md cleanup. |

(Trigger will append new rows on each weekly run.)
| 2026-07-19 | (watchdog + sweep fixes, no new article) | - | best-tesla-cabin-air-filter: EVNV ASIN B09VK7KM46 is a DEAD page (brand delisted); pick replaced with verified Lectron H13 HEPA 2-pack B0DQCWBKSC ($23.99, in stock), EveryAmp retiered Varies -> $ ($18.96 live). Sweep also caught best-tesla-cybertruck-accessories: B0D49MTRNF (was NOVSIGHT Cybertruck cover) now resolves to a Jeep Wrangler cover; replaced with verified sportuli cover B0D46CBH4G ($$, $61.56), orphaned image deleted. TRIGGER.md: Varies-only-for-mats tightened + DEAD/REPURPOSED ASIN rule added; portfolio-verify.sh gained a Varies-outside-mat FATAL gate. |
| 2026-07-19 | (ASIN deep audit fixes, no new article) | - | Portfolio ASIN audit: LASFIT 'Model X trunk mats' B0C9ZZBZTD had been repurposed to a KIA SORENTO cargo mat -> replaced with verified LASFIT Model X floor mats B0CD7NS4LG; dead listings replaced: Wigoo Juniper screen protector B0GFC9WTYB -> LFOTPP 16+8in matte set B0GKMV46MN (2 articles), Alfanxi Alcantara wrap B0CPSCPKGJ -> MEWANT DIY hand-stitch wrap B0GGNXHMY4 ($$), XIREL Cybertruck mount B0GJQZPNY9 -> SiLiANK air-vent mount B0FWRF6SVS, dead 404 electric sunshade B0GK5PD3JC paragraph removed from best-tesla-sunshade-roof; bokman charger tier $$$->$$ (CC fix mirrored). Orphan images deleted. |
| 2026-07-25 | (critical accuracy fix, no new article) | - | Lectron NACS-to-CCS adapter B0FFSKH7BM PURGED from best-tesla-model-y-accessories.html (quick-answer, quick-pick, table row, product block, owner-notes bullet, Jacob's take, ItemList; article now 11 Compared) and index.html home grid. Live listing verified in-browser: "designed exclusively for CCS1 EVs... Not compatible with Tesla vehicles". The article had the direction REVERSED (claimed it let Teslas use CCS stations); flagged by the 2026-07-17 trigger run, fixed today. FAQ kept with corrected answer (real fix for Teslas is Tesla's own CCS Combo 1 adapter, not an Amazon product). UGREEN MagSafe mount B0DSVFMKFN promoted to third quick-pick. TRIGGER.md: queue item 10 (best-nacs-to-ccs-adapter) removed as false-premise topic, item 11 gains a verify-direction guard, Lectron dropped from ASIN pool and revenue-priority list. Orphaned lectron-nacs-to-ccs.jpg deleted. |

| 2026-07-26 | (offer-quality fixes, best-tesla-usb-drive-sentry) | - | In-browser check found 2 of 3 picks unrecommendable: PlaidDrive B09XJR88GX and unbranded dual-sided B0CKPZRF1B both had NO featured offer and 3.8/3.6-star averages. Replaced with Samsung BAR Plus 128GB B07BPG9YX9 (4.7, buybox) and SanDisk Ultra Dual Drive Go 128GB B07YYJRXQR (USB-C+USB-A swivel, buybox). Queue item 11 (NACS-to-J1772) removed as directional false premise per the 07-24 run's own research. TRIGGER.md gains OFFER QUALITY / BRAND FLOOR gate (mirrored to all four sites). Six stale "12 Model Y accessories" related-cards fixed to 11. |

| 2026-08-02 | (verified accuracy audit, no new article) | - | Monthly in-browser ASIN + Tesla-facts audit (Tesla owner's manuals consulted for lift points and USB ports). best-tesla-jack-pads: DEAD B08YFH1JC1 (EVANNEX, "Currently unavailable", 1 review) replaced on all surfaces (quick-pick, verdict, table, ItemList, sticky CTA) with verified Spigen Lifting Jack Pads B0CJL27HLV ($38.99 current / $79.99 LIST, tier $$, 4.6-star, Amazon's Choice, in stock; tier from list price per policy); Steelman 8-puck B0BW4XMXR9 retiered $ -> $$$ ($159.99 list); B0D9GXTYZQ verified $19.98 ($), Potauto B087DYCMZY $9.95 ($); unsafe jack-stand "pinch-weld" FAQ rewritten to Tesla's four designated lift points only (never battery pack or side rails); false "factory tire repair kit" claim removed. best-tesla-usb-drive-sentry: fitment premise corrected (Sentry drive = glovebox USB-A on ALL Model 3/Y incl. Highland/Juniper; console + rear USB-C charge-only since ~Nov 2021), Samsung BAR Plus B07BPG9YX9 promoted to top pick, SUMK B0C48R76TK speeds re-attributed to its listing, all-"See listing" Rating column dropped, fact-checked badge now cites the owner's manual. best-tesla-cybertruck-accessories: FOCSPROD B0FKMPC7Z5 verified live ($24.89, direction correct: J1772 station -> Tesla vehicle incl. Cybertruck); "most popular Level 2 adapter" superlative removed, UL 2252/80A/250V listing-attributed; conforming ItemList added. best-tesla-all-weather-floor-mats: B0FH4S947H "Temporarily out of stock" but orderable, kept with run-log watch flag. best-tesla-screen-protectors: meta/lede rear-screen coverage claim fixed (all 6 picks are 15-inch main screen only). Hero alt honesty: 12 fabricated topic-specific alts on byte-identical generic hero images rewritten truthfully (11 white-Tesla-showroom pages + wireless-chargers gradient + Ford-truck floor-mat heroes + Model 3 pages); raw ASINs stripped from wireless-chargers FAQ JSON-LD. ItemList repairs: id="v2-itemlist" added on cabin-air-filter, jack-pads, highland-wheel-wrap, model-y-accessories, usb-drive-sentry, reevaa-vs-basenor; conforming ItemLists added to cybertruck, cargo-mats, mud-flaps-juniper-vs-pre-juniper. robots.txt: five .md Disallows removed so the _headers X-Robots-Tag noindex can be crawled (headers confirmed covering all five). methodology.html: process claims matched to reality (3-6 picks quality-floor driven, weekly-new + monthly-full audit cadence with last full audit 2026-08-02, ASIN-on-card claim corrected, tier date location corrected); author-bio "my own car/console" line rewritten to research-based framing on 15 articles + index. 9 formulaic "N compared on" meta descriptions rewritten uniquely. One verbatim review quote paraphrased (cargo-mats "spills run off the edges"; Associates 6(t)). dateModified/byline/fact-checked = 2026-08-02 on all 18 articles; sitemap lastmod synced for every page. TRIGGER.md: DO-NOT-USE B08YFH1JC1, Sentry glovebox-USB-A rule, verbatim-review-quote ban, hero-alt honesty rule, Spigen pool entry. |

| 2026-08-02 | (core-update structural remediation, no new article) | 17 | HERO IMAGES: all 17 hero JPGs replaced with unique open-license Wikimedia Commons photos (previously most were byte-identical copies of one showroom shot); every img/hero-*.jpg now has a distinct md5 and a credited source. New image-credits.html page (canonical /image-credits, indexed, in sitemap, "Image credits" footer link added to every page) lists file, Commons source link, photographer, and license (CC BY-SA 4.0 / CC BY 4.0 / CC BY 2.0; photographers Dllu, Alexander-93, Ethan Llamas, S5A-0043, Damian B Oh, Steve Jurvetson, Jengtingchen, Chanokchon, SirAsdof, Chuq, David Wilson, Shixart1985). Cybertruck article hero switched from the shared Model Y file to the new hero-cybertruck.jpg (hero src + og:image); all 17 hero alts rewritten to describe the actual photo. DOORWAY MERGE: reevaa-vs-basenor-tesla-mud-flaps.html (same two ASINs as the generation guide, B0DZXLG3FD + B08VHQSXD1) merged INTO best-tesla-mud-flaps-juniper-vs-pre-juniper.html: new "REEVAA vs BASENOR: The Brand Question Behind the Generation Split" section (brand merits, clip-in vs bolt-in install, support/marketing-claim analysis) plus 2 grafted FAQs (visible + FAQPage schema); install-section wording aligned (REEVAA snap-in clips vs BASENOR bolt-in); ItemList unchanged at 2 items. Slug 301s to the survivor (_redirects top rule; .html rule retargeted to skip the chain); removed from sitemap.xml, index.html grid, comparisons.html hub, llms.txt, every footer More Guides column, and the wheel-wrap related-grid (card now points at the survivor); page + img/hero-reevaa-vs-basenor-tesla-mud-flaps.jpg git rm'd. PRODUCT-THUMB HONESTY: best-tesla-jack-pads.html's four product thumbnails (potauto-aluminum-jack-pad / spigen-jack-pads / steelman-jack-pad-kit / tesla-jack-pads .jpg) were byte-identical copies of one bundle photo presented as four different products; all 7 img occurrences removed from the article and the three orphaned files git rm'd (tesla-jack-pads.jpg kept on disk: it is the actual B0D9GXTYZQ bundle photo still used for that product on the Model Y and Highland hub articles). DE-TEMPLATING: all 17 quick answers rewritten off the sitewide "is our top overall pick... are the standout alternatives" frame (each now leads with the decision rule or use case); shared H2 wording ("What Owners Are Saying" / "How We Pick" / "More Tesla Guides") reworded per article with anchor ids owner-notes/how-we-pick/more-guides kept; the verbatim author-bio paragraph replaced with 5 rotating variants (same facts, no hands-on claims; max 3 uses per variant). TRIGGER.md future-proofing: DATE INTEGRITY rule (step-4b bumps dates only on body-content changes, footer cross-links never qualify, sitemap lastmod must equal Article dateModified); STEP 3a rewritten (new heroes must be md5-unique, sourced from the documented Commons pool, credited in image-credits.html, honest alt; copy-fallback Path B abolished, no-network fallback = reference an existing file); NO FORMULA FRAMES rule + STEP 5 FATAL gates (duplicate-hero md5, quick-answer template string, duplicate H2 wording) + image-credits added to the STEP 5 article-exclusion regex; ANTI-CANNIBALIZATION gate 2b (skip topics whose picks >50% overlap one existing article's ASIN set) and queue pruned: reevaa-vs-basenor, matte-vs-tempered-glass, mud-guards-kit removed with do-not-re-add notes. Dates: all articles already carried dateModified/byline/fact-checked 2026-08-02 from the same-day audit and were substantively edited again today; comparisons.html sitemap lastmod bumped to 2026-08-02 (card removed); footer-only utility-page edits (about/contact/privacy/disclosure/methodology/author) deliberately NOT date-bumped per the new DATE INTEGRITY rule. |
| 2026-08-29 | (monthly ASIN deep audit + shared-hero remediation, no new article) | - | Full portfolio ASIN audit (all 249 live links fetched in logged-in browser). FATAL-SHARED-HERO: the 3 newest trigger articles (best-tesla-aero-wheel-covers, best-tesla-model-y-window-tint, best-tesla-model-y-seat-covers) shipped on the sandbox no-network hero fallback (by-reference reuse) plus cross-article hero thumbnails; each now has its own md5-unique Commons hero (Quicksilver (12) by Damian B Oh; Model Y L Premium interior by Ethan Llamas; Model 3 Aero Wheel by Curlyrnd; credits rows added to image-credits.html) and all cross-article hero thumbnails were removed. DEAD ASINs replaced after in-browser verification: dash-cam-sentry lost both Vantrue picks (B0742J69SQ N2 Pro, B0C3M7HPRT N4 Pro, both Currently unavailable) -> N2X B0D9GRRXH5 ($179.99, 4.3-star) and N4 Pro S B0FXX2693Y ($349.99, 4.2-star), specs re-attributed to the new listings; screen-protectors: Spigen Model S/X 17-inch B09Y78HR5T unavailable -> row+block removed (supplemental); aero-wheel-covers: 3 of 4 picks dead (EVBASE 19in B0DKJMDC75; HALOBLK HALODISC 2 B0DXL2MM2J and RTP B0DXKXQPWN, brand entirely gone from Amazon) -> article restructured to 2 verified picks (EVBASE Juniper B0FBRMDMSP kept, 4.6-star; SIGLIN 19in pre-Juniper B0CFDB4DH2 added, $129.99/$139.99 list, $$, 4.3-star, 'NOT for Juniper' in title) with an honest no-pick note for 20-inch/Gemini/Tempest fitments; seat-covers: OURPLOT B0F5Q5GSF2 dead and SUIYIO B0G6FFB3FM at 3.9-star (below the 4.2 floor) -> both out, MeeKooMay Juniper B0G2G4K2TF in ($249.99, $$$, 4.3-star, excludes 2026 Standard RWD/AWD), article now 3 picks; 10 img tags pointing at 4 nonexistent product-image files removed from seat-covers (trigger wrote refs to images it could not download). TIER fixes (live price vs claimed): B0FBRMDMSP $->$$$; B0GXGK7K92 $->$$ ($126.99); B0GXGNPCT4 $->$$ ($97.99); B0GCJM5KDQ and B0BZGQZJXV $$->$$$ ($189.99 each); B0DHGXNZXM $->$$ ($51.99, cybertruck hub). check-cannibalization.sh on the updated pick sets flags only each article's own set (self-match); no other article shares >50%. WATCH: Steelman B0BW4XMXR9 'Only 1 left'; B0FH4S947H still Temporarily out of stock (existing flag stands). Verify battery clean; deploy + live curl confirmed. |
| 2026-08-29 | (design QA, no article rewrite) | - | Visual conversion review follow-ups: portfolio CSS rule added so product-block divs with no image render single-column (imageless blocks were squeezing text into the 200px image track; hit seat-covers/window-tint after the broken-image cleanup plus jack-pads/screen-protector/cybertruck blocks that had been squeezed since 2026-08-02); homepage secondary CTA count corrected 9 -> 21 guides. |
| 2026-08-30 | (watchdog resolutions + image-alignment sweep) | - | Resolved the 2026-08-30 watchdog LOW: the mats-only price-note clause ('floor-mat sets vary by configuration') removed from 6 non-mat articles (dash-cam-sentry, highland-wheel-wrap, jack-pads, juniper-screen-protector, window-tint, usb-drive-sentry); TRIGGER.md's price-note template fixed so future non-mat articles do not inherit it. IMAGE ALIGNMENT: img/spigen-tempered-glass-screen.jpg (depicts the rear-screen GlasTR Slim product) removed from all 9 placements across best-tesla-screen-protectors, best-tesla-model-y-juniper-screen-protector, best-tesla-model-3-highland-accessories where it stood in for the main-screen B084BNC3FG/B0CHV4WP2C/B0CS1DQPR9; img/spigen-aluminacore-glass.jpg (EZ FIT line box) removed from its GlasTR Slim placements; img/wigoo-matte-screen-highland.jpg removed from the INNOSURE B07FF17DFQ block (Wigoo box shown for an INNOSURE product); both fully-orphaned Spigen image files git-rm'd. Rule of record: a product card carries an image ONLY when the exact linked ASIN's own photo exists in img/ (cardless is compliant; PA-API images become possible once the Associates account qualifies). Methodology page gained a How-This-Site-Is-Produced automation disclosure. |
| 2026-09-09 | (GA4 audit fixes: bot gate + key events + custom dimensions + Search Console link) | - | GA4 audit follow-through (record: ../ga4-audit-2026-09-09/FINDINGS.md). (1) BOT GATE: every page's gtag block replaced by the marked `<!-- v2-ga-gate -->` block via .upgrade_scripts/v2/85_ga_bot_gate.py (idempotent); gtag.js is now injected only when navigator.webdriver is false and the UA is not HeadlessChrome/PhantomJS/Lighthouse. Reason: 55-68% of GA4 sessions on every site were automated Chrome (Singapore/China datacenters, spoofed google referrers with 0% engagement) and GA4 has no country/ASN filter. TRIGGER.md head requirement now names the gated block; the template article carries it. Expect reported sessions to drop by roughly half from today; engaged sessions and affiliate_click should be unaffected. (2) GA4 ADMIN (in the GA UI, property 537926279): affiliate_click confirmed/starred as the key event; phantom key events that never fired (scroll_depth) unmarked; event-scoped custom dimensions registered for affiliate_click parameters link_url ('Affiliate link URL') and product_name ('Product name'), so which product gets clicked is now reportable from 2026-09-09 onward (not retroactive). (3) Search Console link created for this property (evpicked.com domain property -> Web stream); the GA4 Search Console reports were empty before because no link existed. |
| 2026-09-27 | (watchdog note, no article change) | - | B0FH4S947H (SEALIGHT Model 3 Highland floor mats, best-tesla-all-weather-floor-mats) has carried a 'Temporarily out of stock but orderable' watch flag since 2026-08-02 (last in-browser confirmation 2026-08-10). WebSearch today returns the live listing with its title updated to '2024 2025 2026 Tesla Model 3', which suggests the listing recovered, but the sandbox cannot see the buybox: treat as possibly recovered, confirm and close the flag in the next logged-in check. The STALE list (10 articles at dateModified 2026-08-02, flagged 09-04/09-11/09-18/09-25) is a real re-verification pass, not a date bump; still queued for the monthly review. |
| 2026-09-29 | (monthly ASIN deep audit, no new article) | - | Full in-browser sweep (96 EVP ASINs). WRONG PRODUCT: B0C9ZWDHPX was presented as "LASFIT Model S Floor & Trunk Mats" but is the LASFIT Model Y 5-seat 2020-2025 set ("Not Fit Juniper", 4.6-star); relabeled as the restored pre-Juniper Model Y pick, and the Model S slot now points at the 3W Model S mats + cargo liner B0DL5CSXLZ (4.6-star, already in the article). OFFER FLOOR: T Sportline wheel locks B0D2M3QQ8N (3.6-star) replaced in best-tesla-wheel-locks by the McGard 24220 black cone-seat set B0028090JM ($35.48, 4.6-star, M14x1.5); Cybertruck fitment claims removed because no set in the article names Cybertruck; verified ratings filled in (McGard 24019 4.4, Veritek 4.3). DEAD (Currently unavailable): OEDRO B0GSZ6SJB5 -> OEDRO 2024-2026 Cybertruck boards B0FKYJ29ZX ($339.99, $399.99 list, $$$$; "6-inch blade"/no-drill claims dropped as unverified) and EVBASE B0DK6D7YGK removed with an honest "no current pick" card in best-tesla-cybertruck-running-boards; EVBASE Juniper wheel covers B0FBRMDMSP -> B0FBRLCLL2 (same EVBASE spiral covers, rating omitted). TIERS: Spigen jack pads B0CJL27HLV $38.99 with no list price -> $ (was $$); Allen Sports 4-bike rack B00TRTSW46 $178.31 -> $$$ (was $$). WATCH continues: SEALIGHT B0FH4S947H "Temporarily out of stock" but orderable. Trigger hardening as logged in the CC maintenance-log entry of the same date. |
| 2026-10-17 | (portfolio audit fix pass, no new article) | - | AUDIT-2026-10-17 fix pass (all 27 articles + methodology/about/author/index touched; every article bumped to 2026-10-17 in dateModified, byline, Fact-checked badge, and sitemap lastmod). ASINs (all verified in-browser by the owner today): Spigen GlasTR EZ FIT B0CHV4WP2C (Currently unavailable) REMOVED from best-tesla-model-y-juniper-screen-protector, article now 2 picks because the Spigen GlasTR Slim B0CS1DQPR9 was already its lead pick; Tri-Fold Soft Tonneau B0GK64JBFW (404) REMOVED from best-tesla-cybertruck-accessories (12 -> 11, ItemList renumbered) and best-tesla-cybertruck-bed-organizer (3 -> 2), img/cybertruck-tonneau-cover.jpg deleted, no replacement (tonneau topic stays TOPIC-NEEDS-LOCAL-VERIFY); MeeKooMay Juniper seat covers B0G2G4K2TF (3.0-star) -> B0GZKKMMKC "Tesla Model Y Car Seat Covers, Full Set Nappa Leather 2025-2026" ($249.99, $$$, 4.5-star, 5-seat only, Nappa-grade eco-leather, laser-scanned fit; unbranded listing named by its title, the article's one allowed unbranded pick). All three added to scripts/dead-asins.txt. check-cannibalization.sh best-tesla-model-y-seat-covers.html: "cannibalization gate OK: no existing article is a near-duplicate pick set (>50% of the 3 picks AND overlap/union >= 1/2)". WATCH only (not changed): McGard 24019 B000COTWZ8 has no featured offer (never presented as in stock; WATCH line added to TRIGGER.md pool), SEALIGHT B0FH4S947H still temporarily out of stock. SPEC FIXES: best-tesla-model-y-accessories.html:178-179 "12 accessories" -> "11 accessories" (title/JSON-LD already said 11; index.html cards, llms.txt, and related-cards in cargo-mats and wheel-locks aligned); :316 "Matte Screen Protector (16 + 8 inch)" -> "(15.4 + 8 inch)" (same cell in the Juniper screen-protector table, plus its product block now notes the listing rounds 15.4 up to 16; tesla.com itself is unreachable from curl/WebFetch (Akamai 403), the 15.4-inch figure was confirmed against the Juniper launch coverage and notateslaapp's screen reference); every "12 Cybertruck picks" related-card -> 11. PERSONA: owner does not own a Tesla or any EV. index.html intro ("I drive a Model Y. Three Teslas") rewritten to the research story and the "3 Teslas owned" stat became "3 Tesla platforms covered"; all 15 bio-text variants replaced by ONE canonical bio (no ownership/testing claims); about.html "an EV owner" + "personal shopping spreadsheet" rewritten; author page states he does not own a Tesla and does not test products; every in-body "Model Y owner(s)" phrasing reworded; methodology "We do not own Teslas in every trim" -> "We do not own a Tesla or any other EV". METHODOLOGY: pick-count claim "3 to 6 picks" -> "3 to 12 picks for a roundup, 2 for a head-to-head" (true range today: 2 to 12; best-tesla-screen-protectors carries 1 after earlier dead-ASIN removals, flagged below); star floor stated as 4.2 for NEW picks with any sub-floor legacy pick disclosed in-article (no sub-floor pick exists today; lowest is 4.2 in all-weather-floor-mats and mud-flaps); "Claude Haiku 4.5" -> "Claude Opus 5"; last full audit date -> October 17, 2026; Last updated -> October 17, 2026. DATES: gate 19 clean, 12 in-body "verified on <date>" sentences set to October 17, 2026 (every ASIN swept today); Fact-checked badge now equals the byline on all 27 (3 month-only badges normalized, 1 "Fitment verified" badge normalized, badge ADDED to best-tesla-jack-pads); methodology/about/index/comparisons/image-credits/privacy/author sitemap lastmods set to 2026-10-17, contact/disclosure untouched. HEROES: six gradient SVG placeholders replaced with unique Wikimedia Commons photos resized to 1600x840 under 300 KB (bike-rack: Yakima hitch rack, Tony Webster CC BY 2.0; cybertruck-bed-organizer: 2024 Cybertruck rear-left, Cutlass CC0; cybertruck-running-boards: Cybertruck side, Tesla Store Athens, Mpelas199 CC0; pet-barrier: dog in car window, Andrew Pons CC0; wheel-locks: ball-seat wheel lock bolt, Raimond Spekking CC BY-SA 4.0; viofo-vs-vantrue: dash cam on windshield, Danielrayyan09 CC BY 4.0), honest alt text, og:image switched from og-default to each hero, six rows added to image-credits.html, SVGs deleted. SHARED: _headers CSP gained static.cloudflareinsights.com (script-src) and cloudflareinsights.com (connect-src); Person @id https://evpicked.com/authors/jacob-musselman#person on the author page, referenced by every Article.author and by Organization.founder on index.html; ProfilePage dateModified 2026-10-17T18:00:00Z; privacy.html hello@ -> support@evpicked.com; about.html got a Corrections section (id=corrections) linking this log; every article disclosure box got a "Report an error" link to about#corrections. CITATIONS: 59 non-Amazon outbound links added across 27 articles (0 before; every article now has at least 2: a Tesla owner's-manual page or the #1 pick's manufacturer site plus one independent source such as the EPA HEPA definition, the WPC Qi standard, the SD Association speed classes, Washington RCW 46.37.430/46.37.500, the Center for Pet Safety, the IIHS airbag/ADAS overviews, DOE AFDC, and the 2010 DOT floor-mat testimony). Every non-Tesla URL returned HTTP 200 to curl today; the 14 tesla.com owner's-manual URLs could NOT be curl-verified (tesla.com and service.tesla.com return 403 to every non-browser client, including WebFetch); each GUID was confirmed through search-engine index listings showing the page title, so re-check them in the next in-browser audit. 3dmaxpider.com and evbaseusa.com were unreachable (connection failure) and were not cited. INTERNAL LINKS: in-body contextual links added so that zero articles have no in-body inbound and zero have no in-body outbound (was 11 zero-inbound / 12 zero-outbound). NOT DONE / OPEN: best-tesla-screen-protectors.html ItemList carries a single pick after earlier dead-ASIN removals (needs 2+ verified protectors at the next in-browser audit); the tesla.com citations need a browser-side 200 check; B000COTWZ8 and B0FH4S947H remain on WATCH. |

### 2026-10-17 (follow-up, same day): Tesla manual citation check in the browser
- All 14 tesla.com owner's-manual citation URLs were fetched from the logged-in browser (tesla.com 403s curl): 13 return 200 with the expected manual pages; GUID-BF6C4DA5 (cited on best-tesla-model-y-seat-covers as "Front and Rear Seats") was 404/NoSuchKey. Repointed to the live Model Y "Front and Rear Seats (5- or 7-Seater)" page GUID-64C3BD83 and rewrote the sentence to Tesla's actual warning ("Do not use seat covers on a front seat ... could restrict deployment of the seat-mounted side airbags"); the earlier "occupant detection" wording was not on Tesla's page.

### 2026-10-17 (follow-up, same day): real author headshot
- img/jacob-musselman.jpg (600x600, 72 KB, Jacob's own photo) replaces the "JM" initials avatar in every article bio card and the homepage intro, is shown on authors/jacob-musselman.html, and is now the Person.image in the ProfilePage JSON-LD (was og-default.jpg). ProfilePage dateModified re-stamped.
