diff --git a/internal/postgres/excluded.go b/internal/postgres/excluded.go
index a0a7cc1..9010f2c 100644
--- a/internal/postgres/excluded.go
+++ b/internal/postgres/excluded.go
@@ -46,9 +46,7 @@
 		prefix, user, reason)
 	if err != nil {
 		// Arrange to re-read the excluded_prefixes table on the next call to IsExcluded.
-		excludedPrefixes.mu.Lock()
-		excludedPrefixes.lastFetched = time.Time{}
-		excludedPrefixes.mu.Unlock()
+		setExcludedPrefixesLastFetched(time.Time{})
 	}
 	return err
 }
@@ -61,9 +59,15 @@
 	lastFetched time.Time
 }
 
+func setExcludedPrefixesLastFetched(t time.Time) {
+	excludedPrefixes.mu.Lock()
+	excludedPrefixes.lastFetched = t
+	excludedPrefixes.mu.Unlock()
+}
+
 const excludedPrefixesExpiration = time.Minute
 
-// refreshExcludedPrefixes makes sure the in-memory copy of the
+// ensureExcludedPrefixes makes sure the in-memory copy of the
 // excluded_prefixes table is up to date.
 func (db *DB) ensureExcludedPrefixes(ctx context.Context) {
 	excludedPrefixes.mu.Lock()
@@ -96,5 +100,6 @@
 	if err != nil {
 		return nil, err
 	}
+	setExcludedPrefixesLastFetched(time.Now())
 	return eps, nil
 }
diff --git a/internal/postgres/search.go b/internal/postgres/search.go
index 1166c30..2076240 100644
--- a/internal/postgres/search.go
+++ b/internal/postgres/search.go
@@ -123,7 +123,18 @@
 	if err != nil {
 		return nil, err
 	}
-	return resp.results, nil
+	// Filter out excluded paths.
+	var results []*internal.SearchResult
+	for _, r := range resp.results {
+		ex, err := db.IsExcluded(ctx, r.PackagePath)
+		if err != nil {
+			return nil, err
+		}
+		if !ex {
+			results = append(results, r)
+		}
+	}
+	return results, nil
 }
 
 // Penalties to search scores, applied as multipliers to the score.
diff --git a/internal/postgres/search_test.go b/internal/postgres/search_test.go
index 5626df4..a13bf80 100644
--- a/internal/postgres/search_test.go
+++ b/internal/postgres/search_test.go
@@ -621,6 +621,37 @@
 	}
 }
 
+func TestExcludedFromSearch(t *testing.T) {
+	// Verify that excluded paths are omitted from search results.
+	ctx, cancel := context.WithTimeout(context.Background(), testTimeout)
+	defer cancel()
+	defer ResetTestDB(testDB, t)
+
+	// Insert a module with two packages.
+	const domain = "exclude.com"
+	sm := sample.Module(domain, "v1.2.3", "pkg", "exclude")
+	if err := testDB.InsertModule(ctx, sm); err != nil {
+		t.Fatal(err)
+	}
+	// Exclude a prefix that matches one of the packages.
+	if err := testDB.InsertExcludedPrefix(ctx, domain+"/ex", "no user", "no reason"); err != nil {
+		t.Fatal(err)
+	}
+	// Search for both packages.
+	gotResults, err := testDB.Search(ctx, domain, 10, 0)
+	if err != nil {
+		t.Fatal(err)
+	}
+	var got []string
+	for _, g := range gotResults {
+		got = append(got, g.Name)
+	}
+	want := []string{"pkg"}
+	if !cmp.Equal(got, want) {
+		t.Errorf("got %v, want %v", got, want)
+	}
+}
+
 type searchDocument struct {
 	packagePath              string
 	modulePath               string
diff --git a/internal/postgres/test_helper.go b/internal/postgres/test_helper.go
index cb85d20..b68b2e6 100644
--- a/internal/postgres/test_helper.go
+++ b/internal/postgres/test_helper.go
@@ -12,6 +12,7 @@
 	"os"
 	"path/filepath"
 	"testing"
+	"time"
 
 	"github.com/golang-migrate/migrate/v4"
 	"golang.org/x/pkgsite/internal/database"
@@ -116,6 +117,7 @@
 		if _, err := tx.Exec(ctx, `TRUNCATE excluded_prefixes;`); err != nil {
 			return err
 		}
+		setExcludedPrefixesLastFetched(time.Time{})
 		return nil
 	}); err != nil {
 		t.Fatalf("error resetting test DB: %v", err)
