There are multiple ways of structuring your solution and it all depends on the project requirements , best practices and your preferences. So feel free to drop your approach in the comments and mention why it works for you.
The basic approach is to have a Global folder and Site specific folders: “Site1”, “Site2”, …
The Global folder will contain templates and items that are not site specific or can be shared by multiple sites.
The Site specific folders will contain templates and items that are specific for that site.
Besides avoiding chaos tree horror and angry content editors, a good structure will also help you to apply more fine grained security settings as you can apply different security settings on each folder and therefore restrict access to certain folders for certain roles and users.
There are 4 main areas that can benefit from using the Global and Site specific folders: Content, Layout, Media Library and Templates.
Content
In the Global folder you can store
- item to configure the whole platform
- global dictionary (“buy now” call to action can be used on all the sites)
- (datasource) items that can be referenced by all sites: you can have all your office items in the global folder and use them the sites you like.
In the Site specific folders you can store
- item to configure the specific site
- dictionary that only contains site specific translations
- (datasource) items specific for this site
Layout
It’s a good idea to replicate the same structure in the file system as this will avoid confusion and flexibility to deploy site specific components. So check the path field when you add a layout/rendering/sublayout.
Media Library
Templates
The “YourClientName” folder is useful to differentiate templates that you created and templates folders that are automatically created when you install certain Sitecore modules
In the Global folder you can create templates (often for datasource items) used by components that can be used in all the sites.
In the Global/Fields folder you can create basic building blocks: each templates has just a few fields. A lot of templates need “description” field, so instead of adding a description field to each templates you can use Sitecore’s inheritance model. Even if your building block only contains 1 field, it means that the field will be consistently the same everywhere you inherit it. This is useful to avoid situations where you would name your field “summary” in one template and “short description” in another template and confuse content editors.
It will also simplify your (possibly code generated) models.
There is a nice best practices webinar that also talks about Sitecore structure:
Feel free to drop your approach, comments and feedback.