Как уже упоминалось в заголовке, метатеги, предоставляемые ssr, не являются динамическими / правильными.
Итак, над этим проектом я работаю, у нас есть метатеги (для целей SEO), которые должны быть динамическими.
Я знаю, что современные сканеры также индексируют код на стороне клиента, но для более быстрой индексации, хорошей практики, и поскольку я хотел бы знать, как он работает, я все еще хочу это сделать.
Метатеги шлема обновляются до правильных на стороне клиента, но в ssr отправляемые метатеги являются общими из компонента приложения, а не из вложенных компонентов внутри.
Фрагмент кода с сервера. Jsx
export default function serverRenderer() {
return async (req, res) => {
const client = new ApolloClient({
ssrMode: true,
link: createHttpLink({
uri: urljoin(CONFIG.apiURL, 'graphql'),
credentials: 'same-origin',
headers: {
cookie: req.header('Cookie'),
}
}),
cache: new InMemoryCache(),
fetch: isomorphic,
})
const context = {}
const browserLanguage = 'en'
const sheet = new ServerStyleSheet()
const ComponentTree = () => (
<ApolloProvider client={client}>
<IntlProvider locale={languageSelected} messages={bob}>
<StaticRouter location={req.url} context={context}>
<ThemeProvider theme={theme}>
<App auth={auth} lang={browserLanguage} />
</ThemeProvider>
</StaticRouter>
</IntlProvider>
</ApolloProvider>
)
try {
await getDataFromTree(<ComponentTree />)
} catch (e) {
console.log(e)
}
const initialState = client.extract() // initalState
const markup = renderToString(sheet.collectStyles(<ComponentTree />))
const styles = sheet.getStyleTags()
const helmet = Helmet.renderStatic()
res.send(Template({ markup, styles, helmet, initialState }))
}
}
В компоненте приложения есть общие метатеги + заголовок - главный (маршруты / представления) + нижний колонтитул и во вложенных представлениях, которые отображаются так, как я сказал, что метатеги обновляются на стороне клиента, а не на стороне сервера. в то время как из того, что я читал и слышал, когда спрашивал, как код, это должно работать.
Я пытался внедрить асинхронный реактивный шлем, но, похоже, это не помогло мне + из того, что я прочитал в документации, реактивный шлем поддерживает дочерние компоненты, перезаписывая метатеги шлема с тем же именем из родительского компонента. .
Пожалуйста, помогите и хорошего дня!