diff --git a/src/compiler/compile/render_ssr/handlers/Element.ts b/src/compiler/compile/render_ssr/handlers/Element.ts
index d9254a7b86..41e862345a 100644
--- a/src/compiler/compile/render_ssr/handlers/Element.ts
+++ b/src/compiler/compile/render_ssr/handlers/Element.ts
@@ -149,7 +149,7 @@ export default function (node: Element, renderer: Renderer, options: RenderOptio
// value = name === 'textContent' ? x`@escape($$value)` : x`$$value`;
} else if (binding.name === 'value' && node.name === 'textarea') {
const snippet = expression.node;
- node_contents = x`${snippet} || ""`;
+ node_contents = x`@escape(${snippet} || "")`;
} else if (binding.name === 'value' && node.name === 'select') {
// NOTE: do not add "value" attribute on
} else {
diff --git a/test/runtime/samples/attribute-escape/_config.js b/test/runtime/samples/textarea-bind-value-escape/_config.js
similarity index 100%
rename from test/runtime/samples/attribute-escape/_config.js
rename to test/runtime/samples/textarea-bind-value-escape/_config.js
diff --git a/test/runtime/samples/textarea-bind-value-escape/main.svelte b/test/runtime/samples/textarea-bind-value-escape/main.svelte
new file mode 100644
index 0000000000..7bca8b8f58
--- /dev/null
+++ b/test/runtime/samples/textarea-bind-value-escape/main.svelte
@@ -0,0 +1,5 @@
+
+
+
diff --git a/test/runtime/samples/textarea-value-escape/_config.js b/test/runtime/samples/textarea-value-escape/_config.js
new file mode 100644
index 0000000000..25313f01dc
--- /dev/null
+++ b/test/runtime/samples/textarea-value-escape/_config.js
@@ -0,0 +1,4 @@
+export default {
+ html: '',
+ ssrHtml: ''
+};
diff --git a/test/runtime/samples/attribute-escape/main.svelte b/test/runtime/samples/textarea-value-escape/main.svelte
similarity index 100%
rename from test/runtime/samples/attribute-escape/main.svelte
rename to test/runtime/samples/textarea-value-escape/main.svelte