Skip to content

Commit 5cdca50

Browse files
authored
Proxito: add X-Robots-Tag header (#12349)
Closes #12245
1 parent a12952c commit 5cdca50

File tree

3 files changed

+33
-0
lines changed

3 files changed

+33
-0
lines changed

dockerfiles/nginx/proxito.conf.template

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ server {
7575
add_header X-RTD-Redirect $rtd_redirect always;
7676
set $rtd_resolver_filename $upstream_http_x_rtd_resolver_filename;
7777
add_header X-RTD-Resolver-Filename $rtd_resolver_filename always;
78+
set $x_robots_tag $upstream_http_x_robots_tag;
79+
add_header X-Robots-Tag $x_robots_tag always;
7880
set $cdn_cache_control $upstream_http_cdn_cache_control;
7981
add_header CDN-Cache-Control $cdn_cache_control always;
8082
set $cache_control $upstream_http_cache_control;

readthedocs/proxito/middleware.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,12 @@ def add_cdn_cache_headers(self, request, response):
193193
else:
194194
cache_response(response, force=False)
195195

196+
def add_x_robots_tag_headers(self, request, response):
197+
"""Add `X-Robots-Tag: noindex` header for external versions."""
198+
unresolved_domain = request.unresolved_domain
199+
if unresolved_domain and unresolved_domain.is_from_external_domain:
200+
response["X-Robots-Tag"] = "noindex"
201+
196202
def _set_request_attributes(self, request, unresolved_domain):
197203
"""
198204
Set attributes in the request from the unresolved domain.
@@ -367,6 +373,7 @@ def process_response(self, request, response): # noqa
367373
self.add_proxito_headers(request, response)
368374
self.add_cache_headers(request, response)
369375
self.add_cdn_cache_headers(request, response)
376+
self.add_x_robots_tag_headers(request, response)
370377
self.add_hsts_headers(request, response)
371378
self.add_user_headers(request, response)
372379
self.add_hosting_integrations_headers(request, response)

readthedocs/proxito/tests/test_headers.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,3 +396,27 @@ def test_cache_headers_at_browser_level_on_external_domain(self):
396396
)
397397
self.assertEqual(r.status_code, 200)
398398
self.assertEqual(r["Cache-Control"], "no-cache")
399+
400+
def test_x_robots_tag_header(self):
401+
r = self.client.get(
402+
"/en/latest/", secure=True, headers={"host": "project.dev.readthedocs.io"}
403+
)
404+
self.assertEqual(r.status_code, 200)
405+
self.assertNotIn("X-Robots-Tag", r.headers)
406+
407+
get(
408+
Version,
409+
project=self.project,
410+
slug="111",
411+
active=True,
412+
privacy_level=PUBLIC,
413+
type=EXTERNAL,
414+
)
415+
416+
r = self.client.get(
417+
"/en/111/",
418+
secure=True,
419+
headers={"host": "project--111.dev.readthedocs.build"},
420+
)
421+
self.assertEqual(r.status_code, 200)
422+
self.assertEqual(r["X-Robots-Tag"], "noindex")

0 commit comments

Comments
 (0)