<?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: Waseem Akram</title>
    <description>The latest articles on DEV Community by Waseem Akram (@waseemakram).</description>
    <link>https://dev.to/waseemakram</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%2F3998417%2F98c5e93e-65bb-4ef1-9c6c-50635ceafe08.jpeg</url>
      <title>DEV Community: Waseem Akram</title>
      <link>https://dev.to/waseemakram</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/waseemakram"/>
    <language>en</language>
    <item>
      <title>🚀 Complete Guide: Deploy Next.js Apps as Static Sites on cPanel</title>
      <dc:creator>Waseem Akram</dc:creator>
      <pubDate>Mon, 06 Jul 2026 12:08:02 +0000</pubDate>
      <link>https://dev.to/waseemakram/complete-guide-deploy-nextjs-apps-as-static-sites-on-cpanel-i52</link>
      <guid>https://dev.to/waseemakram/complete-guide-deploy-nextjs-apps-as-static-sites-on-cpanel-i52</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Prerequisites&lt;/li&gt;
&lt;li&gt;What is Static Export?&lt;/li&gt;
&lt;li&gt;Step-by-Step Setup&lt;/li&gt;
&lt;li&gt;Building Your Project&lt;/li&gt;
&lt;li&gt;Uploading to cPanel&lt;/li&gt;
&lt;li&gt;Post-Deployment Verification&lt;/li&gt;
&lt;li&gt;Troubleshooting&lt;/li&gt;
&lt;li&gt;Advanced Configuration&lt;/li&gt;
&lt;li&gt;FAQ&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This guide explains how to deploy a &lt;strong&gt;Next.js application&lt;/strong&gt; to &lt;strong&gt;cPanel&lt;/strong&gt; as a &lt;strong&gt;static website&lt;/strong&gt;. This approach is perfect for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Blogs and portfolio sites&lt;/li&gt;
&lt;li&gt;✅ Marketing websites&lt;/li&gt;
&lt;li&gt;✅ Landing pages&lt;/li&gt;
&lt;li&gt;✅ Documentation sites&lt;/li&gt;
&lt;li&gt;✅ Static content with minimal dynamic features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Benefits of Static Deployment:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🚀 &lt;strong&gt;Lightning-fast&lt;/strong&gt; loading times&lt;/li&gt;
&lt;li&gt;💰 &lt;strong&gt;Extremely cheap&lt;/strong&gt; hosting (shared hosting)&lt;/li&gt;
&lt;li&gt;🔒 &lt;strong&gt;Secure&lt;/strong&gt; (no backend vulnerabilities)&lt;/li&gt;
&lt;li&gt;📈 &lt;strong&gt;SEO-friendly&lt;/strong&gt; (pre-rendered HTML)&lt;/li&gt;
&lt;li&gt;♾️ &lt;strong&gt;Unlimited scalability&lt;/strong&gt; (CDN compatible)&lt;/li&gt;
&lt;li&gt;🎯 &lt;strong&gt;Works on any cheap hosting&lt;/strong&gt; (no special Node.js requirements)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before you begin, ensure you have:&lt;/p&gt;

&lt;h3&gt;
  
  
  Required Software
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Node.js&lt;/strong&gt; (v16 or higher) - &lt;a href="https://nodejs.org/" rel="noopener noreferrer"&gt;Download&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;npm&lt;/strong&gt; or &lt;strong&gt;yarn&lt;/strong&gt; (comes with Node.js)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Text editor&lt;/strong&gt; - VS Code, Sublime Text, or any code editor&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Git&lt;/strong&gt; (optional, for version control)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Required Access
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Access to your &lt;strong&gt;cPanel&lt;/strong&gt; (username and password)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FTP credentials&lt;/strong&gt; or cPanel File Manager access&lt;/li&gt;
&lt;li&gt;Ability to upload files to your hosting&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Knowledge
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Basic understanding of command line/terminal&lt;/li&gt;
&lt;li&gt;Familiarity with Next.js (or willingness to learn)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What is Static Export?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Dynamic vs. Static Sites
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Traditional Next.js (Dynamic):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Request → Next.js Server → Generate HTML → Send to Browser
(Requires Node.js server running 24/7)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Static Export:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build Time: Next.js Pre-generates ALL HTML files
Deploy Time: Upload static HTML files to hosting
User Request → Web Server → Serve pre-made HTML → Browser
(No Node.js needed, just a web server)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  When to Use Static Export
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;✅ Use Static Export if your site has:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Static content (blogs, portfolios, landing pages)&lt;/li&gt;
&lt;li&gt;Pre-defined pages&lt;/li&gt;
&lt;li&gt;Content that doesn't change per user request&lt;/li&gt;
&lt;li&gt;Product/service information pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;❌ Don't Use Static Export if you need:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time data updates&lt;/li&gt;
&lt;li&gt;User-specific content&lt;/li&gt;
&lt;li&gt;Server-side authentication&lt;/li&gt;
&lt;li&gt;Form submissions to backend database&lt;/li&gt;
&lt;li&gt;Dynamic API endpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Hybrid Approach
&lt;/h3&gt;

&lt;p&gt;You can still have some interactivity with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Client-side form handling&lt;/strong&gt; (local state)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Third-party services&lt;/strong&gt; (Formspree, EmailJS, Firebase)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JAMstack approach&lt;/strong&gt; (Netlify Functions, Vercel Edge Functions)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step-by-Step Setup
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Prepare Your Next.js Project
&lt;/h3&gt;

&lt;p&gt;Ensure your project structure looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;your-nextjs-app/
├── app/
│   ├── page.tsx
│   ├── layout.tsx
│   └── (other pages)
├── components/
├── lib/
├── public/
├── package.json
├── next.config.ts
└── tsconfig.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Configure &lt;code&gt;next.config.ts&lt;/code&gt; for Static Export
&lt;/h3&gt;

&lt;p&gt;Open your &lt;code&gt;next.config.ts&lt;/code&gt; file and update it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;NextConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nextConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NextConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;reactStrictMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;poweredByHeader&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;export&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;           &lt;span class="c1"&gt;// ← Enable static export&lt;/span&gt;
  &lt;span class="na"&gt;basePath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;               &lt;span class="c1"&gt;// Change if deploying to subdirectory&lt;/span&gt;
  &lt;span class="na"&gt;trailingSlash&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// Add trailing slashes for SEO&lt;/span&gt;
  &lt;span class="na"&gt;images&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;unoptimized&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// Required for static export&lt;/span&gt;
    &lt;span class="na"&gt;formats&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;image/avif&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;image/webp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;nextConfig&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Configuration Breakdown
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;output: "export"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;CRITICAL&lt;/strong&gt; - Enables static export mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;basePath: ""&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Set to &lt;code&gt;"/subdirectory"&lt;/code&gt; if deploying to subfolder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;trailingSlash: true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Adds &lt;code&gt;/&lt;/code&gt; to all URLs (SEO best practice)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;unoptimized: true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Disables Next.js image optimization (incompatible with static export)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 3: Remove Dynamic Features
&lt;/h3&gt;

&lt;p&gt;If you have these features, you need to modify or remove them:&lt;/p&gt;

&lt;h4&gt;
  
  
  A. Remove or Replace API Routes
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;❌ These won't work in static export:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app/api/contact/route.ts&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// This will NOT work&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;✅ Solution 1: Use Third-Party Service&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Form component&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handleSubmit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://formspree.io/f/YOUR_ID&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;✅ Solution 2: Use Third-Party Services&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://formspree.io/" rel="noopener noreferrer"&gt;Formspree&lt;/a&gt; - Email forms&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.emailjs.com/" rel="noopener noreferrer"&gt;EmailJS&lt;/a&gt; - Client-side email&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://usebasin.com/" rel="noopener noreferrer"&gt;Basin&lt;/a&gt; - Form backend&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://firebase.google.com/" rel="noopener noreferrer"&gt;Firebase&lt;/a&gt; - Full backend&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  B. Update Dynamic Pages
&lt;/h4&gt;

&lt;p&gt;If you have &lt;strong&gt;dynamic routes&lt;/strong&gt; like &lt;code&gt;/blog/[slug]/page.tsx&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;❌ Without Static Generation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Won't pre-render during build&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;BlogPost&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;✅ With Static Generation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateStaticParams&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Tell Next.js which pages to pre-render&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;first-post&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;second-post&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;third-post&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;BlogPost&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  C. Fix Special Routes
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;For &lt;code&gt;robots.ts&lt;/code&gt;:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dynamic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;force-static&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// ← Add this line&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;robots&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;userAgent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;allow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;sitemap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://yourdomain.com/sitemap.xml&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;For &lt;code&gt;sitemap.ts&lt;/code&gt;:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dynamic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;force-static&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// ← Add this line&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;sitemap&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://yourdomain.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lastModified&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://yourdomain.com/blog&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lastModified&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Create &lt;code&gt;.htaccess&lt;/code&gt; for Routing
&lt;/h3&gt;

&lt;p&gt;Create a file named &lt;code&gt;.htaccess&lt;/code&gt; in your &lt;code&gt;public/&lt;/code&gt; folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight apache"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nl"&gt;IfModule&lt;/span&gt;&lt;span class="sr"&gt; mod_rewrite.c&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="nc"&gt;RewriteEngine&lt;/span&gt; &lt;span class="ss"&gt;On&lt;/span&gt;
  &lt;span class="nc"&gt;RewriteBase&lt;/span&gt; /

  &lt;span class="c"&gt;# Prevent direct access to certain folders&lt;/span&gt;
  &lt;span class="nc"&gt;RewriteRule&lt;/span&gt; ^\.git - [F]
  &lt;span class="nc"&gt;RewriteRule&lt;/span&gt; ^node_modules - [F]

  &lt;span class="c"&gt;# Don't rewrite if the file exists&lt;/span&gt;
  &lt;span class="nc"&gt;RewriteCond&lt;/span&gt; %{REQUEST_FILENAME} !-f
  &lt;span class="nc"&gt;RewriteCond&lt;/span&gt; %{REQUEST_FILENAME} !-d

  &lt;span class="c"&gt;# Add trailing slash&lt;/span&gt;
  &lt;span class="nc"&gt;RewriteCond&lt;/span&gt; %{REQUEST_URI} !/$
  &lt;span class="nc"&gt;RewriteCond&lt;/span&gt; %{REQUEST_FILENAME} !-f
  &lt;span class="nc"&gt;RewriteRule&lt;/span&gt; ^(.*)$ $1/ [L,R=301]

  &lt;span class="c"&gt;# Rewrite all requests to index.html for SPA routing&lt;/span&gt;
  &lt;span class="nc"&gt;RewriteCond&lt;/span&gt; %{REQUEST_FILENAME} !-f
  &lt;span class="nc"&gt;RewriteCond&lt;/span&gt; %{REQUEST_FILENAME} !-d
  &lt;span class="nc"&gt;RewriteRule&lt;/span&gt; ^(.*)$ index.html [L]
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nl"&gt;IfModule&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;
&lt;span class="c"&gt;# Cache static assets&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nl"&gt;IfModule&lt;/span&gt;&lt;span class="sr"&gt; mod_expires.c&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="nc"&gt;ExpiresActive&lt;/span&gt; &lt;span class="ss"&gt;On&lt;/span&gt;
  &lt;span class="nc"&gt;ExpiresByType&lt;/span&gt; text/html "access plus 1 day"
  &lt;span class="nc"&gt;ExpiresByType&lt;/span&gt; application/javascript "access plus 1 year"
  &lt;span class="nc"&gt;ExpiresByType&lt;/span&gt; text/css "access plus 1 year"
  &lt;span class="nc"&gt;ExpiresByType&lt;/span&gt; image/png "access plus 1 year"
  &lt;span class="nc"&gt;ExpiresByType&lt;/span&gt; image/jpeg "access plus 1 year"
  &lt;span class="nc"&gt;ExpiresByType&lt;/span&gt; image/svg+xml "access plus 1 year"
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nl"&gt;IfModule&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Update &lt;code&gt;package.json&lt;/code&gt; Scripts
&lt;/h3&gt;

&lt;p&gt;Ensure your &lt;code&gt;package.json&lt;/code&gt; has these scripts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"dev"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"next dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"next build"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"next start"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"next lint"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"export"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"next build &amp;amp;&amp;amp; echo 'Export complete!'"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Building Your Project
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Install Dependencies
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;span class="c"&gt;# or&lt;/span&gt;
yarn &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Test Locally (Optional)
&lt;/h3&gt;

&lt;p&gt;Build and test before uploading:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
npx http-server out &lt;span class="nt"&gt;-p&lt;/span&gt; 3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then visit &lt;code&gt;http://localhost:3000&lt;/code&gt; in your browser to test.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Build for Production
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Expected Output:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;✓ Compiled successfully
✓ Linting and checking validity of types
✓ Collecting page data
✓ Generating static pages (XX/XX)
✓ Collecting build traces
✓ Exporting (X/X)
✓ Finalizing page optimization

Route (app)                    Size
○ /                           X kB
○ /about                       X kB
● /blog/[slug]                 X kB
&lt;/span&gt;&lt;span class="c"&gt;...
&lt;/span&gt;&lt;span class="go"&gt;
○ (Static) - prerendered as static
● (SSG)    - prerendered with generateStaticParams
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What Gets Generated
&lt;/h3&gt;

&lt;p&gt;After successful build, you'll have an &lt;code&gt;out/&lt;/code&gt; folder containing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;out/
├── index.html                 ← Homepage
├── 404.html                   ← Error page
├── robots.txt                 ← SEO
├── sitemap.xml                ← Sitemap
├── .htaccess                  ← Apache routing (critical!)
├── _next/                     ← CSS, JS, assets
│   ├── static/
│   ├── app-build-manifest.json
│   └── build-manifest.json
├── blog/
│   ├── index.html
│   └── [slug]/
│       ├── post-1/index.html
│       └── post-2/index.html
└── (other folders and assets)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Uploading to cPanel
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Method 1: Using cPanel File Manager (Easiest)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Login to cPanel&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visit &lt;code&gt;yourdomain.com:2083&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Enter your cPanel username and password&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Open File Manager&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click "File Manager" in cPanel home&lt;/li&gt;
&lt;li&gt;Navigate to &lt;code&gt;public_html&lt;/code&gt; folder&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Enable Hidden Files&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In File Manager, click "Settings" (top right)&lt;/li&gt;
&lt;li&gt;Check "Show Hidden Files"&lt;/li&gt;
&lt;li&gt;Click "Save"&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Upload Files&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click "Upload" button&lt;/li&gt;
&lt;li&gt;Select all contents from your local &lt;code&gt;out/&lt;/code&gt; folder&lt;/li&gt;
&lt;li&gt;Upload all files and folders&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verify Upload&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensure &lt;code&gt;.htaccess&lt;/code&gt; is in &lt;code&gt;public_html/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Ensure &lt;code&gt;_next/&lt;/code&gt; folder is completely uploaded&lt;/li&gt;
&lt;li&gt;Check file count matches your local &lt;code&gt;out/&lt;/code&gt; folder&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Method 2: Using FTP
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;For Windows:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download &lt;a href="https://filezilla-project.org/" rel="noopener noreferrer"&gt;FileZilla&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Or use Windows built-in FTP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;For Mac/Linux:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ftp yourdomain.com
&lt;span class="c"&gt;# Enter username when prompted&lt;/span&gt;
&lt;span class="c"&gt;# Enter password when prompted&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;public_html
put &lt;span class="nt"&gt;-r&lt;/span&gt; out/&lt;span class="k"&gt;*&lt;/span&gt;
quit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open FTP client&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Host:&lt;/strong&gt; Your domain or FTP host (from cPanel)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Username:&lt;/strong&gt; Your cPanel username&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Password:&lt;/strong&gt; Your cPanel password&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Port:&lt;/strong&gt; 21 (or check with your host)&lt;/li&gt;
&lt;li&gt;Navigate to &lt;code&gt;public_html&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Upload all files from &lt;code&gt;out/&lt;/code&gt; folder&lt;/li&gt;
&lt;li&gt;Ensure &lt;code&gt;.htaccess&lt;/code&gt; is included&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Method 3: Using SFTP (Most Secure)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sftp username@yourdomain.com
&lt;span class="nb"&gt;cd &lt;/span&gt;public_html
put &lt;span class="nt"&gt;-r&lt;/span&gt; out/&lt;span class="k"&gt;*&lt;/span&gt;
quit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Post-Deployment Verification
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Checklist After Upload
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] All files uploaded successfully&lt;/li&gt;
&lt;li&gt;[ ] &lt;code&gt;.htaccess&lt;/code&gt; is in &lt;code&gt;public_html/&lt;/code&gt; (not in a subfolder)&lt;/li&gt;
&lt;li&gt;[ ] &lt;code&gt;_next/&lt;/code&gt; folder is complete&lt;/li&gt;
&lt;li&gt;[ ] File permissions are set correctly&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Set Correct File Permissions
&lt;/h3&gt;

&lt;p&gt;After uploading, set permissions in File Manager:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Select all files in &lt;code&gt;public_html/&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Right-click → "Change Permissions"&lt;/li&gt;
&lt;li&gt;Set to:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Folders:&lt;/strong&gt; &lt;code&gt;755&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Files:&lt;/strong&gt; &lt;code&gt;644&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Or via command line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; 755 public_html
find public_html &lt;span class="nt"&gt;-type&lt;/span&gt; f &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;chmod &lt;/span&gt;644 &lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="se"&gt;\;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Test Your Website
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Visit your domain:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;https://yourdomain.com/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Should load homepage&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Check styling:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CSS should be applied&lt;/li&gt;
&lt;li&gt;Fonts should load&lt;/li&gt;
&lt;li&gt;Colors should display correctly&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Test navigation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click links between pages&lt;/li&gt;
&lt;li&gt;Test different routes&lt;/li&gt;
&lt;li&gt;Check blog posts load (if applicable)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verify SEO files:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visit &lt;code&gt;https://yourdomain.com/robots.txt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Visit &lt;code&gt;https://yourdomain.com/sitemap.xml&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Both should be accessible&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Test error handling:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visit &lt;code&gt;https://yourdomain.com/nonexistent-page/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Should show your 404 page (not generic server error)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Problem 1: CSS and JavaScript Not Loading
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptoms:&lt;/strong&gt; Site loads but looks broken, no styling&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solutions:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check if &lt;code&gt;.htaccess&lt;/code&gt; is uploaded:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;# Via terminal/SSH&lt;/span&gt;
   &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt; public_html/.htaccess
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verify &lt;code&gt;.htaccess&lt;/code&gt; is readable:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Permissions should be &lt;code&gt;644&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Not in a subfolder, directly in &lt;code&gt;public_html/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Check &lt;code&gt;_next/&lt;/code&gt; folder:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Should be in &lt;code&gt;public_html/_next/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Should contain &lt;code&gt;static/&lt;/code&gt; subfolder&lt;/li&gt;
&lt;li&gt;Should have CSS and JS files&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verify basePath configuration:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If deploying to subfolder, update &lt;code&gt;next.config.ts&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;   &lt;span class="nx"&gt;basePath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/subfoldername&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Problem 2: 404 Errors or Blank Pages
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptoms:&lt;/strong&gt; Some pages show 404, or pages are blank&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solutions:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Check &lt;code&gt;.htaccess&lt;/code&gt; syntax:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Paste content into Apache validator&lt;/li&gt;
&lt;li&gt;Ensure no syntax errors&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verify trailing slashes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Try with and without trailing slash&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/about/&lt;/code&gt; vs &lt;code&gt;/about&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Check index.html files:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every folder should have &lt;code&gt;index.html&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Example: &lt;code&gt;public_html/blog/index.html&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rebuild with trailing slashes:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;   &lt;span class="c1"&gt;// In next.config.ts&lt;/span&gt;
   &lt;span class="nx"&gt;trailingSlash&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Problem 3: ".htaccess not allowed" Error
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptoms:&lt;/strong&gt; Upload works but get "htaccess not allowed" error&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solutions:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Contact your hosting provider:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ask to enable &lt;code&gt;AllowOverride All&lt;/code&gt; for your domain&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Temporary workaround:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rename &lt;code&gt;.htaccess&lt;/code&gt; to &lt;code&gt;htaccess.txt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Ask host to enable it manually&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Alternative:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Some hosts don't support &lt;code&gt;.htaccess&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Ask about alternative (nginx, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Problem 4: Images Not Showing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptoms:&lt;/strong&gt; Broken image icons or missing images&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solutions:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Verify &lt;code&gt;unoptimized: true&lt;/code&gt; in config:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;   &lt;span class="nx"&gt;images&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="nl"&gt;unoptimized&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;  &lt;span class="c1"&gt;// Critical for static export&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Check image paths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Images in &lt;code&gt;public/&lt;/code&gt; should work&lt;/li&gt;
&lt;li&gt;Use relative paths: &lt;code&gt;/images/my-image.png&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rebuild and upload:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   npm run build
   &lt;span class="c"&gt;# Re-upload out/ folder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Problem 5: Form Submissions Not Working
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptoms:&lt;/strong&gt; Contact form submits but no response&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solutions:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since you can't use backend API routes, use:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 1: Formspree (Email)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handleSubmit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://formspree.io/f/YOUR_FORM_ID&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Accept&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Option 2: Firebase (NoSQL Database)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;initializeApp&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;firebase/app&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getFirestore&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;addDoc&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;firebase/firestore&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;firebaseConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* your config */&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;initializeApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;firebaseConfig&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getFirestore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;submitForm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;addDoc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;submissions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Option 3: EmailJS (Direct Email)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;emailjs&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@emailjs/browser&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;emailjs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;YOUR_PUBLIC_KEY&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;emailjs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;service_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;template_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;templateParams&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Advanced Configuration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Deploying to Subdirectory
&lt;/h3&gt;

&lt;p&gt;If deploying to &lt;code&gt;yourdomain.com/myapp/&lt;/code&gt; instead of root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// next.config.ts&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nextConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NextConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;basePath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/myapp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// Add this line&lt;/span&gt;
  &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;export&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;trailingSlash&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;images&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;unoptimized&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then upload contents of &lt;code&gt;out/&lt;/code&gt; to &lt;code&gt;public_html/myapp/&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Custom Domain Configuration
&lt;/h3&gt;

&lt;p&gt;For multi-domain setup in cPanel:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add parked/addon domain in cPanel&lt;/li&gt;
&lt;li&gt;Create folder for domain (e.g., &lt;code&gt;public_html/mydomain&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Upload &lt;code&gt;out/&lt;/code&gt; contents to that folder&lt;/li&gt;
&lt;li&gt;Create &lt;code&gt;.htaccess&lt;/code&gt; in that folder with same rules&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Performance Optimization
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Enable Gzip Compression:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight apache"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nl"&gt;IfModule&lt;/span&gt;&lt;span class="sr"&gt; mod_gzip.c&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;  mod_gzip_on Yes
  mod_gzip_level 6
  mod_gzip_type text/plain text/html text/xml text/css
  mod_gzip_type application/json application/javascript
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nl"&gt;IfModule&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Add to &lt;code&gt;.htaccess&lt;/code&gt; for faster caching:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight apache"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nl"&gt;IfModule&lt;/span&gt;&lt;span class="sr"&gt; mod_expires.c&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="nc"&gt;ExpiresActive&lt;/span&gt; &lt;span class="ss"&gt;On&lt;/span&gt;
  &lt;span class="nc"&gt;ExpiresByType&lt;/span&gt; text/html "access plus 1 day"
  &lt;span class="nc"&gt;ExpiresByType&lt;/span&gt; application/javascript "access plus 30 days"
  &lt;span class="nc"&gt;ExpiresByType&lt;/span&gt; text/css "access plus 30 days"
  &lt;span class="nc"&gt;ExpiresByType&lt;/span&gt; image/* "access plus 1 year"
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nl"&gt;IfModule&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Set Cache-Control Headers:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight apache"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nl"&gt;IfModule&lt;/span&gt;&lt;span class="sr"&gt; mod_headers.c&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="nc"&gt;Header&lt;/span&gt; &lt;span class="ss"&gt;set&lt;/span&gt; Cache-Control "public, max-age=86400"
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nl"&gt;IfModule&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  SSL/HTTPS Configuration
&lt;/h3&gt;

&lt;p&gt;Most cPanel hosts offer free SSL via AutoSSL:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to cPanel → "AutoSSL"&lt;/li&gt;
&lt;li&gt;Click "Check for certificates" or "Install"&lt;/li&gt;
&lt;li&gt;Update in code:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// next.config.ts&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nextConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ... your config&lt;/span&gt;
  &lt;span class="c1"&gt;// Next.js automatically uses https if available&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  SEO Optimization
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. robots.txt:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: *
&lt;span class="n"&gt;Allow&lt;/span&gt;: /
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="err"&gt;_&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /.&lt;span class="n"&gt;htaccess&lt;/span&gt;
&lt;span class="n"&gt;Sitemap&lt;/span&gt;: &lt;span class="n"&gt;https&lt;/span&gt;://&lt;span class="n"&gt;yourdomain&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;/&lt;span class="n"&gt;sitemap&lt;/span&gt;.&lt;span class="n"&gt;xml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. sitemap.xml:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;urlset&lt;/span&gt; &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;"http://www.sitemaps.org/schemas/sitemap/0.9"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;url&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;loc&amp;gt;&lt;/span&gt;https://yourdomain.com/&lt;span class="nt"&gt;&amp;lt;/loc&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;lastmod&amp;gt;&lt;/span&gt;2024-01-15&lt;span class="nt"&gt;&amp;lt;/lastmod&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/url&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;url&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;loc&amp;gt;&lt;/span&gt;https://yourdomain.com/blog/&lt;span class="nt"&gt;&amp;lt;/loc&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;lastmod&amp;gt;&lt;/span&gt;2024-01-14&lt;span class="nt"&gt;&amp;lt;/lastmod&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/url&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/urlset&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Q: Can I still use Next.js features with static export?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Yes, most features work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ React components&lt;/li&gt;
&lt;li&gt;✅ CSS/Tailwind&lt;/li&gt;
&lt;li&gt;✅ Image optimization (set &lt;code&gt;unoptimized: true&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;✅ Font optimization&lt;/li&gt;
&lt;li&gt;✅ Dynamic routes with &lt;code&gt;generateStaticParams&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;❌ API routes (use external service)&lt;/li&gt;
&lt;li&gt;❌ Server-side rendering&lt;/li&gt;
&lt;li&gt;❌ Real-time database queries&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Q: How often should I rebuild and redeploy?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rebuild every time you change code&lt;/li&gt;
&lt;li&gt;Rebuild when adding new blog posts&lt;/li&gt;
&lt;li&gt;Redeploy by uploading the new &lt;code&gt;out/&lt;/code&gt; folder&lt;/li&gt;
&lt;li&gt;Can automate with GitHub Actions/Webhooks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Q: Can I deploy multiple Next.js apps on one cPanel account?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Yes! Use subdomains or subdirectories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subdomain: &lt;code&gt;app1.yourdomain.com&lt;/code&gt; (separate addon domain)&lt;/li&gt;
&lt;li&gt;Subdirectory: &lt;code&gt;yourdomain.com/app1/&lt;/code&gt; (update &lt;code&gt;basePath&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Q: Is static export secure?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Yes, it's very secure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No server vulnerabilities (no server code)&lt;/li&gt;
&lt;li&gt;No database exposure&lt;/li&gt;
&lt;li&gt;No API keys leaked&lt;/li&gt;
&lt;li&gt;HTML is read-only&lt;/li&gt;
&lt;li&gt;Safer than traditional CMS&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Q: Can I have a blog with static export?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Yes! Two approaches:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Static Blog Posts:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateStaticParams&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Headless CMS:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Strapi, Contentful, or Sanity&lt;/li&gt;
&lt;li&gt;Pre-fetch content during build&lt;/li&gt;
&lt;li&gt;Pre-render all pages with content&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Q: What if I need dynamic features later?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; You can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Move to a Node.js hosting (Heroku, Railway)&lt;/li&gt;
&lt;li&gt;Keep static parts, add serverless functions&lt;/li&gt;
&lt;li&gt;Use hybrid approach (static + external APIs)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Q: How do I update my site?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Make changes locally&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;npm run build&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Upload new &lt;code&gt;out/&lt;/code&gt; folder contents&lt;/li&gt;
&lt;li&gt;Delete old files if needed&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Or automate with GitHub Actions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Will SEO suffer with static export?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; No! Actually benefits SEO:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All HTML pre-rendered (better crawling)&lt;/li&gt;
&lt;li&gt;Instant page loads (better metrics)&lt;/li&gt;
&lt;li&gt;Proper meta tags included&lt;/li&gt;
&lt;li&gt;Robots.txt and sitemap.xml included&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Q: Can I use a database with static export?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Not directly, but you can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Query database at build time&lt;/li&gt;
&lt;li&gt;Generate static pages with data&lt;/li&gt;
&lt;li&gt;Update when new data is added&lt;/li&gt;
&lt;li&gt;Use serverless functions for real-time queries&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// During build&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateStaticParams&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetchPostsFromDatabase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Q: What's the maximum site size?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Depends on your hosting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Typical cPanel: 50GB-100GB+&lt;/li&gt;
&lt;li&gt;Most sites: 10MB-100MB&lt;/li&gt;
&lt;li&gt;Can use CDN for images&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Q: Should I version control the &lt;code&gt;out/&lt;/code&gt; folder?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; No! Add to &lt;code&gt;.gitignore&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="c"&gt;# .gitignore
&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;/
.&lt;span class="n"&gt;next&lt;/span&gt;/
&lt;span class="n"&gt;node_modules&lt;/span&gt;/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Only commit source code, not build output.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary Checklist
&lt;/h2&gt;

&lt;p&gt;Before deploying to cPanel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Updated &lt;code&gt;next.config.ts&lt;/code&gt; with &lt;code&gt;output: "export"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Created &lt;code&gt;.htaccess&lt;/code&gt; in &lt;code&gt;public/&lt;/code&gt; folder&lt;/li&gt;
&lt;li&gt;[ ] Removed or replaced API routes&lt;/li&gt;
&lt;li&gt;[ ] Added &lt;code&gt;generateStaticParams&lt;/code&gt; to dynamic pages&lt;/li&gt;
&lt;li&gt;[ ] Fixed special routes (robots.ts, sitemap.ts)&lt;/li&gt;
&lt;li&gt;[ ] Ran &lt;code&gt;npm run build&lt;/code&gt; successfully&lt;/li&gt;
&lt;li&gt;[ ] Tested locally (&lt;code&gt;npm run dev&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;[ ] Have cPanel login credentials&lt;/li&gt;
&lt;li&gt;[ ] Know your FTP/hosting details&lt;/li&gt;
&lt;li&gt;[ ] Backed up existing content (if any)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Deployment Checklist:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Connected to cPanel&lt;/li&gt;
&lt;li&gt;[ ] Navigated to &lt;code&gt;public_html&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Uploaded all contents from &lt;code&gt;out/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Verified &lt;code&gt;.htaccess&lt;/code&gt; is uploaded&lt;/li&gt;
&lt;li&gt;[ ] Set file permissions (755/644)&lt;/li&gt;
&lt;li&gt;[ ] Enabled hidden files in File Manager&lt;/li&gt;
&lt;li&gt;[ ] Tested homepage loads&lt;/li&gt;
&lt;li&gt;[ ] Verified CSS/styling works&lt;/li&gt;
&lt;li&gt;[ ] Tested multiple pages&lt;/li&gt;
&lt;li&gt;[ ] Checked SEO files (robots.txt, sitemap.xml)&lt;/li&gt;
&lt;li&gt;[ ] Tested 404 page&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Additional Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nextjs.org/docs/advanced-features/static-html-export" rel="noopener noreferrer"&gt;Next.js Static Export Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://httpd.apache.org/docs/current/mod/mod_rewrite.html" rel="noopener noreferrer"&gt;Apache .htaccess Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.cpanel.net/cpanel/files/file-manager/" rel="noopener noreferrer"&gt;cPanel File Manager Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.cpanel.net/cpanel/getting-started/connecting-with-ftp/" rel="noopener noreferrer"&gt;FTP Upload Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Support &amp;amp; Troubleshooting
&lt;/h2&gt;

&lt;p&gt;If you encounter issues:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check our Troubleshooting section&lt;/strong&gt; (above)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review logs:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;cPanel → Error Log&lt;/li&gt;
&lt;li&gt;Check for &lt;code&gt;.htaccess&lt;/code&gt; errors&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contact your hosting provider:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Ask if mod_rewrite is enabled&lt;/li&gt;
&lt;li&gt;Ask if AllowOverride is set to All&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify file structure:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Ensure &lt;code&gt;_next/&lt;/code&gt; folder is complete&lt;/li&gt;
&lt;li&gt;Ensure &lt;code&gt;.htaccess&lt;/code&gt; is in correct location&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Last Updated:&lt;/strong&gt; January 2026&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; Waseem Akram&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;License:&lt;/strong&gt; Free to use and share&lt;/p&gt;




&lt;h2&gt;
  
  
  Questions or Feedback?
&lt;/h2&gt;

&lt;p&gt;This knowledge base was created to help Next.js developers deploy to cPanel easily.&lt;/p&gt;

&lt;p&gt;If you have suggestions, found errors, or need clarification, please reach out to our team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Happy Deploying! 🚀&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Deploy a Next.js App on cPanel Shared Hosting (Beginner-Friendly Guide)</title>
      <dc:creator>Waseem Akram</dc:creator>
      <pubDate>Tue, 23 Jun 2026 10:33:43 +0000</pubDate>
      <link>https://dev.to/waseemakram/how-to-deploy-a-nextjs-app-on-cpanel-shared-hosting-beginner-friendly-guide-2hah</link>
      <guid>https://dev.to/waseemakram/how-to-deploy-a-nextjs-app-on-cpanel-shared-hosting-beginner-friendly-guide-2hah</guid>
      <description>&lt;p&gt;If you have a shared hosting account with cPanel and want to run a Next.js website on your own domain, this guide will help you do it step by step.&lt;/p&gt;

&lt;p&gt;I created this guide for beginners, so even if you have never deployed a Next.js project before, you should be able to follow along.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;===========Quick Summary (For Experienced Developers)============&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you're already familiar with Next.js and cPanel, here's the short version:&lt;/p&gt;

&lt;p&gt;✅ Build the project on your local computer &lt;code&gt;npm run build&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;✅ Remove unnecessary files before uploading &lt;code&gt;node_modules, .git, .next/cache&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;✅ Create a Node.js Application in cPanel&lt;/p&gt;

&lt;p&gt;✅ Upload your project files&lt;/p&gt;

&lt;p&gt;✅ Run: &lt;code&gt;npm install&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;✅ Configure startup file (app.js or server.js)&lt;/p&gt;

&lt;p&gt;✅ Restart the Node.js application&lt;/p&gt;

&lt;p&gt;✅ Open your domain and test&lt;/p&gt;

&lt;p&gt;If you need detailed instructions, continue reading below.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;=================================================================&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Deploy Next.js on Shared Hosting?
&lt;/h2&gt;

&lt;p&gt;Many developers use platforms like Vercel for Next.js hosting. However, some clients already have shared hosting and don't want to purchase a VPS or additional hosting.&lt;/p&gt;

&lt;p&gt;If your hosting provider supports Node.js in cPanel, you can run a Next.js application directly from your hosting account.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: Shared hosting is usually slower than VPS or cloud hosting. It works best for small projects, personal websites, staging environments, or low-traffic applications.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;p&gt;Before starting, make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Next.js project&lt;/li&gt;
&lt;li&gt;cPanel access&lt;/li&gt;
&lt;li&gt;Node.js Application feature enabled&lt;/li&gt;
&lt;li&gt;A domain or subdomain connected to your hosting account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;=================================================================&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's Setup Nodejs App in cPanel 😎
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Build Your Next.js Project Locally
&lt;/h3&gt;

&lt;p&gt;Do not build the project on shared hosting. Build it locally and then upload it to cPanel.&lt;/p&gt;

&lt;p&gt;Open your terminal and run: &lt;code&gt;npm run build&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This creates an optimized production build.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 2: Clean the Project Before Uploading
&lt;/h3&gt;

&lt;p&gt;Uploading unnecessary files makes deployment slower.&lt;/p&gt;

&lt;p&gt;You can safely remove:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node_modules 
.git 
.next/cache
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep these folders:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.next 
public 
src 
app 
pages 
package.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This reduces upload size significantly.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 3: Create a Node.js Application in cPanel
&lt;/h3&gt;

&lt;p&gt;Login to cPanel.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Navigate to:  &lt;strong&gt;Software&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Setup Node.js App&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="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%2Fyrqpfz7phat4g3yre4wl.webp" class="article-body-image-wrapper"&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%2Fyrqpfz7phat4g3yre4wl.webp" alt=" " width="799" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Click: Create Application&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="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%2F8z1sy5jjd4ktj73cbjwl.webp" class="article-body-image-wrapper"&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%2F8z1sy5jjd4ktj73cbjwl.webp" alt=" " width="800" height="146"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js version (latest available)&lt;/li&gt;
&lt;li&gt;Domain or subdomain&lt;/li&gt;
&lt;li&gt;Application root directory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="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%2Fpba61e771hb8qfula2gk.webp" class="article-body-image-wrapper"&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%2Fpba61e771hb8qfula2gk.webp" alt=" " width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Save the application.&lt;/p&gt;

&lt;p&gt;After creating the Node.js app, open the app URL. If everything is set up correctly, you will see a message confirming that the app was created successfully.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;It works!

NodeJS 22.8.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside your site folder (app directory), you should also find important files like .htaccess and app.js.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fnjvg3otqmfw5nibd2o7i.webp" class="article-body-image-wrapper"&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%2Fnjvg3otqmfw5nibd2o7i.webp" alt=" " width="797" height="138"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All other extra folders are not required for our Next.js app and can be safely removed to keep the project clean and simple.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 4: Upload Your Project Files
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Open: cPanel → File Manager&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Upload your project as a ZIP file.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2F79oo3g24ct9mp6sa0o7s.webp" class="article-body-image-wrapper"&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%2F79oo3g24ct9mp6sa0o7s.webp" alt=" " width="799" height="265"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After uploading:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Extract the ZIP.&lt;/li&gt;
&lt;li&gt;Move files into the application root directory.&lt;/li&gt;
&lt;li&gt;Verify that package.json is visible.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your structure should look similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-app/ 
  ├── .next/ 
  ├── public/ 
  ├── package.json 
  ├── app.js`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="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%2Fasm14tketb0w5anz5xz3.webp" class="article-body-image-wrapper"&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%2Fasm14tketb0w5anz5xz3.webp" alt=" " width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Install Dependencies
&lt;/h2&gt;

&lt;p&gt;Return to the Node.js Application page.&lt;/p&gt;

&lt;p&gt;Install project dependencies: &lt;code&gt;npm install&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Wait until installation completes.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2F4mwvrxn0w7pioqse2djc.webp" class="article-body-image-wrapper"&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%2F4mwvrxn0w7pioqse2djc.webp" alt=" " width="797" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do NOT run: &lt;code&gt;npm run dev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The development server should never be used in production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Configure the Startup File
&lt;/h3&gt;

&lt;p&gt;Your hosting provider may require a startup file such as:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;app.js&lt;/code&gt; or &lt;code&gt;server.js&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This file starts the Next.js application and handles incoming requests.&lt;/p&gt;

&lt;p&gt;If your hosting provider automatically creates an app.js file, update it according to your hosting requirements.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 7: Restart the Application
&lt;/h3&gt;

&lt;p&gt;After uploading files and installing dependencies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stop the application&lt;/li&gt;
&lt;li&gt;Start it again&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;or click: &lt;code&gt;Restart&lt;/code&gt; inside cPanel.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2F1z47lb957rd821upttgx.webp" class="article-body-image-wrapper"&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%2F1z47lb957rd821upttgx.webp" alt=" " width="800" height="44"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 8: Test Your Website
&lt;/h3&gt;

&lt;p&gt;Open your domain in a browser.&lt;/p&gt;

&lt;p&gt;If everything is configured correctly, your Next.js application should load successfully.&lt;/p&gt;

&lt;p&gt;Example: &lt;code&gt;https://yourdomain.com&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;========================= ## Common Problems ====================&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Website Shows 500 Error&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;package.json exists&lt;/li&gt;
&lt;li&gt;dependencies installed&lt;/li&gt;
&lt;li&gt;startup file path is correct&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Build Not Found Error&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Make sure you ran: &lt;code&gt;npm run build&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;before uploading.&lt;/p&gt;

&lt;p&gt;The .next folder must be uploaded.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Node.js Option Missing in cPanel&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Some shared hosting plans do not support Node.js.&lt;/p&gt;

&lt;p&gt;Contact your hosting provider and ask whether Node.js Applications are available.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Deploying Next.js on cPanel is possible when your hosting provider supports Node.js. While shared hosting is not the ideal environment for large Next.js applications, it works well for testing, personal projects, small business websites, and staging environments.&lt;/p&gt;

&lt;p&gt;If your project starts receiving significant traffic, consider moving to a VPS Hosting or a platform designed specifically for &lt;a href="https://cloudexter.com/app-hosting" rel="noopener noreferrer"&gt;Next.js App hosting&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Happy Deploying!&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>cpanel</category>
      <category>cloudexter</category>
      <category>node</category>
    </item>
  </channel>
</rss>
