diff --git a/frappe/website/doctype/web_form/templates/web_form.html b/frappe/website/doctype/web_form/templates/web_form.html
index a11cbc964b3f..f02acd5b07b4 100644
--- a/frappe/website/doctype/web_form/templates/web_form.html
+++ b/frappe/website/doctype/web_form/templates/web_form.html
@@ -1,5 +1,9 @@
{% extends "templates/web.html" %}
+{% block meta_block %}
+ {% include "templates/includes/meta_block.html" %}
+{% endblock %}
+
{% block breadcrumbs %}{% endblock %}
{% block header %}
diff --git a/frappe/website/doctype/web_form/test_records.json b/frappe/website/doctype/web_form/test_records.json
index 62dea7446af2..7139ce25d78a 100644
--- a/frappe/website/doctype/web_form/test_records.json
+++ b/frappe/website/doctype/web_form/test_records.json
@@ -14,6 +14,9 @@
"published": 1,
"success_url": "/manage-events",
"title": "Manage Events",
+ "meta_title": "Test Meta Form Title",
+ "meta_description": "Test Meta Form Description",
+ "meta_image": "https://frappe.io/files/frappe.png",
"web_form_fields": [
{
"doctype": "Web Form Field",
diff --git a/frappe/website/doctype/web_form/test_web_form.py b/frappe/website/doctype/web_form/test_web_form.py
index 5a2269b64de8..bfc5e5c50b2f 100644
--- a/frappe/website/doctype/web_form/test_web_form.py
+++ b/frappe/website/doctype/web_form/test_web_form.py
@@ -75,3 +75,11 @@ def test_webform_render(self):
self.assertIn('data-doctype="Web Form"', content)
self.assertIn('data-path="manage-events/new"', content)
self.assertIn('source-type="Generator"', content)
+
+ def test_webform_html_meta_is_added(self):
+ set_request(method="GET", path="manage-events/new")
+ content = get_response_content("manage-events/new")
+
+ self.assertIn('', content)
+ self.assertIn('', content)
+ self.assertIn('', content)
diff --git a/frappe/website/doctype/web_form/web_form.json b/frappe/website/doctype/web_form/web_form.json
index f5ab147c6429..0c2e416696c4 100644
--- a/frappe/website/doctype/web_form/web_form.json
+++ b/frappe/website/doctype/web_form/web_form.json
@@ -48,6 +48,11 @@
"success_url",
"column_break_4",
"success_message",
+ "meta_section",
+ "meta_title",
+ "meta_description",
+ "column_break_khxs",
+ "meta_image",
"section_break_6",
"client_script",
"custom_css"
@@ -328,13 +333,38 @@
"fieldname": "section_break_6",
"fieldtype": "Section Break",
"label": "Scripting / Style"
+ },
+ {
+ "collapsible": 1,
+ "fieldname": "meta_section",
+ "fieldtype": "Section Break",
+ "label": "Meta"
+ },
+ {
+ "fieldname": "meta_title",
+ "fieldtype": "Data",
+ "label": "Meta Title"
+ },
+ {
+ "fieldname": "meta_description",
+ "fieldtype": "Small Text",
+ "label": "Meta Description"
+ },
+ {
+ "fieldname": "column_break_khxs",
+ "fieldtype": "Column Break"
+ },
+ {
+ "fieldname": "meta_image",
+ "fieldtype": "Attach Image",
+ "label": "Meta Image"
}
],
"has_web_view": 1,
"icon": "icon-edit",
"is_published_field": "published",
"links": [],
- "modified": "2022-08-17 18:58:49.451658",
+ "modified": "2022-12-15 17:14:44.939645",
"modified_by": "Administrator",
"module": "Website",
"name": "Web Form",
diff --git a/frappe/website/doctype/web_form/web_form.py b/frappe/website/doctype/web_form/web_form.py
index 73b2dc233174..5aaf9e43b5f0 100644
--- a/frappe/website/doctype/web_form/web_form.py
+++ b/frappe/website/doctype/web_form/web_form.py
@@ -191,10 +191,23 @@ def get_context(self, context):
self.add_custom_context_and_script(context)
self.load_translations(context)
+ self.add_metatags(context)
context.boot = get_boot_data()
context.boot["link_title_doctypes"] = frappe.boot.get_link_title_doctypes()
+ def add_metatags(self, context):
+ description = self.meta_description
+
+ if not description and self.introduction_text:
+ description = self.introduction_text[:140]
+
+ context.metatags = {
+ "name": self.meta_title or self.title,
+ "description": description,
+ "image": self.meta_image
+ }
+
def load_translations(self, context):
translated_messages = frappe.translate.get_dict("doctype", self.doc_type)
# Sr is not added by default, had to be added manually