This is a very brief post just capturing some config settings that I’ve found to be helpful to set at the very beginning of a project.
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:set="http://www.sitecore.net/xmlconfig/set/">
<sitecore>
<linkManager defaultProvider="sitecore">
<providers>
<add name="sitecore"
set:lowercaseUrls="true"
set:languageEmbedding="never"
set:alwaysIncludeServerUrl="false"
set:addAspxExtension="false" />
</providers>
</linkManager>
<settings>
<!-- ALLOW DUPLICATE ITEM NAMES ON THE SAME LEVEL
Specifies whether the duplicate item names are allowed on the same level in the content tree.
Default value: false
-->
<setting name="AllowDuplicateItemNamesOnSameLevel" set:value="false"/>
<!-- CONTENT EDITOR SORT LANGUAGES
Indicates whether the Content Editor show languages in the language selection dropdown
in the same order as /sitecore/system/Languages child items.
Default value: false
-->
<setting name="ContentEditor.SortLanguages" set:value="true"/>
<!-- START DOCUMENT
The document that will be shown first when entering the Sitecore client.
Path is rooted in /sitecore/content and must start with /.
-->
<setting name="DefaultItem" set:value="/home"/>
<!-- LAYOUT FILE
The path to the layout file to use for items that do not specify a layout file themselves.
Default value: ""
-->
<setting name="DefaultLayoutFile" set:value=""/>
<!-- HTML EDITOR DEFAULT PROFILE
Path to the default html editor profile.
Default value: /sitecore/system/Settings/Html Editor Profiles/Rich Text Default
-->
<setting name="HtmlEditor.DefaultProfile" set:value="/sitecore/system/Settings/Html Editor Profiles/Rich Text Default"/>
<!-- INVALID CHARS
Characters that are invalid in an item name
-->
<setting name="InvalidItemNameChars" set:value="\/:?"<>|[]-" />
<!-- MAIL SERVER
SMTP server used for sending mails by the Sitecore server
Is used by MainUtil.SendMail()
Default value: ""
-->
<setting name="MailServer" set:value=""/>
<!-- MAIL SERVER USER
If the SMTP server requires login, enter the user name in this setting
-->
<setting name="MailServerUserName" set:value=""/>
<!-- MAIL SERVER PASSWORD
If the SMTP server requires login, enter the password in this setting
-->
<setting name="MailServerPassword" set:value=""/>
<!-- MAIL SERVER PORT
If the SMTP server requires a custom port number, enter the value in this setting.
The default value is: 25
-->
<setting name="MailServerPort" set:value="25"/>
<!-- MAIL SERVER SSL
If the SMTP server requires SSL, set the value to true.
The default value is: false
-->
<setting name="MailServerUseSsl" set:value="false"/>
<!-- WEB SITE STYLESHEET
CSS file for HTML content of Sitecore database.
The file pointed to by WebStylesheet setting is automatically included in Html and Rich Text fields.
By using it, you can make the content of HTML fields look the same as the actual Web Site
-->
<setting name="WebStylesheet" set:value="/default.css"/>
</settings>
</sitecore>
</configuration>
In addition, make sure to always create custom search indexes for the site you’re building.
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:role="http://www.sitecore.net/xmlconfig/role/" xmlns:search="http://www.sitecore.net/xmlconfig/search/">
<sitecore role:require="Standalone or ContentManagement" search:require="solr">
<contentSearch>
<configuration type="Sitecore.ContentSearch.ContentSearchConfiguration, Sitecore.ContentSearch">
<indexes hint="list:AddIndex">
<index id="my_site_master_index" type="Sitecore.ContentSearch.SolrProvider.SolrSearchIndex, Sitecore.ContentSearch.SolrProvider">
<param desc="name">$(id)</param>
<param desc="core">$(id)</param>
<param desc="propertyStore" ref="contentSearch/indexConfigurations/databasePropertyStore" param1="$(id)" />
<configuration ref="contentSearch/indexConfigurations/defaultSolrIndexConfiguration">
<enableReadAccessIndexing>true</enableReadAccessIndexing>
</configuration>
<strategies hint="list:AddStrategy">
<strategy ref="contentSearch/indexConfigurations/indexUpdateStrategies/manual" role:require="ContentManagement and !Indexing" />
<strategy ref="contentSearch/indexConfigurations/indexUpdateStrategies/intervalAsyncMaster" role:require="Standalone or (ContentManagement and Indexing)" />
</strategies>
<locations hint="list:AddCrawler">
<crawler type="Sitecore.ContentSearch.SitecoreItemCrawler, Sitecore.ContentSearch">
<Database>master</Database>
<Root>/sitecore/content/My Site</Root>
</crawler>
</locations>
<enableItemLanguageFallback>false</enableItemLanguageFallback>
<enableFieldLanguageFallback>false</enableFieldLanguageFallback>
</index>
<index id="my_site_web_index" type="Sitecore.ContentSearch.SolrProvider.SolrSearchIndex, Sitecore.ContentSearch.SolrProvider">
<param desc="name">$(id)</param>
<param desc="core">$(id)</param>
<param desc="propertyStore" ref="contentSearch/indexConfigurations/databasePropertyStore" param1="$(id)" />
<configuration ref="contentSearch/indexConfigurations/defaultSolrIndexConfiguration" />
<strategies hint="list:AddStrategy">
<strategy ref="contentSearch/indexConfigurations/indexUpdateStrategies/manual" role:require="(ContentManagement and !Indexing) or (ContentDelivery and !Indexing)" />
<strategy ref="contentSearch/indexConfigurations/indexUpdateStrategies/onPublishEndAsyncSingleInstance" role:require="Standalone or (ContentManagement and Indexing) or (ContentDelivery and Indexing)" />
</strategies>
<locations hint="list:AddCrawler">
<crawler type="Sitecore.ContentSearch.SitecoreItemCrawler, Sitecore.ContentSearch">
<Database>web</Database>
<Root>/sitecore/content/My Site</Root>
</crawler>
</locations>
<enableItemLanguageFallback>false</enableItemLanguageFallback>
<enableFieldLanguageFallback>false</enableFieldLanguageFallback>
</index>
</indexes>
</configuration>
</contentSearch>
</sitecore>
</configuration>