添加googlebot noindex标签后MVC5无法生成PDF,求解决办法
解决MVC5中PDF生成与Google不索引的冲突问题
首先,你全局添加的<meta name="googlebot" content="noindex">应该是被包含进了PDF生成时用到的HTML视图里,导致你用的PDF渲染工具(比如wkhtmltopdf、iTextSharp)解析出错,才会生成失败。下面给你几个实用的解决办法:
为PDF生成视图单独用无noindex的布局
新建一个专门给PDF用的布局页(比如_PdfLayout.cshtml),里面不要加那个noindex的meta标签。然后在生成PDF对应的视图里指定布局:@{ Layout = "~/Views/Shared/_PdfLayout.cshtml"; }这样生成PDF时的HTML就不会带noindex标签,不会干扰渲染,同时其他页面继续用原来的布局保持noindex。
在全局布局里动态控制meta标签显示
不用新建布局,直接在原来的布局页里加判断,只在非PDF生成的页面显示noindex标签。比如你可以在生成PDF的Action里设置一个ViewBag标识:public ActionResult GetPdf() { ViewBag.IsGeneratingPdf = true; // 其他生成逻辑 return View("PdfView"); }然后在布局页里:
@if (ViewBag.IsGeneratingPdf != true) { <meta name="googlebot" content="noindex"> }用响应头控制PDF不被索引,彻底不用meta标签
如果你是通过Action直接返回PDF文件(比如FileStreamResult),完全可以不用meta标签,直接在Action里给响应加X-Robots-Tag头,告诉Google不要索引这个PDF:public ActionResult GeneratePdfDocument() { // 生成PDF流的逻辑 var pdfStream = CreatePdfContent(); // 添加不索引的响应头 Response.Headers.Add("X-Robots-Tag", "noindex"); return File(pdfStream, "application/pdf", "my-document.pdf"); }这种方式最直接,完全不会影响PDF生成,同时Google爬取PDF时会读取这个响应头,自动跳过索引。
内容的提问来源于stack exchange,提问作者Georgios Loudaros
相关产品推荐
相关产品推荐

