Ответ 1
На самом деле суперсветовой ответ здесь имеет решение. Заголовок страницы HTML должен быть отправлен полностью разрешенным сервером.
Итак, чтобы это решение работало, мне пришлось реплицировать маршруты angular на стороне сервера и отправить информацию.
Вместо использования простого представления html я изменил на .ejs, а также изменил заголовок на что-то вроде этого:
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<base href="/">
<meta name="robots" content="index,follow">
<script type="text/javascript">
window.title = <%- JSON.stringify(precomposition) %>.title;
</script>
<title ng-bind="title"><%= precomposition.title %></title>
<meta name="description" content="<%= precomposition.description %>">
<!-- More meta information -->
<!-- Scripts & CSS -->
</head>
Теперь, когда веб-сайт получает прямой удар (первоначально разрешенный сервером вместо Angular, всегда случай для искателей), я обрабатываю сторону сервера запросов:
//Express route
app.route('/').get(precomposition.render);
//precomposition
exports.render = function (req, res) {
const precomposition = {title: 'tile', description: 'description'};
res.locals.precomposition = precomposition;
res.render('index.ejs');
};
Если это не прямой удар angular обрабатывает обновление заголовка (потому что другая информация не отображается пользователю).
У него есть некоторые недостатки, но Google с октября 2015 года рекомендует этот подход вместо "_escaped_fragment_ URLs". Также я думаю, что это намного меньше ресурсов, чем самозанятые предварительные варианты рендеринга и более дешевые, чем платные.