Forge of Long Island
(631) 651-0722Get a site →
Shipped, not promised

Changelog

Every update Forge has shipped to this site, newest first — nightly SEO improvements, new trade pages, new town pages, and fixes. Same pipeline runs on every site we build.

  1. September 14, 2026links

    Add the HVAC SEO guide to /trades/hvac-long-island and the roofer lead-gen guide to /trades/roofer-long-island — the 2026-09-04 trade→guide cross-link ship skipped both

    'Cross-link each /trades entry to its matching /learn guide' was marked shipped 2026-09-04 (three variants), and the TRADE_GUIDES map in sites/forgelongisland/src/app/trades/[slug]/page.tsx does exist. But the 2026-09-14 crawl proves the two most obvious matches are missing: /trades/hvac-long-island's Further Reading lists only 'Phantom phone line vs. Google Ads' and the 90-day playbook — not /learn/seo-for-hvac-companies-long-island, which is the site's best-ranked commercial page (pos 3.08, 38 impressions, 'long island hvac seo' at pos 2.6 on 33 impressions). /trades/roofer-long-island lists only the 90-day playbook — not /learn/lead-generation-for-roofers-long-island (pos 4.5). The previous ship did not cover these entries. Add { href: '/learn/seo-for-hvac-companies-long-island', label…

    PR #b26df55
  2. September 13, 2026meta

    Shorten the /trades meta description — 174 chars, truncates before 'exclusive lead capture'

    Live metaDescription on /trades is 'Forge builds websites and runs phantom phone lines for Long Island service trades — electricians, plumbers, HVAC, landscapers, handymen. Nightly SEO + exclusive lead capture.' — 174 characters, so Google cuts it around 155 and the 'exclusive lead capture' close never shows. /trades draws 7 impressions at position 13.1 with 0 clicks in 28 days. Replacement is 155 chars, keeps every trade name, and front-loads 'Web design + phantom phone lines'. No /trades meta item appears in recentlyShipped.

    PR #665991e
  3. September 10, 2026meta

    Shorten the homepage meta description — 211 chars, truncates before the phone-line offer

    The live homepage metaDescription runs 211 characters: 'Forge builds custom websites for Long Island service businesses in a week, then keeps shipping SEO and improvements every night. Or rent an exclusive phone line that rings your shop. No contract — Nassau & Suffolk.' Google cuts around 155, so the searcher never sees the phone-line offer or 'Nassau & Suffolk'. The homepage draws 13 impressions at position 8.85 with 0 clicks in 28 days — it is the best-ranked commercial surface on the property and its snippet is being cut mid-sentence. Replacement is 144 chars and leads with the exact 'Long Island web design' phrase.

    PR #d5c8b63
  4. September 9, 2026meta

    Rewrite the /web-design-huntington-ny meta description to lead with 'website design company' and name web developers

    The Huntington title already carries 'Website Design Company', but the description does not, and it is the description that carries the matched phrase into the snippet body. Live metaDescription is 'Web design shop headquartered in Huntington, NY 11743. Custom sites for Huntington Station, Cold Spring Harbor, Northport and Melville — built in a week.' GSC shows 'website design company huntington' at pos 31.6 (19 impressions), 'website design company in huntington' at pos 18.2 (11 impressions), and 'web developer huntington town ny' at pos 64.9 (15 impressions) — none of those exact phrases appear in the description. The replacement stays under the 155-char budget the file's own comment sets.

    PR #f1385d8
  5. September 9, 2026meta

    Rewrite the /web-design-smithtown-ny meta description — the title says 'SEO Company' but the description never mentions SEO

    The Smithtown title retitle landed, but the description did not follow it. Live metaDescription is 'Forge is a Huntington, NY web design shop building sites for Smithtown, St. James, Kings Park, and Hauppauge — live in a week, improved nightly.' — no SEO phrase, no 'web designer'. Meanwhile the page ranks pos 19.2 for 'smithtown seo company' (33 impressions), pos 15.4 for 'search engine optimization smithtown', and pos 11.5 for 'smithtown web designer', all at 0% CTR. The snippet the searcher reads never repeats the phrase they typed.

    PR #aa3d4d9
  6. September 9, 2026meta

    Retitle /web-design-babylon-ny to carry 'SEO Company' — it ranks pos 20.9 for 'seo company babylon' with no SEO term in the title

    GSC shows 'seo company babylon' at position 20.9 on 11 impressions and 'search engine optimization north babylon' at position 49, but the live title is 'Web Design Babylon NY — Website Design Company | Forge' — no SEO phrase anywhere in it. The identical retitle already landed on the Smithtown page (live title verified as 'Smithtown Web Design + SEO Company — Smithtown, NY | Forge'), so this mirrors a pattern already shipped on a sibling page rather than repeating it. New title is 54 chars with the brand token, so nothing truncates.

    PR #6f24e89
  7. September 9, 2026meta

    Rewrite the HVAC guide meta description — the title fix landed and CTR is still 0 at position 2.8

    The title truncation fix shipped and worked: /learn/seo-for-hvac-companies-long-island now serves 'Long Island HVAC SEO: What Ranks and What It Costs | Forge' (58 chars). Position improved to 2.82 for 'long island hvac seo' on 34 impressions, and the page itself sits at pos 3.13 on 38 impressions — still 0 clicks. Title length is no longer the constraint; the description is. The current one runs 172 characters ('What SEO actually moves the needle for Long Island HVAC companies — Nassau/Suffolk local pack rankings, seasonal keyword timing, review volume, and realistic budget ranges.') and truncates around 155, cutting the budget figure that carries the click. Replace with a ≤155-char version that leads with the dollar range.

    PR #c0da90e
  8. September 9, 2026meta

    Retitle /web-design-smithtown-ny to carry the SEO phrasing — the 2026-09-04 retitle did not land

    Shipped 2026-09-04 as 'Retitle /web-design-smithtown-ny to carry the SEO and web designer phrasing it already ranks for', but the 2026-09-06 crawl of the page (200) still shows title 'Web Design Smithtown NY — Website Design Company | Forge' — no 'SEO', no 'designer'. The previous fix did not land. The page's strongest queries are SEO queries it does not name: 'smithtown seo company' 30 impressions at pos 19.7, 'search engine optimization smithtown' 7 at pos 15.4, 'search engine optimization company smithtown' 3 at pos 26.3, plus 'smithtown web designer' 12 at pos 11.5. Set the title to 'Smithtown Web Design + SEO Company — Smithtown, NY | Forge' (57 chars).

    PR #2b5ce73
  9. September 9, 2026fix

    Instrument GA4 lead events — tel: click, /start form_submit, and a generate_lead conversion

    The 28-day GA4 eventCounts contain only session_start (113), page_view (111), first_visit (110), user_engagement (26) and scroll (11). There is no form_submit, no generate_lead, and no tel: click event, so ga4.conversions is 0 by construction. Every crawled page carries a (631) 651-0722 CTA and /start renders a full 8-field work-order form, yet neither is measured. Until these fire, no proposal on this property can be judged on outcome — only on impressions.

    PR #c045fcb
  10. September 9, 2026schema

    Point the /learn Article author at the existing #founder Person node instead of the Organization

    'Add Article schema dateModified refresh + author Person to the 17 /learn guides' is marked shipped 2026-09-04, but the 2026-09-05 crawl of both sampled guides still shows author as {"@type":"Organization","name":"Forge of Long Island"} — the previous fix did not land. The site already publishes a Person node at https://www.forgelongisland.com/#founder ('Nick', jobTitle Founder) in the sitewide @graph, so the change is a one-line reference: author: {"@id":"https://www.forgelongisland.com/#founder"}. Named human authorship is the cheapest E-E-A-T and AI-citability signal available for a 17-guide library that currently ranks pos 3-10 across the board with 1 click in 28 days.

    PR #5dfac98
  11. September 9, 2026fix

    Fix two /changelog rendering bugs — 'PR #https://…' link labels and every entry stamped September 4

    The crawled body renders the literal string 'PR #https://github.com/WebtasticLLC/Forge/commit/ef00922344fff7417fb1b9b31825ddf59478b0fa' — a full commit URL pasted into a 'PR #' label. Separately, every visible entry is dated 'September 4, 2026' even though the underlying items shipped between 2026-07-10 and 2026-09-04; the ledger is stamping the deploy date rather than the item's ship date, so a page selling nightly cadence shows 25 changes on one day and nothing on any other. Render the label as a short SHA linked to the commit, and use each item's own shippedAt for the date heading.

    PR #288ded2
  12. September 9, 2026fix

    Make a 0-page crawl a hard failure — the blind 2026-08-30 run still exited 0 and touched the success heartbeat

    The 2026-08-30 run crawled 0 pages for every one of the 8 properties, yet still finished with exit 0 and touched both success heartbeats (tools/analyzer/nightly.success and ~/ObsidianVault/90-Meta/state/nightly-analyze.success, both stamped Aug 30 05:08). The deadman watcher therefore read the night as healthy while the analyzer was completely blind, and no Discord failure alert fired. That is why the outage survived into a second night. The crawl catch block should record how many of the configured topPaths returned ok=true; if that count is 0 for a property with topPaths configured, the run should exit non-zero so send_failure_alert fires and the heartbeat files are not touched. Partial failures (some pages 200, some not) should stay non-fatal as they are today.

    PR #de2dd6d
  13. September 8, 2026fix

    Self-heal the Playwright chromium install in run-nightly.sh so the crawl stops returning 0 pages

    The 2026-08-30 and 2026-08-31 runs both crawled 0 of 16 configured topPaths. nightly.log line 9101 shows 'browserType.launch: Executable doesn't exist at ~/Library/Caches/ms-playwright/chromium_headless_shell-1223/chrome-headless-shell-mac-arm64/chrome-headless-shell', and that cache directory does not exist on the Mac at all — the browsers were never installed here or were cleared. All 8 properties failed identically, so this is a host problem, not a site problem. Until it is fixed, every nightly report is blind: no titles, meta descriptions, H1s, canonicals or JSON-LD to reason against, and every on-page finding gets suppressed. Adding an idempotent 'playwright install chromium' step before the analyzer run makes the nightly repair itself instead of silently degrading.

    PR #b2e44f5
  14. September 8, 2026fix

    Reinstall the Playwright chromium shell in run-nightly.sh — tonight's crawl returned 0 pages for every property

    The 2026-08-30 run logged "[forgelongisland] crawl failed: browserType.launch: Executable doesn't exist at ~/Library/Caches/ms-playwright/chromium_headless_shell-1223/..." and crawl.pages came back empty, so the analyzer had zero on-page evidence (no titles, meta descriptions, h1s, canonicals or jsonLdBlocks) for all 16 registered topPaths. Playwright wipes its browser cache whenever the npm package bumps its browser build; nothing in run-nightly.sh reinstalls it. Until this is fixed every nightly run is GSC/GA4-only and cannot detect or verify a single on-page issue.

    PR #a31eb2f
  15. September 4, 2026fix

    Make a zero-page crawl a loud failure instead of silently downgrading the night's analysis

    The crawl failure was caught, logged as one line, and the run continued to completion — POSTing proposals, alerts and an SEO score derived from GSC/GA4 only. Nothing in the Discord alert or the dashboard tells the operator that the on-page half of the evidence was missing, so a night of degraded output looks identical to a healthy night. The analyzer should mark the run degraded when crawl.pages.length === 0 while topPaths.length > 0, fire the existing send_failure_alert path, and skip meta/schema/copy proposals for that property rather than letting the model guess at page state.

    PR #de2dd6d
  16. September 4, 2026fix

    Lead instrumentation still not firing — three shipped GA4 fixes have not landed in the event stream

    Shipped 2026-07-05 ('Rebind GA4 key event to generate_lead + phone_click'), and twice before that as generate_lead audits — but the 2026-08-03 GA4 pull still shows eventCounts = {page_view 34, session_start 21, first_visit 14, user_engagement 6, scroll 5} and conversions 0. There is no generate_lead, no form_submit, no phone/tel click event anywhere. The previous fixes did not land. Every crawled page carries a (631) 651-0722 CTA and /start carries the full work-order form, so the tracking surface exists; the events do not. Until this is closed, no ranking or copy change on this property can be evaluated.

    PR #c045fcb
  17. September 4, 2026fix

    Instrument a generate_lead GA4 event — no conversion event exists on the /start form at all

    GA4 reports conversions: 0 over 28 days, and the eventCounts object contains only page_view, session_start, first_visit, user_engagement and scroll. There is no form_submit, no click, no generate_lead — meaning the /start work-order form and the phone-tap CTAs emit nothing measurable. With 3 sessions on /start and 2 on /phantom-phone-line this month the absolute numbers are small, but the pipeline is blind: there is currently no way to tell a zero-lead month from an untracked one, which also makes every future SEO change unattributable.

    PR #c045fcb
  18. September 4, 2026content

    Feed /changelog from real ship data — newest visible entry is June 2025, 13 months stale

    The homepage runs a 'What shipped this week' section and its LocalBusiness/hero claims '168 PRs opened by AI' and '500+ updates shipped'. But the /changelog bodyExcerpt lists only 5 static entries dated April–June 2025 (newest: 'June 1, 2025 — Core Web Vitals pass'). A visitor cross-checking the 'we ship every night' proof point sees a 13-month-old ledger, which reads as abandoned and undercuts the core pitch. Wire the changelog to the actual auto-ship/PR feed so recent nightly ships render with 2026 dates.

    PR #ef00922
  19. September 4, 2026content

    Fix /changelog: broken content served behind a sitewide footer link

    Every page's footer (same template across all 6 crawled pages) lists 'Changelog' under the Product column, linking to /changelog. That page renders only 'The ledger couldn't be generated on this deploy — the pipeline is still shipping nightly.' as its body content — a visible generation failure, not a placeholder. The page also carries `<meta name="robots" content="noindex, follow">`, which keeps it out of search results but does nothing to hide the broken experience from users who click the footer link. Either the pipeline error needs to be resolved so the changelog renders, or the footer link should be removed until it does.

    PR #ef00922
  20. September 4, 2026meta

    Fix /changelog canonical — points to homepage, not itself

    The /changelog page emits <link rel="canonical" href="https://www.forgelongisland.com"/> instead of https://www.forgelongisland.com/changelog. It also inherits the homepage title ('Forge of Long Island — Web design for Long Island service businesses') and homepage description verbatim. Google will treat /changelog as a duplicate of the home page and consolidate any link equity there rather than indexing the changelog on its own URL.

    PR #ef00922
  21. September 4, 2026meta

    Remove noindex from /changelog or accept it won't be indexed

    /changelog carries `<meta name="robots" content="noindex, follow"/>` while every page's footer lists it under the Product section alongside Build & ship, Phone line, and Pricing. The page currently renders a placeholder ('The ledger couldn't be generated on this deploy'), so the noindex may be intentionally temporary — but as long as it persists, Google will never index or surface the changelog as a trust/authority signal, even after the pipeline starts producing real content.

    PR #ef00922
  22. September 4, 2026links

    Add a nav or footer link to /changelog — it is absent from primary nav on all crawled pages

    The primary navigation is identical across all 6 pages (Build → /#build, Phone line → /phantom-phone-line, Pricing → /#pricing, Work → /work, Learn → /learn) and includes no link to /changelog. The footer HTML was truncated in all crawled pages so a footer link cannot be confirmed or ruled out, but /changelog does not appear in any visible internal link across the other 5 pages. A publicly indexed, changelog-schema-marked page with no inbound nav link accumulates no internal PageRank and is practically invisible to visitors.

    PR #ef00922
  23. September 4, 2026content

    Refresh /changelog — newest entry is Jul 5 while the footer claims 'last shipped 4h ago'

    The changelog is the site's proof asset for the core promise ('websites that ship every night', '500+ updates shipped'), and its own ItemList declares numberOfItems 8 with the most recent entry dated July 5, 2026 — 25 days stale as of this crawl. Every crawled page's footer simultaneously renders 'last shipped 4h ago'. A visitor who clicks through from the homepage's 'What shipped this week.' section finds nothing from this month, which actively contradicts the pitch. GSC also shows /changelog earning impressions at avg position 5, so it is being seen.

    PR #ef00922
  24. September 4, 2026meta

    Retitle the HVAC SEO guide to lead with "Long Island HVAC SEO" — it ranks pos 3.7 for that exact query with zero clicks

    GSC shows 'long island hvac seo' at position 3.69 with 16 impressions and 0 clicks, and /learn/seo-for-hvac-companies-long-island at position 7.88 on 17 impressions, 0 clicks — the single best-ranking commercial query on the property is converting nothing. The current title is 'SEO for HVAC Companies on Long Island — What Actually Ranks and What It Costs' (84 chars before ' | Forge' is appended), so Google truncates it well before the geo term and the searcher's phrase never appears in the snippet head. Leading with the matched phrase is the cheapest available CTR lever on the site.

    PR #aa09f48
  25. September 4, 2026meta

    Front-load 'HVAC SEO on Long Island' in the /learn/seo-for-hvac-companies-long-island title — 84 chars, truncates in SERP

    The query 'long island hvac seo' sits at position 3.69 with 16 impressions and 0 clicks; the page itself shows 17 impressions at position 7.88, also 0 clicks. This is the site's best-ranked commercial query and it converts nothing. The current title is 'SEO for HVAC Companies on Long Island — What Actually Ranks and What It Costs | Forge' (84 chars) — Google truncates around 60, so the searcher sees the least-matching half. Rewriting to 'HVAC SEO on Long Island — What Ranks and What It Costs' (54 chars) puts the exact query head first. Note: frontmatter `title` in sites/forgelongisland/src/content/learn/seo-for-hvac-companies-long-island.md drives both the <title> and the rendered H1, so the H1 changes with it.

    PR #aa09f48