Как заставить Twitter распознавать метатеги Angular7 на подстранице, обслуживаемой маршрутом - PullRequest
0 голосов
/ 29 января 2019

Я хочу, чтобы мой код Angular7 взял URL-адрес, содержащий маршрут, и представил желаемые обновленные мета-теги в Twitter, чтобы Twitter отображал правильную социальную карту.

Следуя стандартной практике для мета-тегов, которая включает объявлениев заголовке index.html и обновлении в конструкторах страниц, загруженных маршрутами, я вижу правильные обновленные значения в консоли браузера, но twitter игнорирует эти обновления и использует первые метатеги из index.html.

Fromindex.html ...

<head>
<title>My Title</title>
  <!-- Other Tags -->
  <meta name="twitter:card" content="summary_large_image">
  <meta name="twitter:site" content="@myAccountName">
  <meta name="twitter:title" content="My Title">
  <meta name="twitter:description" content="A detailed description of the site">
  <meta name="twitter:image" content="https://www.oursite.com/welcome.png">

Из app.module.ts…

import { mySubComponent } from './components/mySub/mySub.component';
...
const appRoutes: Routes = [
...
 { path: 'mySubPage', component: mySubComponent },
...

Из файла .ts для модуля, загруженного www.oursite.com/mySubPage ...

import { Router, ActivatedRoute, Params } from '@angular/router';
import { Meta, Title } from '@angular/platform-browser';

@Component({
  selector: 'app-mySub',
  templateUrl: './mySub.component.html',
  styleUrls: ['./mySub.component.css']
})
export class mySubComponent implements OnInit {
...
  constructor(
...
public meta: Meta, public title: Title) {
      meta.updateTag({ name: 'twitter:card', content: 'summary_large_image' });
      meta.updateTag({ name: 'twitter:site', content: '@myAccountName});
      meta.updateTag({ name: 'twitter:title', content: 'My Sub Title' });
      meta.updateTag({ name: 'twitter:description', content: 'The descript of the sub page' });
      meta.updateTag({ name: 'twitter:image', content: 'https://www.oursite.com/mySubPageLogo.png' });
}

Когда я запускаю это в браузере и вручную набираю полный URL с маршрутом (www.oursite.com/mySubPage, инспектор консоли показывает все правильные настройки ...

<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@myAccountName">
<meta name="twitter:title" content="My Sub Title">
<meta name="twitter:description" content="The descript of the sub page">
<meta name="twitter:image" content="https://https://www.oursite.com/mySubPageLogo.png">

Но для валидатора твиттерной карты, настроенного на тот же суб-URL, отображается карта из основного index.html, и, похоже, он полностью игнорирует обновления с маршрута.

Кстати, я сделал все шаги, чтобы очистить кеш твиттера, и даже ждал дольше 12 часов и пытался снова.Но я могу внести изменения в основные теги, и изменение показывается, так что это не проблема кеша с твиттером.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Используете ли вы пожарную базу в качестве BaaS?Если так, я смог заставить твиттер отображать карты, выполнив то, что вы делали выше (настройка службы или вставка мета-тегов в компоненты).этот урок помог мне https://fireship.io/lessons/angular-universal-firebase/, но, основываясь на моей проблеме, помимо того, что она имела какое-либо отношение к тому, чтобы быть firebase-приложением, мой универсал не будет отображаться в браузере под app-root.Мне не нужно было отображать метатеги в моем index.html по умолчанию.Посмотрите учебник выше и посмотрите, поможет ли это вам вообще.

https://angular.io/guide/universal

// Sub-Component

import { Component, OnInit } from '@angular/core';
import { Title, Meta } from '@angular/platform-browser';

@Component({
  selector: 'app-about',
  templateUrl: './about.component.html',
  styleUrls: ['./about.component.scss']
})
export class AboutComponent implements OnInit {
  data = {
    name: 'Michael Jordan',
    bio: 'Former baseball player',
    image: ''
  };

  constructor(private title: Title, private meta: Meta) {}

  ngOnInit() {
    this.title.setTitle(this.data.name);
    this.meta.addTags([
      { name: 'twitter:card', content: 'summary' },
      { name: 'og:url', content: '/about' },
      { name: 'og:title', content: this.data.name },
      { name: 'og:description', content: this.data.bio },
      { name: 'og:image', content: this.data.image }
    ]);
  }
}
0 голосов
/ 01 февраля 2019

Это следующее из https://twittercommunity.com/t/not-whitelisted-unable-to-render-or-no-image-read-this-first/62736 Похоже, если кто-то не знает другого подхода, они в основном говорят, что мы не можем обслуживать разные карты с разных угловых маршрутов из одного домена приложения.Вы получаете только один.Обратите внимание, что они прописаны в середине ...

Перед публикацией выпуска карт ПРОЧИТАЙТЕ следующее:

Если вы пишете о какой-либо проблемена вашем сайте, укажите ссылку на общедоступный URL-адрес, где видна разметка вашей карты, или мы не сможем вам помочь.

Вы также должны убедиться, что вы проверили перечисленные ниже пункты,и самостоятельно выполните поиск и устранение неисправностей, прежде чем обращаться за дополнительной помощьюСообщения, указывающие на то, что ни одна из этих проверок не была выполнена, не будут расставлены по приоритетам.

С начала 2018 года карты больше не требуют белого списка (включая карты игрока)

Сообщение об ошибке без белого спискаиз Validator вводит в заблуждение, и почти наверняка означает, что инструмент не может увидеть или найти разметку твиттер: карты на вашей странице.Если вы видите сообщение о том, что вам нужно отправить карту на утверждение, вы, вероятно, указали неверный тип карты в разметке.

Пожалуйста, просмотрите следующее, если у вас возникли другие проблемы:

при просмотре источника вашей страницы ожидаемые метатеги 581 «Карты Твиттера» отображаются как минимум NB, ваша страница должна содержать как минимум метатег «твиттер: карточка», указывающий допустимый тип карточки 370, или подходящие резервные метки OpenGraph 170Если вы выполняете curl -v -A Twitterbot в командной строке, на вашей странице все еще отображаются теги twitter: card в разделе страницы?Ваш сервер возвращает код ответа 200 и действительный заголовок Content-Type?Добавляет ли ваша страница теги после загрузки, например, с использованием Javascript (например, Angular, Meteor, Менеджер тегов Google)?Искатель и валидатор не могут выполнять Javascript, а теги должны быть статическими.Ваш сайт доступен через пользовательский агент Twitterbot / 1.0?Все ли файлы (включая файлы изображений) доступны для Twitterbot?Вы должны проверить http://your -site-url / robots.txt 646 и убедиться, что он разрешает доступ к нашему сканеру.Если ваши изображения находятся в другом домене, проверьте также файл robots.txt для этого домена.Вы используете плагин Wordpress (или другой платформы CMS / блогов)?Мы предоставляем собственный официальный плагин Wordpress 614, но не можем легко обеспечить поддержку тех, которые созданы третьими лицами.Убедитесь, что конфигурация включает в себя все необходимые теги.Старайтесь не использовать несколько плагинов одновременно, так как теги будут переопределять друг друга.Вы помещаете URL-адрес сайта верхнего уровня в Validator или конкретный URL, где присутствует ваша разметка?вам необходимо убедиться, что вы указали ссылку на то, где разметка вашей карты видна на странице.Вы используете поддерживаемый тип карты 370?Карты продуктов, галерей и фотографий были объявлены устаревшими в середине 2015 года 128. Правильно ли написан тип карты или опечатка?если ваше изображение не отображается, доступно ли оно по URL, который не заблокирован вашим файлом robots.txt?Соответствует ли это нашим ограничениям по размеру?Используете ли вы абсолютный и полный URL (включая часть протокола http), а не относительный?если вы видите сообщение валидатора о том, что загрузка страницы не удалась из-за других ошибок или аналогичных, проверьте конфигурацию SSL.Сертификат и имя сервера должны совпадать (или иметь псевдоним для совпадения) из-за ограничений безопасности Java.Подробнее в этой теме 220. Вы используете полное доменное имя DNS?Искатель не поддерживает точечные IP-адреса в качестве ссылок на домен и не может получить доступ к localhost.

На нашем сайте разработчиков имеется гораздо больше информации об устранении неполадок 302.

Похоже, в настоящее время у Angular7 нет обходного пути.По-видимому, может быть только одна карта, обслуживаемая статически из файла index.html на угловое доменное имя.

...