你不必担心它们是否兼容。 它们的缺点可能是有一点性能开销,但如果只是针对机器人,这可能无关紧要。如果您使用Rendora的缓存,这甚至可能不是真的,而且您可能会实际提高性能。然而,如果这能与Angular Universal的性能提升相媲美,我不知道。但请记住,当我们谈论SSR带来的性能提升时,我们总是只谈论第一页加载的时间。因此,这一点的重要性通常不会太高,因为在首次加载应用程序后,用户将与应用程序进行更多的交互。如果他们没有,而你主要是匿名用户,他们只检查一个页面,然后离开,那么你可能不会构建一个PWA,而是一个经典的网页

你不必担心它们是否兼容。 它们的缺点可能是有一点性能开销,但如果只是针对机器人,这可能无关紧要。如果您使用Rendora的缓存,这甚至可能不是真的,而且您可能会实际提高性能。然而,如果这能与Angular Universal的性能提升相媲美,我不知道。但请记住,当我们谈论SSR带来的性能提升时,我们总是只谈论第一页加载的时间。因此,这一点的重要性通常不会太高,因为在首次加载应用程序后,用户将与应用程序进行更多的交互。如果他们没有,而你主要是匿名用户,他们只检查一个页面,然后离开,那么你可能不会构建一个PWA,而是一个经典的网页,angular,facebook-graph-api,facebook-opengraph,meta-tags,Angular,Facebook Graph Api,Facebook Opengraph,Meta Tags,tl;dr.去看看Rendora和Rendertron,他们可能就是你要找的东西,很容易很快就把你带到了那里。只是在khushali的答案上加了2美分,这帮我找到了一个临时解决方案 在我的主机提供商(Dreamhost)上,[NC或]仅在复制/粘贴时产生奇怪的结果。在只有一行的情况下,我不得不把它写成 RewriteCond…谷歌机器人| yandex | | | | | | | | | | | | | | | | | 124 (以每行一次的方式重新编写RewriteCond同样有效,但在第一行

tl;dr.去看看Rendora和Rendertron,他们可能就是你要找的东西,很容易很快就把你带到了那里。

只是在khushali的答案上加了2美分,这帮我找到了一个临时解决方案

在我的主机提供商(Dreamhost)上,[NC或]仅在复制/粘贴时产生奇怪的结果。在只有一行的情况下,我不得不把它写成
RewriteCond…谷歌机器人| yandex | | | | | | | | | | | | | | | | | 124
(以每行一次的方式重新编写RewriteCond同样有效,但在第一行的[OR]上不起作用。这将起作用:)

注意第一行似乎缺少的

另一方面,我的第二分钱是WhatsApp的最后一个条目——结果是WhatsApp直接从应用程序内部进行抓取(至少今天在我的android手机上是这样),所以我的全部线路现在是
RewriteCond%{HTTP|u USER|u AGENT}googlebot | bingbot | yandex | baiduspider | facebook externalhit | twitterbot | rogerbot | linkedinbot |嵌入| quora\link preview | showyoubot outbrain | pinterest\/0 | pinterestbot | slackbot | slackbot kshare | W3C | whatsa |代码<>

(以及我的完全访问权限)

    RewriteEngine On
        
        # https://stackoverflow.com/questions/18406156/redirect-all-to-index-php-using-htaccess
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{HTTP_USER_AGENT} googlebot|bingbot|yandex|baiduspider|facebookexternalhit|twitterbot|rogerbot|linkedinbot|embedly|quora\ link\ preview|showyoubot|outbrain|pinterest\/0\.|pinterestbot|slackbot|vkShare|W3C_Validator|WhatsApp [NC]
        #        RewriteCond %{HTTP_USER_AGENT} facebookexternalhit|googlebot [NC]   MUST BE WRITTEN WITHOUT OR
        #        RewriteCond %{HTTP_USER_AGENT} googlebot [NC]
        #        RewriteCond %{HTTP_USER_AGENT} facebookexternalhit [NC,OR]          'OR' IS FOR SECOND LINE (AND THIRD AND FOURTH ETC. WON'T WORK ON FIRST LINE)
        RewriteRule ^(.*)$ opengraph.php?q=$1 [NC,L,QSA]

        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ redir.php?orig_path=$1 [NC,L,QSA]

</IfModule>
重新编写引擎打开
# https://stackoverflow.com/questions/18406156/redirect-all-to-index-php-using-htaccess
重写cond%{REQUEST_FILENAME}!-f
重写cond%{REQUEST_FILENAME}!-d
RewriteCond%{HTTP|u USER|u AGENT}googlebot | bingbot | yandex | baiduspider | facebookexternalhit | twitterbot | rogerbot | linkedinbot |嵌入| quora\link\preview | showyoubot | outbrain | pinterest\/0 | pinterest | slackbot vkShare | W3C U验证程序| Whapp
#RewriteCond%{HTTP_USER_AGENT}facebookexternalhit | googlebot[NC]必须在没有或
#重写COND%{HTTP_用户_代理}谷歌机器人[NC]
#RewriteCond%{HTTP_USER_AGENT}facebookexternalhit[NC,OR]'OR'代表第二行(第三行和第四行等在第一行不起作用)
重写规则^(.*)$opengraph.php?q=$1[NC,L,QSA]
重写cond%{REQUEST_FILENAME}!-f
重写cond%{REQUEST_FILENAME}!-d
重写规则^(.*)$redir.php?原始路径=$1[NC,L,QSA]

我刚刚为链接创建了一个简单的PHP站点,它实现了Open Graph标记,并通过JavaScript将用户重定向到“真实”站点。脚本执行以下操作:

  • 从API中获取所需的数据
  • 返回带有og标记的简单HTML站点
  • 使用JavaScript将用户重定向到“真实”站点
  • 例如:

    <?php
      $articleId = $_GET['id'];
      $redirectUrl = 'https://yourapp.com/app/tabs/start/article/'.$articleId;
    
      // get the article metadata
      $response = file_get_contents('https://api.yourapp.com/articles/'.$articleId);
      $response = json_decode($response);
    
      $title = $response->title;
      $description = $response->excerpt;
      if(property_exists ($response, 'mainImageUrl') ) {
        $imageUrl = $response->mainImageUrl;
      }
      $publishedTime = $response->published;
    ?>
    
    <html prefix="og: http://ogp.me/ns#">
    <head>
      <title><?php echo $title ?></title>
      <meta name="description" content="<?php echo $description ?>">
      <meta property="og:title" content="<?php echo $title ?>">
      <meta property="og:description" content="<?php echo $description ?>">
      <meta property="og:site_name" content="Your App">
      <meta property="og:locale" content="en_US">
      <meta property="og:type" content="article">
      <meta property="og:url" content="https://yourapp.com/article/<?php echo $articleId ?>">
      <?php if(isset($imageUrl)) { echo '<meta property="og:image" content="'.$imageUrl.'">'; } ?>
      <meta property="og:image" content="<?php echo $imageUrl ?>">
      <meta property="article:published_time" content="<?php echo $publishedTime ?>">
    
      <script>
        window.location.href = '<?php echo $redirectUrl ?>';
      </script>
    </head>
    <body>
        <a href="<?php echo $redirectUrl ?>">Click here to proceed...</a>
    </body>
    </html>
    
    
    
    这是一个大型应用程序,在这个阶段(测试中)不可能完全改变方法。它是在ASP.NET MVC之上构建的。如果不是通用的,那么您必须在服务器上进行这些api调用以获取数据,并将元标记与ASP.NET呈现的文档一起发送。不保证fb或whatsapp将在启用js的情况下爬网您的页面以获取js修改的标记。“我的问题是,如何让Facebook/Whatsapp动态获取更新的标签值?”-不,没有。Facebook只关心URL从服务器请求时返回的数据。因此,您需要某种预呈现-在您自己的应用程序中实现,或者通过一些外部服务(如prerender)实现。ioI在下面添加了一个详细的答案。只是重要的节点,Facebook缓存打开的图形信息。希望我们都能看到让你回答你的问题。✔ 在首选答案旁边;-)@Martijn Pieters thx的便条!这是原始问题。更新我在另一个问题中的答案并将其标记为重复的!你对此有来源吗?Facebook将在加载你的页面时调用此脚本,即使此代码位于角度组件中?你需要在你的控制器ex:share(){FB.ui(…)}中发出请求谢谢!非常清楚和有用。正是我需要的。htaccess做什么?
    RewriteCond … googlebot [NC]
    RewriteCond … yandex [NC,OR]
    RewriteCond … WhatsApp [NC,OR]
    
        RewriteEngine On
            
            # https://stackoverflow.com/questions/18406156/redirect-all-to-index-php-using-htaccess
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteCond %{HTTP_USER_AGENT} googlebot|bingbot|yandex|baiduspider|facebookexternalhit|twitterbot|rogerbot|linkedinbot|embedly|quora\ link\ preview|showyoubot|outbrain|pinterest\/0\.|pinterestbot|slackbot|vkShare|W3C_Validator|WhatsApp [NC]
            #        RewriteCond %{HTTP_USER_AGENT} facebookexternalhit|googlebot [NC]   MUST BE WRITTEN WITHOUT OR
            #        RewriteCond %{HTTP_USER_AGENT} googlebot [NC]
            #        RewriteCond %{HTTP_USER_AGENT} facebookexternalhit [NC,OR]          'OR' IS FOR SECOND LINE (AND THIRD AND FOURTH ETC. WON'T WORK ON FIRST LINE)
            RewriteRule ^(.*)$ opengraph.php?q=$1 [NC,L,QSA]
    
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule ^(.*)$ redir.php?orig_path=$1 [NC,L,QSA]
    
    </IfModule>
    
    <?php
      $articleId = $_GET['id'];
      $redirectUrl = 'https://yourapp.com/app/tabs/start/article/'.$articleId;
    
      // get the article metadata
      $response = file_get_contents('https://api.yourapp.com/articles/'.$articleId);
      $response = json_decode($response);
    
      $title = $response->title;
      $description = $response->excerpt;
      if(property_exists ($response, 'mainImageUrl') ) {
        $imageUrl = $response->mainImageUrl;
      }
      $publishedTime = $response->published;
    ?>
    
    <html prefix="og: http://ogp.me/ns#">
    <head>
      <title><?php echo $title ?></title>
      <meta name="description" content="<?php echo $description ?>">
      <meta property="og:title" content="<?php echo $title ?>">
      <meta property="og:description" content="<?php echo $description ?>">
      <meta property="og:site_name" content="Your App">
      <meta property="og:locale" content="en_US">
      <meta property="og:type" content="article">
      <meta property="og:url" content="https://yourapp.com/article/<?php echo $articleId ?>">
      <?php if(isset($imageUrl)) { echo '<meta property="og:image" content="'.$imageUrl.'">'; } ?>
      <meta property="og:image" content="<?php echo $imageUrl ?>">
      <meta property="article:published_time" content="<?php echo $publishedTime ?>">
    
      <script>
        window.location.href = '<?php echo $redirectUrl ?>';
      </script>
    </head>
    <body>
        <a href="<?php echo $redirectUrl ?>">Click here to proceed...</a>
    </body>
    </html>