SEO

The SEO library allows for the management and injection of dynamic data into HTML tags for the purpose of Search Engine Optimisation.

Definition

Collection is used to manage all SEO and render seo setting to html data.
SEO is used to provide system-level default page matadata.
You can use seo setting at the model level, but you need to register the model to the system SEO
Support customizing your own seo setting when you need more functions such as l10n, publish. Only need to implement this interface.

Usage

  • Create a SEO collection

    // Create a collection and register global seo by default
    collection := seo.NewCollection()
    
    // Change the default global name
    collection.SetGlobalName("My Global SEO")
    
    // Change the default context db key
    collection.SetDBContextKey("My DB")
    
    // Change the default seo model setting
    type MySEOSetting struct{
    	QorSEOSetting
    	publish
    	l10n
    }
    collection.SetSettingModel(&MySEOSetting{})
    
    // Turn off the default inherit the upper level SEO data when the current SEO data is missing
    collection.SetInherited(false)
    
    
  • Register and remove SEO

    // Register mutiple SEO by name
    collection.RegisterSEOByNames("Not Found", "Internal Server Error")
    
    // Register a SEO by model
    type Product struct{
    	Name  string
    	Setting Setting
    }
    collection.RegisterSEO(&Product{})
    
    // Remove a SEO
    collection.RemoveSEO(&Product{}).RemoveSEO("Not Found")
    
  • Configure SEO

    // Change the default SEO name when register a SEO by model
    
    collection.RegisterSEO(&Product{}).SetName("My Product")
    
    // Register a context Variable
    collection.RegisterSEO(&Product{}).
    			RegisterContextVariables("og:image", func(obj interface{}, _ *Setting, _ *http.Request) string {
    						return obj.image.url
    					}).
    			RegisterContextVariables("Name", func(obj interface{}, _ *Setting, _ *http.Request) string {
    						return obj.Name
    					})
    
    
    // Register setting variable
    collection.RegisterSEO(&Product{}).
    			RegisterSettingVaribles(struct{ProductTag string}{})
    
  • Render SEO html data

    // Render Global SEO
    collection.RenderGlobal(request)
    
    // Render SEO by a name
    collection.Render("product", request)
    
    // Render SEO by a model
    collection.Render(Product{}, request)
    

Example