HomeDev GuideRecipesAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunityOptimizely AcademySubmit a ticketLog In
Dev Guide

Edit tabs

Administrators manage tabs in Optimizely CMS. Create, edit, and delete tabs, define their display order, and apply access levels to control property visibility for editors.

📘

Note

This topic is for CMS administrators and developers with administrative access rights.

The Edit Tabs function lets administrators and developers manage how properties are organized within the CMS interface. By customizing tabs, you can group related properties together to improve the editing experience.

From Settings > Edit Tabs you can:

  • Add, edit, and delete tabs.
  • Define the display order of tabs.
  • Apply access levels to control tab visibility.
  • Sort the list of existing tabs by clicking column headers: Name, Display Name, Sort Index, Requires Access Level, or From Code (which indicates whether the tab was created in code rather than the UI).

Create a tab

  1. Go to Settings > Edit Tabs

  2. Click Create Tab. (You can select More > Edit to edit an existing tab.)

    • Name – Enter the name of the tab.
    • Display Name – Enter how the tab name is displayed.
    • Sort Index – Specify the index amount for the tab. The lower the value, the further the tab is placed to the left.
    • Requires Access Level – You can select which access level applies for an editor to see the tab. It is linked to the editor's access level for the page.
  3. Click Create. The new tab displays in the tabs list.

The new tab displays as a selection in the Property Group setting of a Content Type.

The new tab displays in the All Properties view. If you set the Sort Index was set to 0, the tab is placed to the left of the other tabs.

Tab name validation in CMS 13

❗️

Warning

CMS 13 enforces strict validation on tab identifiers. Tab Name values must be alphanumeric only—spaces, hyphens, underscores, and all other special characters are not permitted. Names that do not conform to this rule will fail validation and prevent the tab from being registered.

Use the Display Name field (or [Display(Name = "...")] attribute in code) to provide a human-readable label for the tab. The Name field is an internal identifier only and is never shown directly to editors.

Example: Valid defining a tab in code

[TabDefinition]
[Display(Name = "SEO Settings", Order = 100)]
public class SeoSettingsTab : TabDefinition
{
    // Name (identifier): "SeoSettings" — alphanumeric only
    // Display name: "SEO Settings" — set via [Display(Name = ...)]
}

Example: Invalid name contains a space

// This will fail CMS 13 validation at startup
[Display(Name = "SEO Settings")]
public class SeoSettings Tab : TabDefinition { }
// ❌ Identifier "SeoSettings Tab" contains a space

Automatic migration and the G_ prefix

❗️

Warning

When upgrading an existing implementation to CMS 13, tab records already stored in the database with names containing spaces or special characters will fail CMS 13 name validation. To prevent a hard startup failure, the automatic migration process renames non-conforming tab identifiers by adding a G_ prefix and removing the invalid characters.

For example, a tab previously named "SEO Settings" may be migrated to "G_SEOSettings" in the database. The Display Name is preserved and continues to appear correctly in the UI, but any code that references the old tab name by its identifier — for example, via [PropertyTabAssignment("SEO Settings")] or equivalent — will break after migration and must be updated to use the new prefixed name.

Post-upgrade checklist for tab identifiers:

  1. Review all tab definitions in code and confirm that Name values are alphanumeric only (no spaces, hyphens, underscores, or other special characters).
  2. After upgrading, check Settings > Edit Tabs for any tabs with a G_ prefix — these were auto-migrated and their identifiers have changed.
  3. Update all [PropertyTabAssignment] usages, tab group assignments, and any other references to the old identifier to use the new G_-prefixed name, or rename the tab to a clean alphanumeric identifier and update references accordingly.
  4. Redeploy and verify that all properties appear on the correct tabs in the editing interface.