diff --git a/gso/workflows/site/create_site.py b/gso/workflows/site/create_site.py
index ac509adf3203c3b00543e3b7e5ae7094fd740582..5335abdd3c13dbe670626011d36662a599a5c94b 100644
--- a/gso/workflows/site/create_site.py
+++ b/gso/workflows/site/create_site.py
@@ -1,3 +1,4 @@
+import re
 from orchestrator.forms import FormPage
 from orchestrator.targets import Target
 from orchestrator.types import FormGenerator, State, SubscriptionLifecycle, UUIDstr
@@ -42,10 +43,27 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:  # noqa: C
             validate_country_code(country_code)
             return country_code
 
-        @validator("site_name", "site_internal_id", "site_bgp_community_id", allow_reuse=True)
+        @validator("site_internal_id", "site_bgp_community_id", allow_reuse=True)
         def validate_unique_fields(cls, value: str, field: ModelField) -> str | int:
             return validate_site_fields_is_unique(field.name, value)
 
+        @validator("site_name", allow_reuse=True)
+        def site_name_must_be_valid(cls, site_name: str) -> str:
+            """Validate the site name.
+
+            The site name must consist of three uppercase letters (A-Z) followed
+            by an optional single digit (0-9).
+            """
+            validate_site_fields_is_unique("site_name", site_name)
+            pattern = re.compile(r"^[A-Z]{3}[0-9]?$")
+            if pattern.match(site_name):
+                return site_name
+            else:
+                raise ValueError(
+                    "Enter a valid site name. It must consist of three uppercase letters (A-Z) followed by an optional"
+                    " single digit (0-9)."
+                )
+
     user_input = yield CreateSiteForm
 
     return user_input.dict()