;; Market meta/SEO components (defcomp ~market-meta-title (&key (title :as string)) (title title)) (defcomp ~market-meta-description (&key (description :as string)) (meta :name "description" :content description)) (defcomp ~market-meta-canonical (&key (href :as string)) (link :rel "canonical" :href href)) (defcomp ~market-meta-og (&key (property :as string) (content :as string)) (meta :property property :content content)) (defcomp ~market-meta-twitter (&key (name :as string) (content :as string)) (meta :name name :content content)) (defcomp ~market-meta-jsonld (&key (json :as string)) (script :type "application/ld+json" (~rich-text :html json))) ;; --------------------------------------------------------------------------- ;; Composition: all product meta tags from data ;; --------------------------------------------------------------------------- (defcomp ~market-product-meta-from-data (&key (title :as string) (description :as string) (canonical :as string?) (image-url :as string?) (site-title :as string) (brand :as string?) (price :as string?) (price-currency :as string?) (jsonld-json :as string)) (<> (~market-meta-title :title title) (~market-meta-description :description description) (when canonical (~market-meta-canonical :href canonical)) ;; OpenGraph (~market-meta-og :property "og:site_name" :content site-title) (~market-meta-og :property "og:type" :content "product") (~market-meta-og :property "og:title" :content title) (~market-meta-og :property "og:description" :content description) (when canonical (~market-meta-og :property "og:url" :content canonical)) (when image-url (~market-meta-og :property "og:image" :content image-url)) (when (and price price-currency) (<> (~market-meta-og :property "product:price:amount" :content price) (~market-meta-og :property "product:price:currency" :content price-currency))) (when brand (~market-meta-og :property "product:brand" :content brand)) ;; Twitter (~market-meta-twitter :name "twitter:card" :content (if image-url "summary_large_image" "summary")) (~market-meta-twitter :name "twitter:title" :content title) (~market-meta-twitter :name "twitter:description" :content description) (when image-url (~market-meta-twitter :name "twitter:image" :content image-url)) ;; JSON-LD (~market-meta-jsonld :json jsonld-json)))