Why the current Vite + Lit + Tailwind setup is fine as a build workflow, but risky for the project's SEO goal — with the actual request/response flows laid out below.
.NET 10 MVC, SSR by design, for a site where SEO is a hard requirementno Node.js anywhere in the pipeline, including CI/CDVite + Lit used locally to build Web ComponentsTailwind CSS v4 for stylingwwwroot and committedKeeping Node out of CI/CD is solvable — Tailwind v4 even ships a Node-free standalone CLI binary. The part that actually threatens SEO is architectural: Lit renders into Shadow DOM, and that only happens after the browser downloads and runs JavaScript. Anything living in that gap is invisible to crawlers that don't execute JS, and delayed for the ones that do.
Classic SSR: everything a crawler needs is already in the first response.
Same route, but content depends on a second round trip and JS execution succeeding.
Page copy, headings or links placed inside Shadow DOM are invisible to crawlers that don't render JS, and delayed for ones that do.
Content popping in after hydration hurts perceived performance and Core Web Vitals (CLS).
Global utility classes don't cross the shadow boundary — the compiled stylesheet must be injected per component via adoptedStyleSheets, duplicating CSS.
Nothing verifies a committed bundle still matches its source, since CI can't rebuild it to check.