ASP.NET Core 1.1会员博客社交分享及Google/Facebook爬虫处理咨询
嘿,我来帮你理清楚这个问题,顺便给你几个实用的解决方案:
首先,先打消你的顾虑:Google和Facebook的爬虫根本不会缓存你的会员专属博客内容。因为这些爬虫没有登录状态,当它们请求完整博客页面时,会被你的登录拦截机制跳转到登录页,所以爬虫实际抓取到的只是登录页的内容,而不是博客的完整内容。你完全不用担心会员内容被爬虫泄露出去。
接下来,说说怎么优化社交分享的体验——毕竟现在的问题是,用户分享链接后,社交平台的预览会显示登录页的内容,这很不友好。你可以这么做:
针对社交爬虫返回预览内容
在ASP.NET Core的控制器里,你可以检测请求的User-Agent,判断是不是Facebook或Google的爬虫(Facebook爬虫的UA包含facebookexternalhit,Google爬虫是Googlebot)。如果是爬虫请求,就返回一个仅包含公开信息的预览页面——比如博客标题、你已经在首页/邮件里公开的简短摘要、封面图之类的,不要包含任何会员专属的完整内容。这样社交平台的分享卡片就能显示正确的预览,同时不会泄露会员内容。给你个简单的代码示例:
public IActionResult ViewBlog(int blogId) { var blog = _blogRepository.GetById(blogId); var userAgent = Request.Headers["User-Agent"].ToString(); // 识别社交爬虫 bool isSocialCrawler = userAgent.Contains("facebookexternalhit") || userAgent.Contains("Googlebot"); if (isSocialCrawler) { // 返回仅含公开预览的视图 return View("BlogPreview", blog); } // 普通用户需要登录验证 if (!User.Identity.IsAuthenticated) { return RedirectToAction("Login", "Account"); } // 登录用户返回完整博客 return View("BlogDetail", blog); }用robots.txt辅助限制爬虫
你可以在站点根目录添加robots.txt,明确禁止爬虫抓取完整博客的路径,比如:User-agent: * Disallow: /member-blogs/full/虽然社交爬虫可能不会严格遵守这个规则,但配合上面的UA检测,能进一步降低爬虫尝试抓取的概率。
最后再确认一次:爬虫只能获取到你允许它们看到的内容,只要你的身份验证逻辑没问题,它们就拿不到会员专属的博客内容,自然也不会缓存这些内容。
内容的提问来源于stack exchange,提问作者drewex
相关产品推荐
相关产品推荐

