diff --git a/gddo-server/main.go b/gddo-server/main.go
index f02c539..d316344 100644
--- a/gddo-server/main.go
+++ b/gddo-server/main.go
@@ -1070,6 +1070,7 @@
 	RedirectHost string
 	Latency      time.Duration
 	IsRobot      bool
+	UsePkgGoDev  bool
 }
 
 func newGDDOEvent(r *http.Request, latency time.Duration, isRobot bool) *gddoEvent {
@@ -1082,6 +1083,7 @@
 		RedirectHost: pkgGoDevURL.String(),
 		Latency:      latency,
 		IsRobot:      isRobot,
+		UsePkgGoDev:  shouldRedirectToPkgGoDev(r),
 	}
 }
 
@@ -1114,6 +1116,19 @@
 	return req.FormValue("utm_source") == "backtogodoc"
 }
 
+func shouldRedirectToPkgGoDev(req *http.Request) bool {
+	// API requests are not redirected.
+	if strings.HasPrefix(req.URL.Host, "api") {
+		return false
+	}
+	redirectParam := req.FormValue(pkgGoDevRedirectParam)
+	if redirectParam == pkgGoDevRedirectOn || redirectParam == pkgGoDevRedirectOff {
+		return redirectParam == pkgGoDevRedirectOn
+	}
+	cookie, err := req.Cookie(pkgGoDevRedirectCookie)
+	return (err == nil && cookie.Value == pkgGoDevRedirectOn)
+}
+
 // pkgGoDevRedirectHandler redirects requests from godoc.org to pkg.go.dev,
 // based on whether a cookie is set for pkggodev-redirect. The cookie
 // can be turned on/off using a query param.
@@ -1134,19 +1149,7 @@
 			http.SetCookie(w, cookie)
 		}
 
-		var shouldRedirect bool
-		if redirectParam == pkgGoDevRedirectOn || redirectParam == pkgGoDevRedirectOff {
-			shouldRedirect = redirectParam == pkgGoDevRedirectOn
-		} else {
-			for _, v := range r.Cookies() {
-				if v.Name == pkgGoDevRedirectCookie {
-					shouldRedirect = v.Value == pkgGoDevRedirectOn
-					break
-				}
-			}
-		}
-
-		if !shouldRedirect {
+		if !shouldRedirectToPkgGoDev(r) {
 			return f(w, r)
 		}
 
diff --git a/gddo-server/main_test.go b/gddo-server/main_test.go
index 1624306..1f29fa7 100644
--- a/gddo-server/main_test.go
+++ b/gddo-server/main_test.go
@@ -166,53 +166,139 @@
 
 func TestNewGDDOEvent(t *testing.T) {
 	for _, test := range []struct {
-		url  string
-		want *gddoEvent
+		name   string
+		url    string
+		cookie *http.Cookie
+		want   *gddoEvent
 	}{
 		{
-			url: "https://godoc.org",
+			name: "home page request",
+			url:  "https://godoc.org",
 			want: &gddoEvent{
-				Host: "godoc.org",
-				Path: "",
+				Host:        "godoc.org",
+				Path:        "",
+				UsePkgGoDev: false,
 			},
 		},
 		{
-			url: "https://godoc.org/-/about",
+			name:   "home page request with cookie on should redirect",
+			url:    "https://godoc.org",
+			cookie: &http.Cookie{Name: "pkggodev-redirect", Value: "on"},
 			want: &gddoEvent{
-				Host: "godoc.org",
-				Path: "/-/about",
+				Host:        "godoc.org",
+				Path:        "",
+				UsePkgGoDev: true,
 			},
 		},
 		{
-			url: "https://godoc.org/?q=test",
+			name: "about page request",
+			url:  "https://godoc.org/-/about",
 			want: &gddoEvent{
-				Host: "godoc.org",
-				Path: "/",
+				Host:        "godoc.org",
+				Path:        "/-/about",
+				UsePkgGoDev: false,
 			},
 		},
 		{
-			url: "https://godoc.org/net/http",
+			name: "request with search query parameter",
+			url:  "https://godoc.org/?q=test",
 			want: &gddoEvent{
-				Host: "godoc.org",
-				Path: "/net/http",
+				Host:        "godoc.org",
+				Path:        "/",
+				UsePkgGoDev: false,
 			},
 		},
 		{
-			url: "https://api.godoc.org/imports/net/http",
+			name: "package page request",
+			url:  "https://godoc.org/net/http",
 			want: &gddoEvent{
-				Host: "api.godoc.org",
-				Path: "/imports/net/http",
+				Host:        "godoc.org",
+				Path:        "/net/http",
+				UsePkgGoDev: false,
+			},
+		},
+		{
+			name:   "package page request with wrong cookie on should not redirect",
+			url:    "https://godoc.org/net/http",
+			cookie: &http.Cookie{Name: "bogus-cookie", Value: "on"},
+			want: &gddoEvent{
+				Host:        "godoc.org",
+				Path:        "/net/http",
+				UsePkgGoDev: false,
+			},
+		},
+		{
+			name:   "package page request with query parameter off should not redirect",
+			url:    "https://godoc.org/net/http?redirect=off",
+			cookie: &http.Cookie{Name: "pkggodev-redirect", Value: "on"},
+			want: &gddoEvent{
+				Host:        "godoc.org",
+				Path:        "/net/http",
+				UsePkgGoDev: false,
+			},
+		},
+		{
+			name:   "package page request with cookie on should redirect",
+			url:    "https://godoc.org/net/http",
+			cookie: &http.Cookie{Name: "pkggodev-redirect", Value: "on"},
+			want: &gddoEvent{
+				Host:        "godoc.org",
+				Path:        "/net/http",
+				UsePkgGoDev: true,
+			},
+		},
+		{
+			name:   "package page request with query parameter on should redirect",
+			url:    "https://godoc.org/net/http?redirect=on",
+			cookie: &http.Cookie{Name: "pkggodev-redirect", Value: ""},
+			want: &gddoEvent{
+				Host:        "godoc.org",
+				Path:        "/net/http",
+				UsePkgGoDev: true,
+			},
+		},
+		{
+			name: "api request",
+			url:  "https://api.godoc.org/imports/net/http",
+			want: &gddoEvent{
+				Host:        "api.godoc.org",
+				Path:        "/imports/net/http",
+				UsePkgGoDev: false,
+			},
+		},
+		{
+			name:   "api requests should never redirect, even with cookie on",
+			url:    "https://api.godoc.org/imports/net/http",
+			cookie: &http.Cookie{Name: "pkggodev-redirect", Value: "on"},
+			want: &gddoEvent{
+				Host:        "api.godoc.org",
+				Path:        "/imports/net/http",
+				UsePkgGoDev: false,
+			},
+		},
+		{
+			name:   "api requests should never redirect, even with query parameter on",
+			url:    "https://api.godoc.org/imports/net/http?redirect=on",
+			cookie: &http.Cookie{Name: "pkggodev-redirect", Value: ""},
+			want: &gddoEvent{
+				Host:        "api.godoc.org",
+				Path:        "/imports/net/http",
+				UsePkgGoDev: false,
 			},
 		},
 	} {
-		t.Run(test.url, func(t *testing.T) {
-			r := httptest.NewRequest("GET", test.url, nil)
+		t.Run(test.name, func(t *testing.T) {
 			want := test.want
 			want.Latency = 100
 			want.RedirectHost = "https://" + pkgGoDevHost
 			want.URL = test.url
 			want.Header = http.Header{}
 			want.IsRobot = true
+			r := httptest.NewRequest("GET", test.url, nil)
+			if test.cookie != nil {
+				r.AddCookie(test.cookie)
+				want.Header.Add("Cookie", test.cookie.String())
+			}
 			got := newGDDOEvent(r, want.Latency, want.IsRobot)
 			if diff := cmp.Diff(want, got); diff != "" {
 				t.Fatalf("mismatch (-want +got):\n%s", diff)
