{"id":328556,"date":"2026-06-30T14:16:21","date_gmt":"2026-06-30T14:16:21","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/bkoding-orphan-page-finder\/"},"modified":"2026-06-30T14:15:55","modified_gmt":"2026-06-30T14:15:55","slug":"orphan-page-finder","status":"publish","type":"plugin","link":"https:\/\/fuc.wordpress.org\/plugins\/orphan-page-finder\/","author":23519231,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.0","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"BKoding \u2013 Orphan Page Finder","header_author":"Bablu Kumar Singha","header_description":"Finds all WordPress posts and pages that have zero internal links pointing to them.","assets_banners_color":"7aaad0","last_updated":"2026-06-30 14:15:55","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/bkoding\/orphan-page-finder","header_author_uri":"https:\/\/github.com\/bkoding","rating":5,"author_block_rating":0,"active_installs":0,"downloads":42,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"bkoding","date":"2026-06-30 14:15:55"}},"upgrade_notice":{"1.0.1":"<p>Prefix rename for WordPress.org compliance. Deactivate and reactivate the plugin after updating.<\/p>","1.0.0":"<p>Initial release. No upgrade steps needed.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3591630,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3591630,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3591630,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3591630,"resolution":"1","location":"assets","locale":"","width":2506,"height":1482},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3591630,"resolution":"2","location":"assets","locale":"","width":2490,"height":1476},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3591630,"resolution":"3","location":"assets","locale":"","width":2490,"height":1232},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3591630,"resolution":"4","location":"assets","locale":"","width":2502,"height":1478}},"screenshots":{"1":"The Orphan Page Finder dashboard with stats bar and results table.","2":"Per-row actions \u2014 View, Edit, Mark Intentional.","3":"Bulk action bar for marking many posts at once.","4":"Empty state shown before the first scan."}},"plugin_section":[],"plugin_tags":[6681,11851,252136,186,20034],"plugin_category":[55],"plugin_contributors":[269600],"plugin_business_model":[],"class_list":["post-328556","plugin","type-plugin","status-publish","hentry","plugin_tags-internal-links","plugin_tags-link-building","plugin_tags-orphan-pages","plugin_tags-seo","plugin_tags-site-audit","plugin_category-seo-and-marketing","plugin_contributors-bkoding","plugin_committers-bkoding"],"banners":{"banner":"https:\/\/ps.w.org\/orphan-page-finder\/assets\/banner-772x250.png?rev=3591630","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/orphan-page-finder\/assets\/icon-128x128.png?rev=3591630","icon_2x":"https:\/\/ps.w.org\/orphan-page-finder\/assets\/icon-256x256.png?rev=3591630","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/orphan-page-finder\/assets\/screenshot-1.png?rev=3591630","caption":"The Orphan Page Finder dashboard with stats bar and results table."},{"src":"https:\/\/ps.w.org\/orphan-page-finder\/assets\/screenshot-2.png?rev=3591630","caption":"Per-row actions \u2014 View, Edit, Mark Intentional."},{"src":"https:\/\/ps.w.org\/orphan-page-finder\/assets\/screenshot-3.png?rev=3591630","caption":"Bulk action bar for marking many posts at once."},{"src":"https:\/\/ps.w.org\/orphan-page-finder\/assets\/screenshot-4.png?rev=3591630","caption":"Empty state shown before the first scan."}],"raw_content":"<!--section=description-->\n<p><strong>Orphan Page Finder<\/strong> scans your entire WordPress site and surfaces every published post, page, or custom post type that has <em>zero internal links<\/em> pointing to it from any other published content.<\/p>\n\n<h4>What is an orphan page?<\/h4>\n\n<p>An orphan page is a page that no other page on your site links to. Because search engines primarily discover new pages by following links, orphan pages are often invisible to Google and other crawlers. Even if a page has great content, it may never rank if nothing points to it.<\/p>\n\n<h4>Why does this hurt SEO?<\/h4>\n\n<ul>\n<li><strong>Crawlability<\/strong> \u2014 Googlebot follows links to discover pages. An unlinked page may never be crawled or indexed.<\/li>\n<li><strong>PageRank flow<\/strong> \u2014 Internal links pass authority. Orphan pages receive none.<\/li>\n<li><strong>User experience<\/strong> \u2014 Visitors can only reach orphan pages via direct URL or your sitemap, not through natural navigation.<\/li>\n<li><strong>Wasted content investment<\/strong> \u2014 Hours of writing go unread and unranked.<\/li>\n<\/ul>\n\n<h4>What does this plugin do?<\/h4>\n\n<ol>\n<li>Scans all published posts, pages, and custom post types in a single pass.<\/li>\n<li>Searches all other published content for href links pointing to each page \u2014 including both absolute URLs and relative paths.<\/li>\n<li>Flags any page with zero inbound internal links as an <strong>orphan<\/strong>.<\/li>\n<li>Displays results in a clean dashboard table with post type, publish date, word count, and status badges.<\/li>\n<li>Lets you <strong>mark pages as \"Intentional\"<\/strong> (e.g. landing pages you deliberately exclude from navigation) so they don't clutter your fix list.<\/li>\n<li>Supports <strong>bulk actions<\/strong> \u2014 mark or unmark many posts at once.<\/li>\n<li>Works with Posts, Pages, and <strong>any registered public Custom Post Type<\/strong>.<\/li>\n<\/ol>\n\n<h4>Performance-friendly design<\/h4>\n\n<ul>\n<li>Scans all content in a single optimised query, then processes results in batches of 50 with micro-sleeps to avoid overloading shared hosting.<\/li>\n<li>A transient flag prevents two simultaneous scans from running at once.<\/li>\n<li>Stores results in a dedicated lightweight database table so you can filter and sort without re-scanning.<\/li>\n<\/ul>\n\n<h4>Premium features (coming soon)<\/h4>\n\n<ul>\n<li><strong>Scheduled auto-scan<\/strong> \u2014 run weekly scans automatically via WP-Cron.<\/li>\n<li><strong>Email alerts<\/strong> \u2014 get notified by email when new orphan pages are discovered.<\/li>\n<li><strong>Bulk link suggestions<\/strong> \u2014 AI-powered suggestions for where to add internal links.<\/li>\n<li><strong>Multi-site support<\/strong> \u2014 scan across an entire WordPress Multisite network.<\/li>\n<li><strong>White-label PDF report<\/strong> \u2014 export a branded PDF report for clients.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>orphan-page-finder<\/code> folder to your <code>\/wp-content\/plugins\/<\/code> directory, or install the plugin directly through the WordPress Plugins screen.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<li>Navigate to <strong>Tools \u2192 Orphan Pages<\/strong>.<\/li>\n<li>Click <strong>Scan Now<\/strong> to run your first scan.<\/li>\n<li>Review the results table and start adding internal links to your orphan pages.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20long%20does%20a%20scan%20take%3F\"><h3>How long does a scan take?<\/h3><\/dt>\n<dd><p>On most sites (under 500 posts) a scan completes in under 10 seconds. On very large sites (10,000+ posts) it may take 1\u20132 minutes. The plugin processes posts in batches with short pauses to avoid server timeout issues.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20check%20links%20in%20menus%20or%20widgets%3F\"><h3>Does the plugin check links in menus or widgets?<\/h3><\/dt>\n<dd><p>Version 1.0 checks links inside <code>post_content<\/code> of other published posts and pages. Links in navigation menus, widgets, or theme templates are not counted. This is by design \u2014 content-level internal links are what matter most for SEO.<\/p><\/dd>\n<dt id=\"what%20does%20%22mark%20as%20intentional%22%20mean%3F\"><h3>What does \"Mark as Intentional\" mean?<\/h3><\/dt>\n<dd><p>Some pages are deliberately not linked from other content \u2014 for example, a paid landing page, a thank-you page, or a coming-soon page. Marking a page as \"Intentional\" removes it from your action list without deleting the record, so you can focus on pages that genuinely need fixing.<\/p><\/dd>\n<dt id=\"will%20running%20a%20scan%20affect%20my%20site%27s%20performance%3F\"><h3>Will running a scan affect my site's performance?<\/h3><\/dt>\n<dd><p>The scan is a background admin operation and only runs when triggered by an admin user. It uses batch processing with micro-sleeps to stay lightweight on shared hosting. It does not affect the front end of your site.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20custom%20post%20types%3F\"><h3>Does it work with custom post types?<\/h3><\/dt>\n<dd><p>Yes. Any post type registered as <code>public =&gt; true<\/code> is automatically included in the scan.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Renamed all internal prefixes from <code>opf<\/code> to <code>bkopf<\/code> to meet WordPress.org uniqueness requirements.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Full site scan for orphan posts, pages, and custom post types.<\/li>\n<li>Results stored in a dedicated database table.<\/li>\n<li>Filter by post type or show\/hide intentionally marked pages.<\/li>\n<li>Per-row Mark Intentional \/ Unmark actions (no page reload).<\/li>\n<li>Bulk Mark \/ Unmark actions.<\/li>\n<li>Scan-in-progress transient to prevent duplicate scans.<\/li>\n<li>Premium hook stubs: bkopf_schedule_scan, bkopf_after_scan.<\/li>\n<li>Full i18n support with .pot file.<\/li>\n<\/ul>","raw_excerpt":"Find all posts and pages on your WordPress site that have no internal links pointing to them \u2014 fix your orphan pages fast.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/328556","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=328556"}],"author":[{"embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/bkoding"}],"wp:attachment":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=328556"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=328556"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=328556"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=328556"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=328556"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=328556"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}