{"id":394108,"date":"2026-10-28T15:37:30","date_gmt":"2026-10-28T15:37:30","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/trazelio-migration-leftover-url-scanner\/"},"modified":"2026-10-28T15:37:09","modified_gmt":"2026-10-28T15:37:09","slug":"trazelio-migration-leftover-url-scanner","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/trazelio-migration-leftover-url-scanner\/","author":23530379,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Trazelio \u2013 Migration Leftover URL Scanner","header_author":"Muhammad Mujahid Sarfraz","header_description":"Finds old domains, staging and localhost URLs, insecure http:\/\/ links and foreign server paths left in the database after a site migration, and fixes them safely with serialization-aware replacement and one-click rollback.","assets_banners_color":"a5acc4","last_updated":"2026-10-28 15:37:09","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/trazelio\/","header_author_uri":"https:\/\/profiles.wordpress.org\/mujahidwp\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":66,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"mujahidwp","date":"2026-10-28 15:37:09","revision":3770985}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3770978,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3770978,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3770978,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3770978,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3770978,"resolution":"1","location":"assets","locale":"","width":1280,"height":1251},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3770978,"resolution":"2","location":"assets","locale":"","width":1280,"height":888}},"screenshots":{"1":"Scan results grouped by address, with type, count and location.","2":"Preview with before\/after examples and backup confirmation.","3":"Fix history with one-click rollback."}},"plugin_section":[],"plugin_tags":[23369,4155,24593,12126,19979],"plugin_category":[59],"plugin_contributors":[281325],"plugin_business_model":[],"class_list":["post-394108","plugin","type-plugin","status-publish","hentry","plugin_tags-localhost","plugin_tags-migration","plugin_tags-mixed-content","plugin_tags-search-replace","plugin_tags-staging","plugin_category-utilities-and-tools","plugin_contributors-mujahidwp","plugin_committers-mujahidwp"],"banners":{"banner":"https:\/\/ps.w.org\/trazelio-migration-leftover-url-scanner\/assets\/banner-772x250.png?rev=3770978","banner_2x":"https:\/\/ps.w.org\/trazelio-migration-leftover-url-scanner\/assets\/banner-1544x500.png?rev=3770978","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/trazelio-migration-leftover-url-scanner\/assets\/icon-128x128.png?rev=3770978","icon_2x":"https:\/\/ps.w.org\/trazelio-migration-leftover-url-scanner\/assets\/icon-256x256.png?rev=3770978","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/trazelio-migration-leftover-url-scanner\/assets\/screenshot-1.png?rev=3770978","caption":"Scan results grouped by address, with type, count and location."},{"src":"https:\/\/ps.w.org\/trazelio-migration-leftover-url-scanner\/assets\/screenshot-2.png?rev=3770978","caption":"Preview with before\/after examples and backup confirmation."}],"raw_content":"<!--section=description-->\n<p>After moving a WordPress site, the database is often still full of addresses that point somewhere else: the old domain, the staging copy, <code>localhost:8080<\/code>, a temporary hosting domain, or <code>http:\/\/<\/code> links that cause mixed content warnings. Search-and-replace tools can fix these, but only if you already know every address to look for.<\/p>\n\n<p><strong>Trazelio finds them for you.<\/strong> It scans post content, post meta, term meta and options, groups everything it finds by address, and shows exactly where each one is stored. You decide what to fix.<\/p>\n\n<h4>What it detects<\/h4>\n\n<ul>\n<li><strong>Local \/ development addresses<\/strong> \u2013 <code>localhost<\/code>, <code>127.0.0.1<\/code>, private network IPs, <code>.local<\/code>, <code>.test<\/code> and similar development domains.<\/li>\n<li><strong>Staging and temporary domains<\/strong> \u2013 staging subdomains and temporary domains from common hosts (WP Engine, Kinsta, Cloudways, Pantheon, InstaWP, WordPress.com staging and more).<\/li>\n<li><strong>Other WordPress addresses<\/strong> \u2013 links to <code>wp-content<\/code>, <code>wp-includes<\/code>, <code>wp-json<\/code> or <code>?p=<\/code> URLs on another domain. When a linked upload also exists in your own uploads folder, Trazelio marks the host as <strong>\"Old address of this site\"<\/strong>.<\/li>\n<li><strong>Insecure http:\/\/ links<\/strong> \u2013 links to your own site over <code>http:\/\/<\/code> on an <code>https:\/\/<\/code> site.<\/li>\n<li><strong>Old server paths<\/strong> \u2013 absolute folder paths from a previous server (for example <code>\/home\/olduser\/<\/code> or <code>C:\\xampp\\<\/code>), reported so you can re-save the plugin settings that hold them.<\/li>\n<\/ul>\n\n<p>URLs are found in every form WordPress stores them: plain, JSON-escaped (<code>https:\\\/\\\/old.com<\/code>, used by page builders such as Elementor) and URL-encoded.<\/p>\n\n<h4>Safe fixing<\/h4>\n\n<ul>\n<li><strong>Preview first.<\/strong> See how many values change and before\/after examples. Nothing is written during a preview.<\/li>\n<li><strong>Serialization-aware.<\/strong> Serialized arrays are unserialized, changed and serialized again, so string lengths stay valid. Values that contain custom PHP objects or broken serialization are skipped and listed, never corrupted. No code from other plugins is run while data is inspected.<\/li>\n<li><strong>Only the domain changes.<\/strong> The scheme and host are replaced with your current site address; paths, query strings and file names stay the same.<\/li>\n<li><strong>Built-in backups and rollback.<\/strong> Every changed value is copied to a backup table before it is written. A rollback restores each value, but only if it was not edited again after the fix.<\/li>\n<li><strong>Resumable batches.<\/strong> Scans and fixes run in small batches, so large sites and short PHP time limits are fine.<\/li>\n<li><strong>Protected options.<\/strong> <code>siteurl<\/code>, <code>home<\/code>, cron, rewrite rules and transients are never changed.<\/li>\n<\/ul>\n\n<h4>WP-CLI<\/h4>\n\n<ul>\n<li><code>wp trazelio scan<\/code> \u2013 scan and list findings.<\/li>\n<li><code>wp trazelio fix \"&lt;id&gt;\" --dry-run<\/code> \u2013 count what would change.<\/li>\n<li><code>wp trazelio fix \"&lt;id&gt;\"<\/code> \u2013 apply the fix.<\/li>\n<li><code>wp trazelio rollback &lt;run&gt;<\/code> \u2013 roll a fix back.<\/li>\n<\/ul>\n\n<h4>Privacy<\/h4>\n\n<p>Trazelio does not send any data anywhere, does not call external services, has no tracking and needs no account. Everything happens in your own database.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin through the <strong>Plugins<\/strong> screen, or upload the <code>trazelio<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Go to <strong>Tools \u2192 Trazelio<\/strong>.<\/li>\n<li>Click <strong>Scan database<\/strong>.<\/li>\n<li>Review the findings, open <strong>Locations<\/strong> to see where an address is stored, and use <strong>Preview fix<\/strong> and <strong>Apply fix<\/strong> for the ones you want to replace.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20scanning%20change%20anything%3F\"><h3>Does scanning change anything?<\/h3><\/dt>\n<dd><p>No. Scanning only reads the database. Values change only when you click <strong>Apply fix<\/strong> after a preview.<\/p><\/dd>\n<dt id=\"do%20i%20still%20need%20a%20database%20backup%3F\"><h3>Do I still need a database backup?<\/h3><\/dt>\n<dd><p>Yes. Trazelio backs up every value it changes and can roll a fix back, but a full database backup before any bulk change is always recommended.<\/p><\/dd>\n<dt id=\"what%20does%20the%20fix%20replace%20the%20address%20with%3F\"><h3>What does the fix replace the address with?<\/h3><\/dt>\n<dd><p>Your current site address (Settings \u2192 General \u2192 Site Address), keeping the rest of each URL. For insecure links, only <code>http:\/\/<\/code> is changed to <code>https:\/\/<\/code>.<\/p><\/dd>\n<dt id=\"a%20finding%20is%20a%20site%20i%20link%20to%20on%20purpose.\"><h3>A finding is a site I link to on purpose.<\/h3><\/dt>\n<dd><p>Click <strong>Ignore host<\/strong>, or add it to <strong>Ignored hosts<\/strong>. Subdomains of an ignored host are ignored too. WordPress.org, WordPress.com, Gravatar and Jetpack are ignored by default.<\/p><\/dd>\n<dt id=\"why%20are%20some%20values%20skipped%3F\"><h3>Why are some values skipped?<\/h3><\/dt>\n<dd><p>Values that contain PHP objects of other plugins, or serialized data that is already broken, cannot be rewritten without risk. They are listed in the preview so you can update them in the owning plugin.<\/p><\/dd>\n<dt id=\"which%20tables%20are%20scanned%3F\"><h3>Which tables are scanned?<\/h3><\/dt>\n<dd><p>Posts (content and excerpt, revisions excluded), post meta, term meta and options of the current site. On multisite, each site is scanned from its own dashboard.<\/p><\/dd>\n<dt id=\"what%20happens%20on%20uninstall%3F\"><h3>What happens on uninstall?<\/h3><\/dt>\n<dd><p>The scan results, settings, fix history and backup table are deleted. Fixes that were applied stay in place.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Find old domains, staging and localhost URLs and insecure http:\/\/ links left behind after a migration, then fix them safely with one-click rollback.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/394108","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=394108"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/mujahidwp"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=394108"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=394108"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=394108"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=394108"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=394108"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=394108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}