我有一个网站,在前端使用 React,在后端使用 Strapi。
为了处理我的 404 页面,我只需在 App.tsx 中添加以下代码:
<Routes>
...
<Route path="*" element={<Page404 />} />
</Routes>
我的 Page404 组件看起来像这样:
import { Helmet } from "react-helmet-async";
const Page404 = () => {
return (
<>
<Helmet>
<title>404 - Page Not Found</title>
<meta name="robots" content="noindex" />
<meta name="description" content="Page not found." />
<link rel="canonical" href={window.location.href} />
<script>{`document.status = 404`}</script>
</Helmet>
{My content here}
</>
);
};
export default Page404;
如果用户尝试访问不存在的页面,我的 404 页面会按预期显示。但我不确定 SEO 爬虫是否理解该页面不存在。
如您所见,我添加了一个小脚本来更改文档的状态,但我不知道如何处理网络 DevTools 中出现的“http 404 代码”。在 PHP 中,我只需添加以下代码:
<?php
http_response_code(404);
?>
目前,我在 Google 搜索控制台上看到页面,即使它们不存在于我的“sitemap.xml”文件中。
有人知道我添加的脚本是否足够 SEO 爬虫吗?如果没有,有没有办法从 Strapi 发回 404 错误代码?
谢谢。
要在 Strapi 中返回 404 HTTPS 状态代码,您通常需要创建一个自定义控制器或修改现有控制器来处理找不到资源的情况。这是实现这一目标的分步指南:
导航到您的 Strapi 项目:转到您的 Strapi 项目的目录。
创建或编辑控制器:
./src/api/[your-content-type]/controllers/[your-controller].js
。返回 404 状态代码:在控制器操作中,您可以使用
ctx
对象发送 404 响应。以下是如何执行此操作的示例:
// Example: custom-controller.js
module.exports = {
async findOne(ctx) {
const { id } = ctx.params;
// Assume you have a service to find your resource
const entity = await strapi.services['your-content-type'].findOne({ id });
if (!entity) {
return ctx.notFound('Resource not found'); // This will send a 404 status
}
return entity;
},
};
如果您要创建新路线或修改现有路线,请确保您的
routes.json
文件包含正确的路径:
{
"routes": [
{
"method": "GET",
"path": "/your-content-type/:id",
"handler": "custom-controller.findOne",
"config": {
"policies": []
}
}
]
}
启动您的 Strapi 服务器:确保您的 Strapi 服务器正在运行。
测试端点:使用Postman或CURL等工具来测试端点。尝试访问不存在的资源(例如,不存在的 ID)。
您应该收到包含 404 状态代码和消息“资源未找到”的响应。
此方法使您可以控制响应,并帮助管理在找不到资源时 API 与客户端的通信方式。
如果您需要任何类型的 SEO 帮助,您可以访问此[技术 SEO][1]:https://www. Fiverr.com/s/o8xWeB4