<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Noshi</title>
    <description>The latest articles on DEV Community by Noshi (@nokazehayato).</description>
    <link>https://dev.to/nokazehayato</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4012155%2Fb0dd5b06-7afd-4807-ac1a-ee9894651cb9.png</url>
      <title>DEV Community: Noshi</title>
      <link>https://dev.to/nokazehayato</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nokazehayato"/>
    <language>en</language>
    <item>
      <title>What I Check When I Inherit a WordPress Site I Didn't Build</title>
      <dc:creator>Noshi</dc:creator>
      <pubDate>Wed, 26 Aug 2026 06:00:20 +0000</pubDate>
      <link>https://dev.to/nokazehayato/what-i-check-when-i-inherit-a-wordpress-site-i-didnt-build-2lp4</link>
      <guid>https://dev.to/nokazehayato/what-i-check-when-i-inherit-a-wordpress-site-i-didnt-build-2lp4</guid>
      <description>&lt;p&gt;Sometimes the site was built by another developer. Sometimes by an agency. Parts of it may also have been generated or changed with AI. But the handoff problem itself is older than AI.&lt;/p&gt;

&lt;p&gt;However it was built, you're the one touching it now. You don't know what's actually configured under the hood. Not yet.&lt;/p&gt;

&lt;p&gt;　&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Record the current state before you change anything
&lt;/h2&gt;

&lt;p&gt;Before you fix, add, or "clean up" anything, write down what you found. No one's checking your work here. But later, if something breaks, it helps to know whether it was already broken when you got there.&lt;/p&gt;

&lt;p&gt;A quick note is enough: which plugins are active, whether the site is set to be indexed, whether debug mode is on. Later, that note gives you something to compare against when a problem shows up.&lt;/p&gt;

&lt;p&gt;　&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Look at the installed plugins
&lt;/h2&gt;

&lt;p&gt;Open the plugins screen and look past the ones that are active. Look at all of them, active and inactive.&lt;/p&gt;

&lt;p&gt;For each one, ask three questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Is this plugin still maintained?&lt;/strong&gt; Check its last update date on WordPress.org. A plugin that hasn't shipped an update in a year or more is one worth reviewing before you rely on it, even if you didn't choose to install it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is this one inactive on purpose, or was it just never cleaned up?&lt;/strong&gt; An inactive plugin sitting around for years may simply be a leftover, or someone may have kept it there on purpose. Either way, it's often worth asking about.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Should I keep touching a site that depends on this?&lt;/strong&gt; Sometimes the answer is yes, and that's fine. The point is to ask that question before you start relying on the plugin.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I used to do this by opening each plugin's WordPress.org page one by one, which is tedious enough that I usually skipped the ones that "looked fine." Eventually, I automated that part of the process. I'll come back to that at the end.&lt;/p&gt;

&lt;p&gt;　&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Check the current state, not the assumed state
&lt;/h2&gt;

&lt;p&gt;You assume noindex is off because "why would anyone launch a site that's hidden from Google." You assume debug mode is off because "it's a live site." Those assumptions are often right. But inherited sites are exactly where I don't want to rely on them.&lt;/p&gt;

&lt;p&gt;Check whether the site is set to be indexed by search engines, and don't rely only on the visible setting. A theme or plugin can force noindex through code even when the visible setting looks fine. Check whether &lt;code&gt;WP_DEBUG&lt;/code&gt; is on. Check whether the default &lt;code&gt;admin&lt;/code&gt; username still exists. These aren't complicated checks, but they're easy to miss when you're focused on the actual task you were hired to do.&lt;/p&gt;

&lt;p&gt;Ask yourself, for each setting: was this intentional, or is this just what came with the site? If you can't answer that, you can't safely assume it's fine.&lt;/p&gt;

&lt;p&gt;　&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Make your changes
&lt;/h2&gt;

&lt;p&gt;Then you do the actual work: build the feature, fix the bug, make the requested changes. But now you're doing it against a baseline you actually understand, instead of a baseline you inherited blind.&lt;/p&gt;

&lt;p&gt;　&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Go through the site again before you hand it back
&lt;/h2&gt;

&lt;p&gt;Once your work is done, circle back to the same questions from step 3. Indexing, debug mode, admin username, and anything you added along the way: test posts, temporary pages, anything meant only for your own reference during the work.&lt;/p&gt;

&lt;p&gt;This is the same discipline you'd use before handing off a site you built yourself. The fact that you inherited the site doesn't change what you should leave behind when you're done. If anything, it's harder, because you're dealing with things you created during the job and things that were already there.&lt;/p&gt;

&lt;p&gt;　&lt;/p&gt;

&lt;h2&gt;
  
  
  Noshi-Kanamer
&lt;/h2&gt;

&lt;p&gt;This workflow is also why I added Site Check to Noshi-Kanamer. It scans every installed plugin, active or inactive, against WordPress.org and flags the ones that haven't been updated in 6 months or a year, so I don't have to open each plugin's WordPress.org page one by one. Then, before I hand the site back, I use Pre-Launch to check indexing, WP_DEBUG, debug.log, the default admin username, and a few other loose ends. It generates a plain-text report I can keep for myself or hand to whoever I'm delivering the work to.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wordpress.org/plugins/noshi-kanamer/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8w444bbcqb82rzfu0n3f.png" alt="Noshi-Kanamer: Pre-launch checklist &amp;amp; client handoff toolkit for WordPress" width="800" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's free on WordPress.org. If there's something you always check on an inherited site that I'm missing, I'd like to hear it.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>webdev</category>
      <category>freelancing</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>I built a WordPress site with AI. What should I check before launch?</title>
      <dc:creator>Noshi</dc:creator>
      <pubDate>Wed, 19 Aug 2026 02:43:47 +0000</pubDate>
      <link>https://dev.to/nokazehayato/i-built-a-wordpress-site-with-ai-what-should-i-check-before-launch-4dhm</link>
      <guid>https://dev.to/nokazehayato/i-built-a-wordpress-site-with-ai-what-should-i-check-before-launch-4dhm</guid>
      <description>&lt;p&gt;The site works. The forms submit. The pages look right. Is it ready to publish?&lt;/p&gt;

&lt;p&gt;That's usually the point where I stop and do a separate launch check.&lt;/p&gt;

&lt;p&gt;　&lt;/p&gt;

&lt;h2&gt;
  
  
  Is a vibe coded WordPress site safe to publish?
&lt;/h2&gt;

&lt;p&gt;A vibe coded WordPress site can be safe to publish. A working site can still have launch settings or leftover development files that need attention.&lt;/p&gt;

&lt;p&gt;For client work, there's another question too: can someone else run the site after you hand it over?&lt;/p&gt;

&lt;p&gt;　&lt;/p&gt;

&lt;h2&gt;
  
  
  Why these get missed
&lt;/h2&gt;

&lt;p&gt;Those checks often aren't part of the build request, so they can easily be missed at the end.&lt;/p&gt;

&lt;p&gt;　&lt;/p&gt;

&lt;h2&gt;
  
  
  What to check before you publish
&lt;/h2&gt;

&lt;p&gt;These aren't every pre-launch check a WordPress site needs. They're the WordPress-specific ones that are easy to miss in AI-assisted builds, the kind that don't show up when you're just clicking through the site to see if it works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Search engine visibility.&lt;/strong&gt; Settings → Reading has a checkbox that tells search engines not to index the site. If you're using it to keep the site out of search during development, it needs to go back off before launch. It's easy not to notice until someone asks why the site isn't appearing in search.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The default admin username.&lt;/strong&gt; If an account named &lt;code&gt;admin&lt;/code&gt; still exists, an attacker trying to log in doesn't have to guess the username, only the password. Create another administrator account, then remove the old admin account, rather than leaving both in place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WP_DEBUG left on.&lt;/strong&gt; In &lt;code&gt;wp-config.php&lt;/code&gt;, this should be &lt;code&gt;false&lt;/code&gt; in production unless you've set up deliberate logging. Left on, it can print warnings, including file paths, straight onto the page for anyone to see. Setting &lt;code&gt;WP_DEBUG_DISPLAY&lt;/code&gt; to false prevents those messages from being shown on the page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A leftover debug.log file.&lt;/strong&gt; Turning debug mode off doesn't delete the log it already wrote. Depending on your server configuration, &lt;code&gt;/wp-content/debug.log&lt;/code&gt; may be publicly reachable. Check whether it's still there and delete it if it is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DISALLOW_FILE_EDIT not set.&lt;/strong&gt; One line in &lt;code&gt;wp-config.php&lt;/code&gt; removes the built-in theme and plugin code editor from wp-admin. Most production sites don't need it enabled.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;XML-RPC left enabled.&lt;/strong&gt; Some setups need it (Jetpack, certain mobile apps). If your setup doesn't use it, turning it off removes an endpoint you don't need to expose.&lt;/p&gt;

&lt;p&gt;　&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping track of all of it
&lt;/h2&gt;

&lt;p&gt;Most of these checks take less than a minute. Checking the Reading setting takes ten seconds. Deleting a debug.log takes one click.&lt;/p&gt;

&lt;p&gt;The hard part is remembering them consistently, especially the ones that don't cause visible problems. A site accidentally left noindexed doesn't crash. A stray debug.log doesn't show up in a screenshot. The site can look finished either way, so these checks are easy to skip.&lt;/p&gt;

&lt;p&gt;My launch routine is simple: check, clean up what needs cleaning, and keep a record of what you checked. A record is useful later when a client asks what was verified. "I'm pretty sure I did" is a weaker answer than a dated note that says so.&lt;/p&gt;

&lt;p&gt;　&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Noshi-Kanamer fits in
&lt;/h2&gt;

&lt;p&gt;That's basically the workflow I ended up building into a small WordPress plugin.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wordpress.org/plugins/noshi-kanamer/" rel="noopener noreferrer"&gt;Noshi-Kanamer&lt;/a&gt; is free, and its Pre-Launch tab checks the status of all six items above automatically. For XML-RPC, it flags whether the interface is left open. Whether you actually need it on is still a call only you can make. It can also generate a plain-text report, which I use as a record of the launch checks.&lt;/p&gt;

&lt;p&gt;It doesn't replace the judgment calls: whether your permalink structure makes sense for the site, whether a page's copy is proofread, whether XML-RPC is actually needed for your setup. Noshi-Kanamer can't decide those for you. I use it for the boring checks and cleanup I don't want to keep in my head.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wordpress.org/plugins/noshi-kanamer/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5djolpjrnnm948we1qa1.png" alt="Noshi-Kanamer: Pre-launch checklist &amp;amp; client handoff toolkit for WordPress" width="800" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the full picture, this article covers 6 items out of a longer list. I keep a &lt;a href="https://nokazehayato.github.io/noshi-launch-checklist/" rel="noopener noreferrer"&gt;25-point WordPress launch checklist&lt;/a&gt; covering content, SEO, security, cleanup, and client handoff, if you want the complete version.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>ai</category>
      <category>security</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The AI Blind Spot: Why "It Works" Isn't the Same as "It's Safe to Launch"</title>
      <dc:creator>Noshi</dc:creator>
      <pubDate>Fri, 17 Jul 2026 09:42:41 +0000</pubDate>
      <link>https://dev.to/nokazehayato/the-ai-blind-spot-why-it-works-isnt-the-same-as-its-safe-to-launch-37h2</link>
      <guid>https://dev.to/nokazehayato/the-ai-blind-spot-why-it-works-isnt-the-same-as-its-safe-to-launch-37h2</guid>
      <description>&lt;p&gt;A few months ago, a founder posted about the SaaS he'd just shipped, built entirely with an AI coding assistant, not a line of it typed by hand. He was proud of it, and he had every right to be. Within days of launch, someone found the API key sitting in plain sight in the client-side code. It got used to bypass the paywall, spam the backend, and write garbage into the database. The founder spent the next stretch rotating every key, moving secrets into environment variables, and locking down the API endpoints that should have been locked down before anyone ever saw the site.&lt;/p&gt;

&lt;p&gt;Nothing about that story is about the AI being bad at its job. The AI did exactly what it was asked: build a working product, fast. Nobody asked it to think about what happens when a stranger opens dev tools.&lt;/p&gt;

&lt;p&gt;In the replies, someone made a simple point: AI is a great research aid, but shipping a large application still means understanding the code. Copying and pasting isn't programming. The founder didn't push back. He agreed: he'd learned it the hard way.&lt;/p&gt;

&lt;h2&gt;
  
  
  The same story, over and over
&lt;/h2&gt;

&lt;p&gt;Swap the platform and the same shape of story repeats. Here's the WordPress version: three separate, ordinary launches, three separate silent failures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A site goes live and Google never finds it.&lt;/strong&gt; Somewhere in Settings → Reading, "Discourage search engines from indexing this site" got left checked. It's a setting every staging environment needs and every production site must not have. Nobody notices until weeks later, when someone asks why the brand-new site isn't showing up in search at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A debug log sits in a predictable place, readable by anyone.&lt;/strong&gt; &lt;code&gt;wp-content/debug.log&lt;/code&gt; collects whatever errors WordPress throws (database credentials, API keys, fragments of user data) in plain text, at a URL automated scanners check within hours of a new site going live. Turning debug mode off doesn't delete the file it already wrote.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The admin username is still &lt;code&gt;admin&lt;/code&gt;.&lt;/strong&gt; It's the default nobody bothered to change, and it happens to be exactly half of every credential-stuffing attempt a bot will throw at the login page. Overnight, login attempts against a fresh install can climb into five figures.&lt;/p&gt;

&lt;p&gt;None of these are exotic. Every WordPress developer has heard of all three. And yet they keep happening, on hand-coded sites, on AI-assisted ones, on both.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this keeps happening
&lt;/h2&gt;

&lt;p&gt;Here's the pattern underneath all four stories: &lt;strong&gt;AI does what you ask. Launch safety is made of the things nobody asks for.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nobody prompts "change the default admin username." Nobody prompts "make sure debug logging is off in production," or "double-check the noindex setting before this goes live." These aren't features. They're the &lt;em&gt;absence&lt;/em&gt; of problems. Absence produces no visible change on the screen, so it never occurs to anyone to ask for it, so it never happens.&lt;/p&gt;

&lt;p&gt;This isn't a hunch. An industry study on AI-generated code found that nearly half of the samples it examined contained security weaknesses, not because the models are careless, but because the safety constraints were never part of the request in the first place. The gap isn't in what AI can do. It's in what nobody thought to ask.&lt;/p&gt;

&lt;p&gt;The same blind spot exists whether a human typed every line or an AI generated all of it. AI just means more code gets shipped by more people, faster, with fewer of them stopping to ask the questions an experienced reviewer would ask automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually helps
&lt;/h2&gt;

&lt;p&gt;You can't prompt your way out of a blind spot you don't know you have. The real fix isn't a cleverer prompt. It's not handing everything over in the first place.&lt;/p&gt;

&lt;p&gt;When the work is new (a payment flow you've never wired up before, an auth pattern you're trying for the first time), a human should look at every line before it ships. That's supposed to be slow. Once the same kind of check has been run enough times that the pattern is settled and well understood, &lt;em&gt;then&lt;/em&gt; it's reasonable to let a tool take it over. Trust in automation gets earned through repetition. It isn't something you assume on day one.&lt;/p&gt;

&lt;p&gt;That's exactly where automation fits, and where it doesn't. A good checking tool isn't a substitute for a human looking hard at something unfamiliar, and it doesn't claim to catch everything an AI-assisted build might get wrong. What it does is stand at the end of every stage, checking the things that are &lt;em&gt;already&lt;/em&gt; well understood and no longer need someone's full attention, and confirming, one more time, that they're actually clean before the site goes live.&lt;/p&gt;

&lt;p&gt;The tool catches what's routine. Building the habit of checking, especially the parts that aren't routine yet, is still on you.&lt;/p&gt;

&lt;h2&gt;
  
  
  One more thing
&lt;/h2&gt;

&lt;p&gt;I'll be honest about why I wrote this one: I keep seeing the same shape of story, on different platforms, with different tools, and it always comes down to the same gap: the things nobody thought to ask for. On the WordPress side, that's what &lt;a href="https://wordpress.org/plugins/noshi-kanamer/" rel="noopener noreferrer"&gt;Noshi-Kanamer&lt;/a&gt; is for. It started as a way to stop making these mistakes myself. It auto-detects the things that tend to slip through (WP_DEBUG left on, noindex still set, the default admin username, a stray debug.log, and more), then generates a shareable proof report of every check. It's free, it's WordPress-specific, and it's not the whole answer to AI-assisted development. It's just the part of the checklist that's easy to automate, so the parts that need a human get your full attention instead.&lt;/p&gt;

&lt;p&gt;Whatever built your site, don't skip the human check before you hand over the keys, and leave a note that proves you did.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>ai</category>
      <category>security</category>
      <category>webdev</category>
    </item>
    <item>
      <title>WordPress Pre-Launch Checklist for Client Handoff: What to Check, Clean Up, and Prove Before Delivery</title>
      <dc:creator>Noshi</dc:creator>
      <pubDate>Fri, 03 Jul 2026 02:12:02 +0000</pubDate>
      <link>https://dev.to/nokazehayato/wordpress-pre-launch-checklist-for-client-handoff-what-to-check-clean-up-and-prove-before-5ejd</link>
      <guid>https://dev.to/nokazehayato/wordpress-pre-launch-checklist-for-client-handoff-what-to-check-clean-up-and-prove-before-5ejd</guid>
      <description>&lt;p&gt;A few years ago, at an agency I worked at, we launched a corporate WordPress site by migrating the whole database from our development environment to production. The demo had looked perfect. The client had signed off.&lt;/p&gt;

&lt;p&gt;The reports started coming in almost immediately, first from our own post-launch review, then from the client's side as they clicked through their brand-new site. Buttons that led nowhere. Images that wouldn't load. Our local dev URLs were hardcoded all over the site: pasted into button links, baked into image paths. Nothing had &lt;em&gt;looked&lt;/em&gt; wrong, because on our machines, those URLs worked fine.&lt;/p&gt;

&lt;p&gt;Three of us spent the rest of that day clicking through every single page, hunting for leftovers. We fixed what we found and quietly hoped we'd found them all. No one yelled at us. The consequence was quieter than that, and heavier: the string of post-launch defects was treated as a formal incident, with a permanent entry in the company's internal incident list. That entry doesn't expire. As far as I know, it's still there.&lt;/p&gt;

&lt;p&gt;　&lt;/p&gt;

&lt;h2&gt;
  
  
  The handoff problem
&lt;/h2&gt;

&lt;p&gt;Handoff is the moment &lt;strong&gt;responsibility changes hands: the most dangerous, and the most important, moment in the entire project.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Clients trust the agency. They take it for granted, as they should, that the site they're receiving is solid. But that trust is easier to betray than anyone likes to admit. The moment a client finds a defect, doubt creeps in. However hard the team worked, a single careless leftover is enough to make them wonder: &lt;em&gt;what does the quality of this site really look like?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There's a structural reason this happens. While you're building, you're in the admin every day, and you'd notice a stray test post, a debug flag, a weird setting. After handoff, the person in the admin is your client. They edit content, upload images, and take everything at face value. The leftovers that were invisible in the demo are now &lt;em&gt;their&lt;/em&gt; discoveries.&lt;/p&gt;

&lt;p&gt;Most launch checklists focus on whether the site works. A handoff checklist asks a different question: &lt;strong&gt;what will the client find that I should have found first?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's the list I wish I'd had back then. Every item includes how to check it manually, no tools required.&lt;/p&gt;

&lt;p&gt;　&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Content cleanup
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Test posts.&lt;/strong&gt; About an hour after one delivery, a chat message arrived from the client: &lt;em&gt;"What is this 'test test' page?"&lt;/em&gt; Chat messages don't carry tone, but I could feel the reaction through the screen. Test content is harmless to the site and terrible for trust.&lt;br&gt;
&lt;em&gt;How to check:&lt;/em&gt; In the admin, go to &lt;strong&gt;Posts&lt;/strong&gt; and &lt;strong&gt;Pages&lt;/strong&gt;, sort by date, and scan for anything you created as filler: "test", lorem ipsum, placeholder drafts. Don't forget custom post types and the trash.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unused media.&lt;/strong&gt; On another project, a stock photo was still carrying the vendor's &lt;em&gt;watermark&lt;/em&gt;. We had never replaced it with the licensed version. The client spotted it right before delivery, which is one step better than after delivery, and still one step worse than us spotting it ourselves.&lt;br&gt;
&lt;em&gt;How to check:&lt;/em&gt; Open &lt;strong&gt;Media Library&lt;/strong&gt;, switch to list view, and go through everything uploaded during development. Look for placeholders, duplicates, screenshots, and anything watermarked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Temporary pages.&lt;/strong&gt; Style-guide pages, block catalogs, layout sandboxes, anything you built for your own reference.&lt;br&gt;
&lt;em&gt;How to check:&lt;/em&gt; &lt;strong&gt;Pages → All Pages&lt;/strong&gt;, review anything the client never asked for.&lt;/p&gt;

&lt;p&gt;　&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Launch settings
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Search engine visibility (the noindex trap).&lt;/strong&gt; This one has two layers, and the second one almost got me. The obvious layer is &lt;strong&gt;Settings → Reading → "Discourage search engines from indexing this site"&lt;/strong&gt;. Staging environments have it on, but production must not. The sneaky layer is your &lt;em&gt;SEO plugin&lt;/em&gt;: on one site, the Reading setting was fine, but a noindex rule was still sitting in the SEO plugin's configuration from the staging days. Weeks of indexing time are lost this way, silently.&lt;br&gt;
&lt;em&gt;How to check:&lt;/em&gt; Verify the Reading setting, then open your SEO plugin's settings and check its index rules. Finally, view the page source of the live homepage and search for &lt;code&gt;noindex&lt;/code&gt; in the &lt;code&gt;&amp;lt;meta name="robots"&amp;gt;&lt;/code&gt; tag. That's the ground truth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WP_DEBUG.&lt;/strong&gt; Debug mode on a production site can print warnings, with file paths, right onto the page for every visitor.&lt;br&gt;
&lt;em&gt;How to check:&lt;/em&gt; Open &lt;code&gt;wp-config.php&lt;/code&gt; and confirm &lt;code&gt;WP_DEBUG&lt;/code&gt; is &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Admin email.&lt;/strong&gt; If the site's admin address is still yours, the client's password resets and system notices go to you forever.&lt;br&gt;
&lt;em&gt;How to check:&lt;/em&gt; &lt;strong&gt;Settings → General → Administration Email Address.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Permalinks / rewrite rules.&lt;/strong&gt; After a migration, stale rewrite rules are a classic source of unexplained 404s.&lt;br&gt;
&lt;em&gt;How to check:&lt;/em&gt; &lt;strong&gt;Settings → Permalinks → Save Changes&lt;/strong&gt; (yes, just re-saving flushes the rules), then click through a few posts and archive pages.&lt;/p&gt;

&lt;p&gt;　&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Security loose ends
&lt;/h2&gt;

&lt;p&gt;Four small things that take five minutes total and are exactly the kind of leftovers a security scan (or a curious visitor) finds later:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;File editor:&lt;/strong&gt; &lt;code&gt;DISALLOW_FILE_EDIT&lt;/code&gt; in &lt;code&gt;wp-config.php&lt;/code&gt; disables the built-in theme/plugin code editor. A client account clicking around in there is a risk nobody needs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;XML-RPC:&lt;/strong&gt; if nothing uses it (Jetpack, some mobile apps), it's an open door for brute-force amplification. Disable it via filter or plugin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;debug.log:&lt;/strong&gt; a &lt;code&gt;wp-content/debug.log&lt;/code&gt; file left web-accessible is a quiet information leak. Delete it and confirm logging is off.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The 'admin' username:&lt;/strong&gt; a default &lt;code&gt;admin&lt;/code&gt; account is half of a credential-stuffing attempt already solved. Rename or replace it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;　&lt;/p&gt;
&lt;h2&gt;
  
  
  4. Site health before delivery
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Outdated plugins.&lt;/strong&gt; Taking over or delivering a site with plugins that haven't been updated on WordPress.org in over a year means handing the client a maintenance liability without telling them.&lt;br&gt;
&lt;em&gt;How to check:&lt;/em&gt; For each installed plugin, including inactive ones, check its "Last updated" date on its WordPress.org page. Flag anything past 6 months; treat anything past a year as a conversation you need to have with the client before handoff, not after.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inactive plugins.&lt;/strong&gt; They still ship code. If it's not needed, it shouldn't ship.&lt;br&gt;
&lt;em&gt;How to check:&lt;/em&gt; &lt;strong&gt;Plugins → Inactive&lt;/strong&gt;, and delete what has no reason to stay.&lt;/p&gt;

&lt;p&gt;　&lt;/p&gt;
&lt;h2&gt;
  
  
  5. Beyond the basics
&lt;/h2&gt;

&lt;p&gt;Depending on the hosting stack, a few more things deserve a look. These are harder to automate, which is exactly why you want the basics above done quickly and reliably:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cache purge after the final content change.&lt;/strong&gt; A page cache that never got purged will serve the old price, the old phone number, the old everything, with zero errors logged.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leftover staging credentials.&lt;/strong&gt; Test admin accounts and staging logins have a talent for surviving into production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hardcoded dev URLs in the database.&lt;/strong&gt; My opening story. A search-replace pass over the database (with a proper serialized-data-aware tool) before launch would have saved us an afternoon of page-by-page hunting, and a permanent line in an incident log.
&lt;em&gt;How to check:&lt;/em&gt; Don't trust the search-replace tool alone. Click through the primary navigation, footer links, and CTA buttons on the live site, and open a few image-heavy pages, right after migration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;　&lt;/p&gt;
&lt;h2&gt;
  
  
  6. The missing step: prove what you checked
&lt;/h2&gt;

&lt;p&gt;Here's the part almost no checklist talks about.&lt;/p&gt;

&lt;p&gt;Running the checks protects the site. &lt;strong&gt;Showing the checks protects the relationship.&lt;/strong&gt; A client can't see the noindex flag you flipped back or the debug log you deleted. To them, a clean launch and a lucky launch look identical. The difference only becomes visible when something breaks.&lt;/p&gt;

&lt;p&gt;So make the invisible work visible. Before handoff, write a short plain-text delivery note:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pre-launch verification - example.com - 2026-07-02
✓ Test content removed (posts, pages, media)
✓ Search engine indexing enabled (Reading settings + SEO plugin + meta verified)
✓ WP_DEBUG disabled
✓ Admin email set to client
✓ File editor locked, XML-RPC disabled, no debug.log present
✓ Default 'admin' username: not present
✓ Plugin update status reviewed (2 flagged, listed below)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Attach it to your delivery email. It takes ten minutes, it reads as professionalism, and months later, when someone asks "was this checked?", you have an answer with a date on it.&lt;/p&gt;

&lt;p&gt;　&lt;/p&gt;

&lt;h2&gt;
  
  
  7. The checklist (copy-paste version)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Content cleanup&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Test posts/pages deleted (incl. custom post types &amp;amp; trash)
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Unused media removed (placeholders, duplicates, watermarked images)
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Temporary/reference pages removed

&lt;span class="gu"&gt;## Launch settings&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Reading settings: search engine indexing allowed
&lt;span class="p"&gt;-&lt;/span&gt; [ ] SEO plugin: no leftover noindex rules
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Live page source: no unexpected noindex meta tag
&lt;span class="p"&gt;-&lt;/span&gt; [ ] WP_DEBUG = false
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Admin email = client's address
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Permalinks re-saved (rewrite rules flushed)

&lt;span class="gu"&gt;## Security&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; [ ] DISALLOW_FILE_EDIT set
&lt;span class="p"&gt;-&lt;/span&gt; [ ] XML-RPC disabled (if unused)
&lt;span class="p"&gt;-&lt;/span&gt; [ ] debug.log deleted, logging off
&lt;span class="p"&gt;-&lt;/span&gt; [ ] No default 'admin' username

&lt;span class="gu"&gt;## Site health&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; [ ] All plugins (incl. inactive) checked for last-updated date
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Unneeded inactive plugins deleted

&lt;span class="gu"&gt;## Beyond the basics&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Cache purged after final changes
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Staging/test credentials removed
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Database search-replace for dev URLs done
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Site clicked through (nav, footer, CTAs, image-heavy pages): no broken links or images

&lt;span class="gu"&gt;## Prove it&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Plain-text delivery note written and attached
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Prefer clicking checkboxes over copy-pasting markdown?&lt;/strong&gt; Here's the same 25 items as an &lt;a href="https://nokazehayato.github.io/noshi-launch-checklist/" rel="noopener noreferrer"&gt;interactive web checklist&lt;/a&gt; you can walk through in your browser.&lt;/p&gt;

&lt;p&gt;　&lt;/p&gt;

&lt;h2&gt;
  
  
  One more thing
&lt;/h2&gt;

&lt;p&gt;You can run this whole list manually. Copy the markdown above into your project notes and it's yours.&lt;/p&gt;

&lt;p&gt;I'll be honest about why I wrote this: I kept making these mistakes myself, so I also built a free WordPress plugin called &lt;a href="https://wordpress.org/plugins/noshi-kanamer/" rel="noopener noreferrer"&gt;Noshi-Kanamer&lt;/a&gt; that automates a good chunk of this list: it detects leftover test content, noindex (including SEO-plugin and code-level rules), WP_DEBUG, debug.log, the default admin username and more, then generates a plain-text handoff report you can paste straight into your delivery email. The checklist above works fine without it. The plugin just makes the boring parts fast.&lt;/p&gt;

&lt;p&gt;Either way, check before you hand over the keys, and leave a note that proves you did.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wordpress.org/plugins/noshi-kanamer/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flb8ygxfwnexjcxc73igx.png" alt="Noshi-Kanamer: Pre-launch checklist &amp;amp; client handoff toolkit for WordPress" width="800" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want this as an interactive checklist you can walk through step by step?&lt;/strong&gt; I turned this list into a &lt;a href="https://nokazehayato.github.io/noshi-launch-checklist/" rel="noopener noreferrer"&gt;free web checklist&lt;/a&gt; with all 25 items in one place, and a peek at what's coming next: an &lt;strong&gt;AI Site Safety Report&lt;/strong&gt; for client handoff, now taking early access signups.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>webdev</category>
      <category>freelancing</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
