YOLO813

返回410状态码,方便搜索引擎快速删除页面

    最近因为改动太大,导致之前被收录的一些页面被搜索引擎抓取返回了404,数量还不少,在谷歌的官方文档中倒是说返回404和410的作用是一样的,但是在我查看了一些资料来讲,大部分还是讲究如果页面已删除,最好返回410代码,方便搜索引擎快速删除,这个是最规范的。

    想想这个修改也不麻烦,干脆就开始改造页面了。

    原来的views代码如下:

try:
    es.getDetailFromOrder(req.LANGUAGE_CODE, number):
    job_detail,similar_search,company_search = es.getDetailFromOrder(req.LANGUAGE_CODE, number)
    context = {
        "job_detail": job_detail,
        "similar_search":similar_search,
        "company_search":company_search
    }
except:
    raise Http404(f"{number} does not exist!")

    这将在没有数据返回时,抛出一个404异常,并自动加载我定义的404模板文件。

    改造如下:

if es.getDetailFromOrder(req.LANGUAGE_CODE, number):
    job_detail,similar_search,company_search = es.getDetailFromOrder(req.LANGUAGE_CODE, number)
    context = {
        "job_detail": job_detail,
        "similar_search":similar_search,
        "company_search":company_search
    }
else:
    return HttpResponse("This page deleted!", content_type="text/plain",status=410)

    这将返回一个状态码为410的一行字符串页面,如果再想加入自定义的返回页面怎么办呢,参考render的源码,改造如下

from django.template import loader
if es.getDetailFromOrder(req.LANGUAGE_CODE, number):
    job_detail,similar_search,company_search = es.getDetailFromOrder(req.LANGUAGE_CODE, number)
    context = {
        "job_detail": job_detail,
        "similar_search":similar_search,
        "company_search":company_search
    }
else:
    return HttpResponse(loader.render_to_string(template_name="404.html", request=req),status=410)


    如果搜索的没有关键词,后端添加永久重定向逻辑:

 if not params.get("keywords"):
    # raise Http404(f"keywords does not exist!")
    # 20220908
    return redirect(reverse('page'),permanent=True)


参阅:

https://developers.google.com/search/blog/2011/05/do-404s-hurt-my-site?hl=zh-cn
http://129.226.226.195/post/21152.html
https://docs.djangoproject.com/zh-hans/4.1/ref/request-response/