Title: PageScale
Author: Shahzaib Rasheed
Published: <strong>August 26, 2026</strong>
Last modified: August 26, 2026

---

Search plugins

![](https://ps.w.org/pagescale/assets/banner-772x250.png?rev=3676698)

![](https://ps.w.org/pagescale/assets/icon-256x256.png?rev=3676698)

# PageScale

 By [Shahzaib Rasheed](https://profiles.wordpress.org/shahzeb2u/)

[Download](https://downloads.wordpress.org/plugin/pagescale.1.5.1.zip)

 * [Details](https://wordpress.org/plugins/pagescale/#description)
 * [Reviews](https://wordpress.org/plugins/pagescale/#reviews)
 *  [Installation](https://wordpress.org/plugins/pagescale/#installation)
 * [Development](https://wordpress.org/plugins/pagescale/#developers)

 [Support](https://wordpress.org/support/plugin/pagescale/)

## Description

PageScale replaces the default WordPress Pages screen with an admin interface built
to stay fast on sites that have tens of thousands (or millions) of pages. The stock
list table slows down at that scale because it relies on OFFSET pagination and unindexed
queries. PageScale takes a different approach at every layer.

**How it stays fast**

 * Keyset (cursor) pagination instead of OFFSET, so the cost of loading any page
   of results is constant whether you have 10,000 rows or 1,000,000.
 * Lazy hierarchy: only the children of a node you actually expand are queried. 
   The tree never loads the whole site at once.
 * Tiered search: numeric input goes straight to the primary key, slugs use an indexed
   equality/prefix lookup, and title/content/custom-field search uses InnoDB FULLTEXT(
   MATCH … AGAINST) rather than a leading-wildcard LIKE. Content and custom-field
   search is optional via a UI toggle and runs entirely in MySQL, so post content
   is never loaded into PHP memory.
 * Virtual scrolling keeps the DOM bounded (about 50 rows) at any dataset size.
 * Cached aggregates: totals, the parents list and duplicate reports are cached 
   with the Transients API.

**Other features**

 * Elementor-aware quick actions.
 * Bulk actions, chunked client-side so large operations don’t time out.
 * Duplicate finder for titles, exact slugs and similar slugs.
 * CSV export of the current view or a selection.
 * WP-CLI command to build the search indexes on demand.

**Indexing is safe on large tables**

PageScale never runs a long ALTER TABLE during activation. Instead it records that
indexes are pending and builds them lazily, one at a time, on later admin loads (
or immediately via WP-CLI). The plugin is fully usable while indexing is in progress,
and search simply runs in a basic mode until the FULLTEXT indexes exist.

## Screenshots

[⌊The scalable Pages screen: virtual-scrolled list, parent-page overview and quick
actions, staying fast at 8,000+ pages.⌉⌊The scalable Pages screen: virtual-scrolled
list, parent-page overview and quick actions, staying fast at 8,000+ pages.⌉[

The scalable Pages screen: virtual-scrolled list, parent-page overview and quick
actions, staying fast at 8,000+ pages.

[⌊Lazy-loading hierarchy: drilling into a parent loads only that node's children,
never the whole tree.⌉⌊Lazy-loading hierarchy: drilling into a parent loads only
that node's children, never the whole tree.⌉[

Lazy-loading hierarchy: drilling into a parent loads only that node’s children, 
never the whole tree.

[⌊Tiered search across titles, slugs, content and ACF custom fields, with live result
counts.⌉⌊Tiered search across titles, slugs, content and ACF custom fields, with
live result counts.⌉[

Tiered search across titles, slugs, content and ACF custom fields, with live result
counts.

[⌊Duplicate finder scanning for same-title pages across the whole site.⌉⌊Duplicate
finder scanning for same-title pages across the whole site.⌉[

Duplicate finder scanning for same-title pages across the whole site.

## Installation

 1. Upload the `pagescale` folder to `/wp-content/plugins/`, or install the plugin 
    through the Plugins screen in WordPress.
 2. Activate the plugin through the Plugins screen.
 3. Open **Pages > Scalable Manager** in the admin menu.
 4. On large sites, optionally run `wp pgscl build-indexes` via WP-CLI to build the
    search indexes immediately instead of waiting for them to build in the background.

## FAQ

### Does this add database indexes to my site?

Yes. It adds a small number of composite and FULLTEXT indexes to wp_posts and wp_postmeta
to make search and sorting fast. They are created lazily, one per request, so activation
is instant and no request runs long enough to time out.

### Does it work without the indexes?

Yes. Until the indexes finish building, search falls back to a bounded, basic mode.
Everything else works normally.

### Which capability is required?

Managing pages requires the edit_pages capability, checked on every REST route. 
Private pages are only shown to users who can read them, and per-page edit and delete
actions are checked individually.

### Does it modify my content?

No. Read operations never load post content into PHP. Edit and bulk actions use 
standard WordPress functions and respect per-page capabilities.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“PageScale” is open source software. The following people have contributed to this
plugin.

Contributors

 *   [ Shahzaib Rasheed ](https://profiles.wordpress.org/shahzeb2u/)

[Translate “PageScale” into your language.](https://translate.wordpress.org/projects/wp-plugins/pagescale)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/pagescale/), check 
out the [SVN repository](https://plugins.svn.wordpress.org/pagescale/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/pagescale/) by [RSS](https://plugins.trac.wordpress.org/log/pagescale/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.5.1

 * Security: apply private-page readability filtering to the /parents, /export and/
   default-view REST endpoints so private pages a user cannot read are never exposed,
   including by direct ID.
 * Cache the parents list per user to avoid serving one user’s readable set to another.

#### 1.5.0

 * Initial public release: keyset pagination, lazy tree, tiered FULLTEXT search,
   virtual scrolling.
 * Duplicate finder for titles, exact slugs and similar slugs.
 * CSV export with formula-injection guarding.
 * Lazy, timeout-safe index building with a WP-CLI command.

## Meta

 *  Version **1.5.1**
 *  Last updated **1 week ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.1**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [admin](https://wordpress.org/plugins/tags/admin/)[page management](https://wordpress.org/plugins/tags/page-management/)
   [pages](https://wordpress.org/plugins/tags/pages/)[performance](https://wordpress.org/plugins/tags/performance/)
   [search](https://wordpress.org/plugins/tags/search/)
 *  [Advanced View](https://wordpress.org/plugins/pagescale/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/pagescale/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/pagescale/reviews/)

## Contributors

 *   [ Shahzaib Rasheed ](https://profiles.wordpress.org/shahzeb2u/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/pagescale/)