diff --git a/internal/postgres/delete.go b/internal/postgres/delete.go
index a8cb0ca..94d0e23 100644
--- a/internal/postgres/delete.go
+++ b/internal/postgres/delete.go
@@ -10,7 +10,6 @@
 
 	"github.com/Masterminds/squirrel"
 	"github.com/lib/pq"
-	"golang.org/x/mod/semver"
 	"golang.org/x/pkgsite/internal"
 	"golang.org/x/pkgsite/internal/database"
 	"golang.org/x/pkgsite/internal/derrors"
@@ -44,43 +43,6 @@
 	})
 }
 
-// DeleteOlderVersionFromSearchDocuments deletes from search_documents every package with
-// the given module path whose version is older than the given version.
-// It is used when fetching a module with an alternative path. See internal/worker/fetch.go:fetchAndUpdateState.
-func (db *DB) DeleteOlderVersionFromSearchDocuments(ctx context.Context, modulePath, resolvedVersion string) (err error) {
-	defer derrors.WrapStack(&err, "DeleteOlderVersionFromSearchDocuments(ctx, %q, %q)", modulePath, resolvedVersion)
-
-	return db.db.Transact(ctx, sql.LevelDefault, func(tx *database.DB) error {
-		// Collect all package paths in search_documents with the given module path
-		// and an older version. (package_path is the primary key of search_documents.)
-		var ppaths []string
-		query := `
-			SELECT package_path, version
-			FROM search_documents
-			WHERE module_path = $1
-		`
-		err := tx.RunQuery(ctx, query, func(rows *sql.Rows) error {
-			var ppath, v string
-			if err := rows.Scan(&ppath, &v); err != nil {
-				return err
-			}
-			if semver.Compare(v, resolvedVersion) < 0 {
-				ppaths = append(ppaths, ppath)
-			}
-			return nil
-		}, modulePath)
-		if err != nil {
-			return err
-		}
-		if len(ppaths) == 0 {
-			return nil
-		}
-
-		// Delete all of those paths.
-		return deleteModuleOrPackagesInModuleFromSearchDocuments(ctx, tx, modulePath, ppaths)
-	})
-}
-
 // deleteOtherModulePackagesFromSearchDocuments deletes all packages from search
 // documents with the given module that are not in m.
 func deleteOtherModulePackagesFromSearchDocuments(ctx context.Context, tx *database.DB, m *internal.Module) error {
diff --git a/internal/postgres/delete_test.go b/internal/postgres/delete_test.go
index ae15a73..87868f3 100644
--- a/internal/postgres/delete_test.go
+++ b/internal/postgres/delete_test.go
@@ -85,20 +85,6 @@
 		checkSearchDocuments(ctx, t, db, initial[2:])
 	}
 
-	t.Run("DeleteOlderVersionFromSearchDocuments", func(t *testing.T) {
-		testDB, release := acquire(t)
-		defer release()
-		insertInitial(testDB)
-
-		if err := testDB.DeleteOlderVersionFromSearchDocuments(ctx, modulePath, "v1.2.3"); err != nil {
-			t.Fatal(err)
-		}
-
-		checkSearchDocuments(ctx, t, testDB, []searchDocumentRow{
-			{modulePath + "/p4", modulePath, "v1.9.0", 0}, // newer version not deleted
-			{"other.org/p2", "other.org", "v1.1.0", 0},    // other module not deleted
-		})
-	})
 	t.Run("deleteModuleFromSearchDocuments", func(t *testing.T) {
 		// Non-empty list of packages tested above. This tests an empty list.
 		testDB, release := acquire(t)
diff --git a/internal/worker/fetch.go b/internal/worker/fetch.go
index 3dc44d1..6dd9983 100644
--- a/internal/worker/fetch.go
+++ b/internal/worker/fetch.go
@@ -371,25 +371,7 @@
 
 	// Update the latest good version for this module, because deleting this
 	// version may have changed it.
-	if err := db.UpdateLatestGoodVersion(ctx, ft.ModulePath); err != nil {
-		return err
-	}
-
-	// If this was an alternative path (ft.Status == 491) and there is an older
-	// version in search_documents, delete it. This is the case where a module's
-	// canonical path was changed by the addition of a go.mod file. For example,
-	// versions of logrus before it acquired a go.mod file could have the path
-	// github.com/Sirupsen/logrus, but once the go.mod file specifies that the
-	// path is all lower-case, the old versions should not show up in search. We
-	// still leave their pages in the database so users of those old versions
-	// can still view documentation.
-	if ft.Status == derrors.ToStatus(derrors.AlternativeModule) {
-		log.Infof(ctx, "%s@%s: code=491, deleting older version from search", ft.ModulePath, ft.ResolvedVersion)
-		if err := db.DeleteOlderVersionFromSearchDocuments(ctx, ft.ModulePath, ft.ResolvedVersion); err != nil {
-			return err
-		}
-	}
-	return nil
+	return db.UpdateLatestGoodVersion(ctx, ft.ModulePath)
 }
 
 func logTaskResult(ctx context.Context, ft *fetchTask, prefix string) {
