Currently, our SSR implementation is not compatible with how we apply dynamic attributes to statically optimized elements in the browser. In #4056 we've expanded static content optimization to allow attributes with expressions. In the browser, we rely on [cloneNode](https://github.com/salesforce/lwc/blob/master/packages/%40lwc/engine-core/src/framework/rendering.ts#L291) to create the DOM elements, loop through those elements and apply the dynamic attributes to them. However, in SSR, the [cloneNode](https://github.com/salesforce/lwc/blob/master/packages/%40lwc/engine-server/src/renderer.ts#L85-L96) function just returns the string value in `vnode.fragment`. The main issue is the `vnode.fragment` used in [mountStatic](https://github.com/salesforce/lwc/blob/master/packages/%40lwc/engine-core/src/framework/rendering.ts#L283) has already been assembled by [`buildParseFragmentFn`](https://github.com/salesforce/lwc/blob/13a7fa1c7b90ffc4d6a6a1d1983a1fc696612adc/packages/%40lwc/engine-core/src/framework/template.ts#L138) during the mount process. As a work-around, in SSR, we insert the expression values at the time the string is being built. In #4056 we've created a [token](https://github.com/salesforce/lwc/pull/4056#discussion_r1523813765) that serves as an index to map the string to its corresponding static part. Long-term this should be resolved with a dedicated SSR compiler, see (#3880). As an alternative to the solution in #4056 we could replicate the `cloneNode` behavior in SSR, which would require some form of HTML parser.