diff --git a/render/src/fragment.rs b/render/src/fragment.rs
index 6b653aa..27797b0 100644
--- a/render/src/fragment.rs
+++ b/render/src/fragment.rs
@@ -17,7 +17,7 @@ use std::fmt::{Result, Write};
/// };
/// assert_eq!(result, "");
/// ```
-#[derive(Debug)]
+#[derive(Debug, Clone)]
pub struct Fragment {
pub children: T,
}
diff --git a/render/src/html.rs b/render/src/html.rs
index ce8ae92..e33837f 100644
--- a/render/src/html.rs
+++ b/render/src/html.rs
@@ -20,7 +20,7 @@ use std::fmt::{Result, Write};
/// };
/// # assert_eq!(result, "");
/// ```
-#[derive(Debug)]
+#[derive(Debug, Clone)]
pub struct HTML5Doctype;
impl Render for HTML5Doctype {
diff --git a/render/src/simple_element.rs b/render/src/simple_element.rs
index 4cc0e22..4418baa 100644
--- a/render/src/simple_element.rs
+++ b/render/src/simple_element.rs
@@ -7,7 +7,7 @@ use std::fmt::{Result, Write};
type Attributes<'a> = Option>>;
/// Simple HTML element tag
-#[derive(Debug)]
+#[derive(Debug, Clone)]
pub struct SimpleElement<'a, T: Render> {
/// the HTML tag name, like `html`, `head`, `body`, `link`...
pub tag_name: &'a str,
diff --git a/render/src/text_element.rs b/render/src/text_element.rs
index 7ce591c..d49a334 100644
--- a/render/src/text_element.rs
+++ b/render/src/text_element.rs
@@ -21,7 +21,7 @@ impl Render for std::borrow::Cow<'_, str> {
}
/// A raw (unencoded) html string
-#[derive(Debug)]
+#[derive(Debug, Clone)]
pub struct Raw<'s>(&'s str);
impl<'s> From<&'s str> for Raw<'s> {