diff --git a/lib/builder/webpack/base.config.js b/lib/builder/webpack/base.config.js
index bc12f57a12..bca749c1cd 100644
--- a/lib/builder/webpack/base.config.js
+++ b/lib/builder/webpack/base.config.js
@@ -63,7 +63,7 @@ module.exports = function webpackBaseConfig({ name, isServer }) {
           options: vueLoader.call(this, { isServer })
         },
         {
-          test: /\.js$/,
+          test: /\.jsx?$/,
           loader: 'babel-loader',
           exclude: /node_modules/,
           options: this.getBabelOptions({ isServer })
diff --git a/test/basic.ssr.test.js b/test/basic.ssr.test.js
index 64657f1158..45d0d230fc 100755
--- a/test/basic.ssr.test.js
+++ b/test/basic.ssr.test.js
@@ -306,6 +306,11 @@ test('/jsx', async t => {
   t.true(html.includes('<h1>JSX Page</h1>'))
 })
 
+test('/jsx-link', async t => {
+  const { html } = await nuxt.renderRoute('/jsx-link')
+  t.true(html.includes('<h1>JSX Link Page</h1>'))
+})
+
 test('/js-link', async t => {
   const { html } = await nuxt.renderRoute('/js-link')
   t.true(html.includes('<h1>vue file is first-class</h1>'))
diff --git a/test/fixtures/basic/pages/jsx-link.js b/test/fixtures/basic/pages/jsx-link.js
new file mode 100644
index 0000000000..58424174c3
--- /dev/null
+++ b/test/fixtures/basic/pages/jsx-link.js
@@ -0,0 +1,5 @@
+import renderLink from './jsx-link.jsx'
+
+export default {
+  render: renderLink
+}
diff --git a/test/fixtures/basic/pages/jsx-link.jsx b/test/fixtures/basic/pages/jsx-link.jsx
new file mode 100644
index 0000000000..e36e7df03b
--- /dev/null
+++ b/test/fixtures/basic/pages/jsx-link.jsx
@@ -0,0 +1,5 @@
+export default function (h) {
+  return (<div class='container'>
+    <h1>JSX Link Page</h1>
+  </div>)
+}