我使用Angular 8创建了一个应用程序,现在想要让我的网站在Google上可见。我已经在项目的根目录下添加了一个“sitemap.xml”和“robots.txt”文件,但是当我尝试通过浏览器访问该文件时:https://blablawebsite.fr/sitemap.xml路由模块会接管该路由并找不到该页面。我该如何确保路由模块不会拦截“sitemap.xml”和“robots.txt”?
"assets": [
"src/favicon.ico",
"src/assets",
"src/robots.txt",
"src/sitemap.xml"
],
这里here有更详细的解释。
附加说明:
使用Angular Universal
和Cloud Functions for Firebase
进行托管,并将sitemap.xml
与robots.txt
放置在src
中。接着在angular.json
的"assets"
中添加它,如下所示:
...
"assets": [
"APP_NAME/src/robots.txt",
"APP_NAME/src/sitemap.xml",
],
...
做得很好 :)
虽然其他答案提供了添加单个robots.txt
和sitemap.xml
文件的解决方案,但通常你希望根据你部署的实例拥有不同版本的这些文件。
例如,在生产环境中,您希望允许搜索引擎爬取和索引您的页面,但在暂存或开发实例上则不需要。
如果您想根据环境拥有不同版本的文件,可以按照以下方式进行操作:
创建一个名为 robots
的文件夹,并在其中创建3个子文件夹,分别称为 development
, staging
和 production
(或任何您想要的环境)。然后,在每个子文件夹中创建特定于环境的 robots.txt
和 sitemap.xml
文件。
在 angular.json
文件中,为每个环境单独指定 assets
:
{
"architect": {
"build": {
"configurations": {
"configurations": {
"production": {
"assets": [
"src/favicon.ico",
"src/assets",
"src/manifest.webmanifest",
{
"glob": "robots.txt",
"input": "src/robots/production/",
"output": "./"
},
{
"glob": "sitemap.xml",
"input": "src/robots/production/",
"output": "./"
}
],
...
},
"staging": {
"assets": [
"src/favicon.ico",
"src/assets",
"src/manifest.webmanifest",
{
"glob": "robots.txt",
"input": "src/robots/staging/",
"output": "./"
},
{
"glob": "sitemap.xml",
"input": "src/robots/staging/",
"output": "./"
}
],
...
},
"development": {
"assets": [
"src/favicon.ico",
"src/assets",
"src/manifest.webmanifest",
{
"glob": "robots.txt",
"input": "src/robots/development/",
"output": "./"
},
{
"glob": "sitemap.xml",
"input": "src/robots/development/",
"output": "./"
}
],
...
}
}
}
}
}
}
您需要首先考虑将项目转换为Angular Universal。谷歌和其他搜索引擎机器人无法并且不会在应用程序之后导航,因为所有这些都是发生在应用程序完成之后。
从这里开始:https://angular.io/guide/universal
很多人误解了所有这些的工作方式,在意识到网站和SPA之间的区别之前进入了他们的项目深处。没关系,您仍然可以通过服务器端渲染让您的Angular应用程序排名。