<p dir="auto">Relating to <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="202984989" data-permission-text="Title is private" data-url="https://github.com/vercel/next.js/issues/875" data-hovercard-type="issue" data-hovercard-url="/vercel/next.js/issues/875/hovercard" href="https://github.com/vercel/next.js/issues/875">#875</a>, willing to try a PR if offered guidance.</p>
<p dir="auto">We're building a ecommerce store from scratch with next and are close to finishing the initial architecture. The only thing bugging us is the number of folders we ended up with. The <code class="notranslate">src</code> folder would be a major improvement in our structure and the way we thought it could be done is by adding a property called <code class="notranslate">pagesDir</code> in the <code class="notranslate">next.config.js</code> configuration.</p>
<p dir="auto">With this new options set to something like:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="{
   &quot;pagesDir&quot;: './src/pages'
}"><pre class="notranslate"><code class="notranslate">{
   "pagesDir": './src/pages'
}
</code></pre></div>
<p dir="auto">we could keep all the source code in src, including the pages.</p>



<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> I have searched the <a href="https://github.com/zeit/next.js/issues?q=is%3Aissue">issues</a> of this repository and believe that this is not a duplicate.</li>
</ul>
<h2 dir="auto">Expected Behavior</h2>


<p dir="auto">Added description at the top of the page</p>
<h2 dir="auto">Current Behavior</h2>


<p dir="auto">Pages cannot be placed within a sub folder.</p>
<h2 dir="auto">Steps to Reproduce (for bugs)</h2>


<h2 dir="auto">Context</h2>


<h2 dir="auto">Your Environment</h2>

<table role="table">
<thead>
<tr>
<th>Tech</th>
<th>Version</th>
</tr>
</thead>
<tbody>
<tr>
<td>next</td>
<td>6.0.0</td>
</tr>
<tr>
<td>node</td>
<td>6.x</td>
</tr>
<tr>
<td>OS</td>
<td>N/A</td>
</tr>
<tr>
<td>browser</td>
<td>N/A</td>
</tr>
<tr>
<td>etc</td>
<td></td>
</tr>
</tbody>
</table>
<p dir="auto">When using <code class="notranslate">Router.push(url, as, { shallow })</code> the <code class="notranslate">Router</code> should validate that <code class="notranslate">as</code> is a String and warn the consumer.</p>
<p dir="auto">As a consumer, I would expect <code class="notranslate">Router.push</code> to gracefully handle / fallback to setting <code class="notranslate">as = url</code> so I can simply invoke <code class="notranslate">Router.push(url, {shallow: true})</code> but <g-emoji class="g-emoji" alias="woman_shrugging" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f937-2640.png">🤷‍♀️</g-emoji></p>



<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> I have searched the <a href="https://github.com/zeit/next.js/issues?q=is%3Aissue">issues</a> of this repository and believe that this is not a duplicate.</li>
</ul>
<h2 dir="auto">Steps to Reproduce (for bugs)</h2>


<ol dir="auto">
<li>invoke <code class="notranslate">Router.push</code> like <code class="notranslate">Router.push(url, { shallow: true })</code></li>
</ol>
<h2 dir="auto">Context</h2>
<p dir="auto">If doing ^ it can stop the URL of your next app from updating even when navigating deep into different routes.</p>
<h2 dir="auto">Your Environment</h2>

<table role="table">
<thead>
<tr>
<th>Tech</th>
<th>Version</th>
</tr>
</thead>
<tbody>
<tr>
<td>next</td>
<td>5.1</td>
</tr>
</tbody>
</table>