Переглянути джерело

1. fix bugs; 2. seo优化; 3.add rich snippets for home, detail, category, tag page

guoziyun 1 рік тому
батько
коміт
8b294cf84e

+ 80 - 80
config/meta.js

@@ -1,69 +1,69 @@
 let homePageTile = {
-  zh: '免费可打印涂色页 | 在线数字填色',
-  en: 'Free printable coloring pages | Paint by number online',
-  es: 'Páginas de colorear gratuitas e imprimibles | Pintar por número en línea',
-  pt: 'Páginas de colorir gratuitas e imprimíveis | Pintar por número online',
-  ja: '無料で印刷可能な塗り絵ページ | オンライン数字ペイント',
+  zh: '免费涂色页(可打印)| 在线涂色',
+  en: 'Free Coloring Pages (Printable) | Color Online',
+  es: 'Páginas de colorear gratuitas (imprimibles) | Colorear en línea',
+  pt: 'Páginas de colorir gratuitas (imprimíveis) | Colorir online',
+  ja: '無料の着色用ページ(印刷可能)| オンラインで着色する',
 }
 
 let homePageDescription = {
-  zh: '海量填色页,各种各样的类型:动物、植物、曼陀罗、人物等等。所有填色页均免费、可打印,也可以在线进行数字填色。',
-  en: `A vast number of coloring pages with various types: animals, plants, mandalas, people, and more. All coloring pages are free, printable, and can also be digitally colored online. `,
-  es: 'Un gran número de páginas para colorear de varios tipos: animales, plantas, mandalas, personas, etc. Todas las páginas para colorear son gratuitas, imprimibles y también se pueden colorear digitalmente en línea.',
-  pt: 'Um vasto número de páginas para colorir com vários tipos: animais, plantas, mandalas, pessoas e muito mais. Todas as páginas para colorir são gratuitas, imprimíveis e também podem ser coloridas digitalmente online.',
-  ja: '様々な種類の膨大な数の塗り絵ページがあります。動物、植物、マンダラ、人物など。すべての塗り絵ページは無料で、印刷でき、またオンラインでデジタル塗り絵もできます。',
+  zh: '最佳涂色页网站:数量最多,类型最为多样,每日更新,AI智能检索,可在线涂色,适合大人和小孩。',
+  en: `The Best Coloring Pages Website: the Largest Quantity, the Widest Variety of Types, Updated Daily,  AI Search, Color Online, suitable for both Adults and Kids`,
+  es: 'El mejor sitio web de páginas de colorear: la mayor cantidad, la mayor variedad de tipos, actualizado diariamente, búsqueda con IA, colorear en línea, adecuado tanto para adultos como para niños.',
+  pt: 'O melhor site de páginas de colorir: a maior quantidade, a maior variedade de tipos, atualizado diariamente, busca com IA, colorir online, adequado tanto para adultos quanto para crianças.',
+  ja: '最高の着色用ページのサイト:最も数が多く、最も種類が豊富で、毎日更新され、AI 検索機能があり、オンラインで着色でき、大人も子供も利用できます',
 }
 
 let categoryTitle = {
-  zh: '填色页分类',
-  en: 'Coloring Page Categories',
-  es: 'Categorías de Páginas de Colorear',
-  pt: 'Categorías de Páginas de Colorear',
-  ja: '塗り絵ページのカテゴリー',
+  zh: '激发创造力的顶级填色页分类',
+  en: 'Top Coloring Page Categories to Inspire Creativity',
+  es: 'Categorías de páginas de colorear de primer nivel para inspirar la creatividad',
+  pt: 'Categorias de páginas de colorir de destaque para inspirar a criatividade',
+  ja: 'クリエイティビティを刺激するトップレベルの着色用ページのカテゴリー',
 }
 
 let categoryDescription = {
-  zh: '丰富的填色页类别:动物、植物、曼陀罗、奇幻等,助您快速找到您感兴趣的填色页。',
-  en: `Abundant coloring page categories: Animal, Plant, Mandalas, Fantasy, and so on, help you quickly find the coloring pages that interest you.`,
-  es: 'Categorías abundantes de páginas para colorear: Animales, Plantas, Mandalas, Fantasía, etc., que le ayudarán a encontrar rápidamente las páginas para colorear que le interesen.',
-  pt: 'Categorias abundantes de páginas para colorir: Animais, Plantas, Mandalas, Fantasia, etc., ajudam você a encontrar rapidamente as páginas para colorir que lhe interessam.',
-  ja: '豊富な塗り絵のカテゴリー:動物、植物、マンダラ、ファンタジーなど。あなたが興味を持つ塗り絵をすばやく見つけるのに役立ちます。',
+  zh: '探索令人兴奋的填色页类别:动物、植物、曼陀罗、奇幻等等,享受无尽的创意乐趣!',
+  en: `Explore exciting coloring pages categories: Animal, Plant, Mandalas, Fantasy, and so on for endless creative fun!`,
+  es: 'Explora emocionantes categorías de páginas de colorear: animales, plantas, mandalas, fantasía, entre otros, y disfruta de una diversión creativa interminable.',
+  pt: 'Explore categorias emocionantes de páginas de colorir: animais, plantas, mandalas, fantasia, e assim por diante, para uma diversão criativa interminável!',
+  ja: '刺激的な着色ページのカテゴリを探しましょう:動物、植物、マンダラ、ファンタジーなど、果てしないクリエイティブな楽しみを味わえます!',
 }
 
 let tagTitle = {
-  zh: '涂色页标签检索',
-  en: 'Coloring Page Tags',
-  es: 'Etiquetas de Páginas de Colorear',
-  pt: 'Tags de Páginas de Colorir',
-  ja: '塗り絵ページのタグ',
+  zh: '填色页标签:找到你会喜欢的主题',
+  en: 'Coloring Pages Tags: Find Themes You’ll Love',
+  es: 'Etiquetas de páginas de colorear: Encuentra los temas que te encantarán',
+  pt: 'Tags de páginas de colorir: Encontre os temas que você vai amar',
+  ja: '着色用ページのタグ:あなたが好きになるテーマを見つけましょう',
 }
 
 let tagDescription = {
-  zh: '数百个热门填色页标签:阳光、海滩、海洋、老虎、孔雀、蝴蝶、父母、女孩、婴儿、花园、花朵、鸟类、鱼类等等。它们能满足你对填色页更具体的搜索需求。',
-  en: 'Hundreds of popular coloring pages tags: sunshine, beach, sea, tiger, peacock, butterfly, parents, girl, baby, garden, flowers, birds, fish, and more. They can meet your more specific search needs for coloring pages.',
-  es: 'Cientos de etiquetas populares de páginas para colorear: sol, playa, mar, tigre, pavo real, mariposa, padres, niña, bebé, jardín, flores, pájaros, peces, etc. Pueden satisfacer tus necesidades de búsqueda más específicas de páginas para colorear.',
-  pt: 'Centenas de tags populares de páginas para colorir: sol, praia, mar, tigre, pavão, borboleta, pais, menina, bebê, jardim, flores, pássaros, peixes e muito mais. Elas podem atender às suas necessidades de busca mais específicas de páginas para colorir.',
-  ja: '数百の人気のある塗り絵ページのタグ:太陽、ビーチ、海、トラ、孔雀、蝶、親、女の子、赤ちゃん、庭、花、鳥、魚など。これらは、塗り絵ページに対するあなたのより具体的な検索ニーズを満たすことができます。',
+  zh: '涂色页标签能帮助你精准找到你想要的内容,无论是圣诞节、蝴蝶、儿童相关的,还是其他各类主题',
+  en: `Coloring pages tags help you find exactly what you’re looking for,  whether it's Christmas, butterfly, children, or beyond.`,
+  es: 'Las etiquetas de las páginas de colorear te ayudan a encontrar exactamente lo que estás buscando, ya sea temas relacionados con Navidad, mariposas, niños o cualquier otro tema más allá.',
+  pt: 'As tags das páginas de colorir ajudam você a encontrar exatamente o que está procurando, se for sobre Natal, borboletas, crianças ou qualquer coisa além disso.',
+  ja: '着色用ページのタグは、クリスマス、蝶、子供に関するものであっても、それ以外のものであっても、あなたが探しているものを正確に見つけるのに役立ちます。',
 }
 
 let searchTitle = {
-  zh: '按关键词搜索涂色页',
-  en: 'Coloring Pages Search By Key Word',
-  es: 'Buscar páginas de colorear por palabra clave',
-  pt: 'Pesquisar páginas de colorir por palavra-chave',
-  ja: 'キーワードで塗り絵用紙を検索する',
+  zh: '快速搜索适合各个年龄段的最佳填色页',
+  en: 'Quickly Search for the Best Coloring Pages for All Ages',
+  es: 'Busca rápidamente las mejores páginas de colorear para todas las edades',
+  pt: 'Pesquise rapidamente as melhores páginas de colorir para todas as idades',
+  ja: 'すべての年齢層に適した最高の着色ページを素早く検索しましょう',
 }
 
 let searchDescription = {
-  zh: '按标签或关键词搜索可打印填色页',
-  en: `Search printable coloring page by tags or keywords`,
-  es: 'Busca páginas de colorear imprimibles por etiquetas o palabras clave',
-  pt: 'Procure páginas de colorir imprimíveis por tags ou palavras - chave',
-  ja: 'タグまたはキーワードで印刷可能な塗り絵ページを検索する',
+  zh: '利用我们简便的搜索选项,快速找到最契合你心情的优质填色页',
+  en: `Quickly find the best coloring pages for your mood with our easy search options.`,
+  es: 'Encuentra rápidamente las mejores páginas de colorear para tu estado de ánimo con nuestras opciones de búsqueda fáciles.',
+  pt: 'Encontre rapidamente as melhores páginas de colorir para o seu humor com nossas opções de busca fáceis.',
+  ja: '私たちの簡単な検索オプションを使って、あなたの気分に最適な最高の着色ページを素早く見つけましょう',
 }
 
 let specialTitle = {
-  zh: '彩绘 - 特殊色页',
+  zh: '彩绘 - 特殊色页',
   en: 'Special Coloring Pages',
   es: 'Páginas de Colorear Especiales',
   pt: 'Páginas de Colorir Especiais',
@@ -72,27 +72,27 @@ let specialTitle = {
 
 
 let specialDescription = {
-  zh: '特殊填色页,可以在在线填色中呈现出更多的颜色和细节,有"照片"的即视感。快来试试吧!',
-  en: `Special coloring pages can present more colors and details in online coloring, giving a "photographic" visual effect. Come and give a try! `,
-  es: 'Las páginas especiales de coloreado pueden mostrar más colores y detalles en el coloreado en línea, brindando un efecto visual “fotográfico”. ¡Ven y dale una oportunidad!',
-  pt: 'As páginas especiais de colorir podem apresentar mais cores e detalhes na coloração online, proporcionando um efeito visual “fotográfico”. Venha e dê uma chance!',
-  ja: '特殊な塗り絵ページは、オンライン塗り絵でより多くの色と細部を表現でき、「写真のような」視覚効果をもたらします。 ぜひ試してみてください!',
+  zh: '特殊涂色页,可以在在线涂色中呈现出更多的颜色和细节,有"照片"的即视感。快来试试吧!',
+  en: `Special coloring pages with visual impression of "photos" for creative minds`,
+  es: 'Páginas de colorear especiales con la impresión visual de "fotos" para personas creativas.',
+  pt: 'Páginas de colorir especiais com a impressão visual de "fotos" para pessoas criativas.',
+  ja: 'クリエイティブな人々のために、「写真」のような視覚的印象を持つ特別な着色ページ',
 }
 
 let albumsTitle = {
-  zh: '涂色页专辑',
-  en: 'Coloring Page Albums',
-  es: 'Álbumes de páginas para colorear',
-  pt: 'Álbuns de páginas para colorir',
-  ja: '塗り絵用紙のアルバム',
+  zh: '使用独特的填色页画册,享受无穷乐趣',
+  en: 'Endless Fun with Unique Coloring Pages Albums',
+  es: 'Divertido interminable con álbumes únicos de páginas de colorear',
+  pt: 'Diversão interminável com álbuns únicos de páginas de colorir',
+  ja: 'ユニークな着色用ページのアルバムで、尽きない楽しみを味わいましょう',
 }
 
 let albumsDescription = {
-  zh: '填色页专辑,是我们推出的一系列相同主题的精品填色页集合,如美女专辑、星座专辑、孩童专辑、圣诞节专辑等等',
-  en: `Coloring page albums are a series of collections of high - quality coloring pages with the same theme launched by us, such as the Beauty Album, Constellation Album, Children's Album, Christmas Album, etc.`,
-  es: 'Los álbumes de páginas para colorear son una serie de colecciones de páginas de coloreado de alta calidad con el mismo tema que lanzamos, como el álbum de bellezas, el álbum de constelaciones, el álbum infantil, el álbum de Navidad, etc.',
-  pt: 'Os álbuns de páginas para colorir são uma série de coleções de páginas de colorir de alta qualidade com o mesmo tema que lançamos, como o Álbum de Mulheres Bonitas, o Álbum de Constellations, o Álbum Infantil, o Álbum de Natal, etc.',
-  ja: '塗り絵ページアルバムとは、当社が発表した同じテーマの高品質な塗り絵ページの一連のコレクションです。例えば美女アルバム、星座アルバム、子どもアルバム、クリスマスアルバムなどです。',
+  zh: '涂色页专辑,是我们推出的一系列相同主题的精品涂色页合集,如美女专辑、星座专辑、孩童专辑、圣诞节专辑等等',
+  en: `Discover a high-quality collection of coloring pages albums for every artistic style`,
+  es: 'Descubre una colección de alta calidad de álbumes de páginas de colorear para cada estilo artístico.',
+  pt: 'Descubra uma coleção de alta qualidade de álbuns de páginas de colorir para cada estilo artístico',
+  ja: 'すべての芸術スタイルに適した、高品質の着色用ページのアルバムのコレクションを見つけましょう',
 }
 
 let albumDetailTitle = {
@@ -104,7 +104,7 @@ let albumDetailTitle = {
 }
 
 let albumDetailDescription = {
-  zh: '展示填色页专辑的高质量内容,挑选您感兴趣的填色页,然后开始在线数字填色或下载。',
+  zh: '展示涂色页专辑的高质量内容,挑选您感兴趣的涂色页,然后开始在线数字涂色或下载。',
   en: 'Show the high-quality contents of the coloring page album, select the coloring page that interest you, and start coloring by number online or download.',
   es: 'Muestra el contenido de alta calidad del álbum de páginas para colorear, selecciona la página para colorear que te interese y comienza a colorear por número en línea o descarga.',
   pt: 'Mostre o conteúdo de alta qualidade do álbum de páginas para colorir, selecione a página para colorir que lhe interessa e comece a colorir por número online ou faça o download.',
@@ -112,35 +112,35 @@ let albumDetailDescription = {
 }
 
 let designersTitle = {
-  zh: '艺术涂色页设计师',
-  en: 'Art Coloring Page Designers',
-  es: 'Diseñadores de Páginas de Colorear Artísticas',
-  pt: 'Designers de Páginas de Colorir Artísticas',
-  ja: 'アート塗り絵ページデザイナー',
+  zh: '结识最优秀的涂色页艺术家及其杰作',
+  en: 'Meet the Best Coloring Page Artists and Their Masterpieces',
+  es: 'Conoce a los mejores artistas de páginas de colorear y sus obras maestras',
+  pt: 'Conheça os melhores artistas de páginas de colorir e suas obras-primas',
+  ja: '最高の着色ページのアーティストたちと彼らの傑作に出会いましょう',
 }
 
 let designersDescription = {
-  zh: 'art.pcoloring.com汇集了众多杰出的艺术填色页设计师。正是因为他们的天才创意,才为我们创作出精彩的填色页作品。快来看看有没有你喜欢的设计师吧。',
-  en: `art.pcoloring.com has gathered numbers of outstanding art coloring page designers. It is precisely because of their genius ideas that they have produced wonderful coloring page works for us. Come and check if there is any designer you like.`,
-  es: 'art.pcoloring.com ha reunido a numerosos excelentes diseñadores de páginas de coloración artística. Es precisamente debido a sus ideas geniales que han creado maravillosos trabajos de páginas de coloración para nosotros. Ven y comprueba si hay algún diseñador que te guste.',
-  pt: 'art.pcoloring.com reuniu numerosos excelentes designers de páginas de coloração artística. É justamente por causa de suas ideias geniais que eles criaram maravilhosas páginas de coloração para nós. Venha ver se há algum designer que você goste.',
-  ja: 'art.pcoloring.comには数多くの優秀なアート塗り絵ページデザイナーが集まっています。まさに彼らの天才的なアイデアのおかげで、私たちに素晴らしい塗り絵ページの作品を生み出しています。あなたの好きなデザイナーがいるか見てみましょう。',
+  zh: '探索才华横溢的填色页艺术家们的作品,开启一个充满创造力的世界',
+  en: `Explore the works of talented coloring page artists and unlock a world of creativity.`,
+  es: 'Explora las obras de los talentosos artistas de páginas de colorear y descubre un mundo de creatividad',
+  pt: 'Explore as obras dos artistas talentosos de páginas de colorir e desbloqueie um mundo de criatividade',
+  ja: '才能あふれる着色ページのアーティストたちの作品を探求し、創造性に満ちた世界の扉を開きましょう',
 }
 
 let designerTitle = {
-  zh: '艺术涂色页设计师',
-  en: 'Art Coloring Page Designer',
-  es: 'Diseñador(a) de páginas de coloración artística',
-  pt: 'Designer de páginas de coloração artística',
-  ja: 'アートクラフト塗り絵ページデザイナー',
+  zh: '填色页艺术家',
+  en: 'Coloring Page Artists',
+  es: 'Artistas de páginas de colorear',
+  pt: 'Artistas de páginas de colorir',
+  ja: '着色用ページのアーティスト',
 }
 
 let designerDescription = {
-  zh: '填色页设计师作品集,你是否对某个设计师的画作印象深刻,或许你们的审美一致,来看看他的填色页作品吧',
-  en: `Coloring Page Designer's Portfolio. Are you deeply impressed by a certain designer's paintings? Perhaps you share the same aesthetic. Come and take a look at her coloring page works.`,
-  es: 'Portafolio del Diseñador de Páginas de Coloración. ¿Te han impresionado profundamente las pinturas de un determinado diseñador? Quizás compartas el mismo gusto estético. Ven y echa un vistazo a sus trabajos de páginas de coloración.',
-  pt: 'Portfólio do Designer de Páginas de Colorir. Algum desenho de determinado designer te impressionou profundamente? Talvez você tenha o mesmo senso estético. Venha dar uma olhada em suas páginas de colorir.',
-  ja: '塗り絵ページデザイナーの作品集。特定のデザイナーの絵があなたに深い印象を与えましたか?多分あなたたちは同じ美学的感覚を持っています。彼女の塗り絵ページの作品を見てみましょう。',
+  zh: '深入探索填色页艺术家的世界,找到独特而精美的填色图案',
+  en: `Dive into the world of coloring page artists and find unique, beautiful designs to color`,
+  es: 'Sumérgete en el mundo de los artistas de páginas de colorear y encuentra diseños únicos y hermosos para colorear.',
+  pt: 'Se mergulhe no mundo dos artistas de páginas de colorir e encontre designs únicos e bonitos para colorir.',
+  ja: '着色ページのアーティストの世界に没入し、ユニークで美しいデザインを見つけて着色しましょう',
 }
 
 let infoTitle = {
@@ -152,7 +152,7 @@ let infoTitle = {
 }
 
 let infoDescription = {
-  zh: 'JCCY 是一家成立于2015年专业从事休闲娱乐游戏开发的公司。我们推出的几款游戏,都深受用户喜爱。其中的《数字填色书》是全球最受欢迎的数字填色应用之一,也是最成功的广告驱动式应用程序,获得广泛认可。我们非常期待并乐于听到您的反馈!',
+  zh: 'JCCY 是一家成立于2015年专业从事休闲娱乐游戏开发的公司。我们推出的几款游戏,都深受用户喜爱。其中的《数字涂色书》是全球最受欢迎的数字涂色应用之一,也是最成功的广告驱动式应用程序,获得广泛认可。我们非常期待并乐于听到您的反馈!',
   en: `JCCY is a company founded in 2015 that specializes in the development of casual entertainment games. Several of our games have been well received by users. Among them, "Coloring Book by Numbers" is one of the most popular coloring by number apps in the world and the most successful ad-driven app, gaining wide recognition. We'd love to hear from you!`,
   es: 'JCCY es una empresa fundada en 2015 especializada en el desarrollo de juegos de entretenimiento casual. Varios juegos que lanzamos son muy populares entre los usuarios. Entre ellos, "Coloring Book by Numbers" es una de las aplicaciones para colorear digitales más populares del mundo y también es la aplicación impulsada por publicidad de mayor éxito, obteniendo un amplio reconocimiento.¡Nos encantaría saber de usted!',
   pt: 'A JCCY é uma empresa fundada em 2015 especializada no desenvolvimento de jogos de entretenimento casual. Vários jogos que lançamos são muito populares entre os usuários. Entre eles, o "Coloring Book by Numbers" é um dos aplicativos de colorir digitais mais populares do mundo e também o aplicativo de publicidade de maior sucesso, ganhando amplo reconhecimento.Gostaríamos muito de ouvir de você!',
@@ -176,7 +176,7 @@ let detailDescription = {
 }
 
 let playTitle = {
-  zh: '在线数字色书 - art.pcoloring.com',
+  zh: '在线数字色书 - art.pcoloring.com',
   en: 'Online Coloring Books and Coloring Pages - art.pcoloring.com',
   es: 'Libros de colorear en línea y páginas de colorear - art.pcoloring.com',
   pt: 'Livros de colorir online e páginas de colorir - art.pcoloring.com',
@@ -184,7 +184,7 @@ let playTitle = {
 }
 
 let playDescription = {
-  zh: '欢迎来到色游戏,你会看到一张待上色的线条底图,请根据游戏面板下方的数字指示为图片涂上颜色,引爆它们,完成它,你将收获一张“得意之作”,并可自由保存、收藏、或者分享给好友。',
+  zh: '欢迎来到色游戏,你会看到一张待上色的线条底图,请根据游戏面板下方的数字指示为图片涂上颜色,引爆它们,完成它,你将收获一张“得意之作”,并可自由保存、收藏、或者分享给好友。',
   en: `Welcome to the coloring game! You'll see a line drawing waiting to be colored. Please color the picture according to the number instructions below the game panel. Bring it to life and complete it. You'll get a "masterpiece" and can freely save, collect, or share it with your friends.`,
   es: '¡Bienvenido al juego de colorear! Verás un dibujo en línea esperando a ser coloreado. Por favor, colorea la imagen de acuerdo con las indicaciones de los números debajo del panel del juego. Dales vida y complétalo. Obtendrás una "obra maestra" y podrás guardarla, recogerla o compartirla con tus amigos libremente.',
   pt: 'Bem-vindo ao jogo de colorir! Você verá um desenho a lápis esperando para ser colorido. Por favor, pinte a imagem de acordo com as indicações dos números abaixo do painel do jogo. Dê vida a eles e complete-o. Você terá uma "obra-prima" e poderá salvá-la, colecioná-la ou compartilhá-la com seus amigos livremente.',

+ 93 - 74
config/translate.js

@@ -1,9 +1,25 @@
 let printableColoringPage = {
-  zh: '可打印涂色页',
-  en: 'Printable Coloring Page',
-  es: 'Página de Colorear Imprimible',
-  pt: 'Página de Colorir Imprimível',
-  ja: '印刷可能な塗り絵ページ',
+  zh: '免费可打印填色页',
+  en: 'Free Printable Coloring Page',
+  es: 'Página de colorear imprimible gratis',
+  pt: 'Página de colorir imprimível grátis',
+  ja: '無料で印刷できる着色ページ',
+}
+
+let introTitle = {
+  zh: '打造全球最好的填色页网站',
+  en: 'Build The Best Coloring Pages Website In The World',
+  es: 'Construye el mejor sitio web de páginas de colorear del mundo',
+  pt: 'Construa o melhor site de páginas de colorir do mundo',
+  ja: '世界で最高の着色用ページのサイトを築きます',
+}
+
+let introText = {
+  zh: '是一个专业的填色页网站,拥有数量最多(超过 15000 多页)且类型最为全面的填色页资源。它每日更新,适合大人和小孩。借助我们智能的人工智能搜索功能,你可以找到任何你想要的填色页。你可以下载、打印,或者在线玩填色游戏(按数字填色)。',
+  en: 'is a professional coloring page website with the largest quantity(over 15000+) and the most comprehensive types.  It is updated daily and is suitable for both adults and kids. With our intelligent AI search, you will find any kinds of coloring pages you want. Your can download, print,  or play the game online(paint by number). ',
+  es: 'es un sitio web profesional de páginas de colorear con la mayor cantidad (más de 15.000+) y los tipos más completos. Se actualiza diariamente y es adecuado tanto para adultos como para niños. Con nuestra búsqueda inteligente de IA, encontrarás cualquier tipo de páginas de colorear que desees. Puedes descargarlas, imprimirlas o jugar al juego en línea (colorear por número).',
+  pt: 'é um site profissional de páginas de colorir com a maior quantidade (mais de 15.000+) e os tipos mais completos. É atualizado diariamente e é adequado tanto para adultos quanto para crianças. Com nossa busca inteligente de IA, você encontrará qualquer tipo de páginas de colorir que queira. Você pode baixá-las, imprimi-las ou jogar o jogo online (colorir por número).',
+  ja: 'は、専門の着色用ページのサイトで、最も数が多く(15000 枚以上)、種類も最も充実しています。毎日更新され、大人も子供も利用できます。当社のスマートな AI 検索機能を使えば、あなたが望むどんな種類の着色用ページでも見つけることができます。ダウンロード、印刷、またはオンラインでゲーム(数字で塗る)をすることができます。',
 }
 
 let homePage = {
@@ -15,27 +31,36 @@ let homePage = {
 }
 
 let categoryPage = {
-  zh: '分类',
-  en: 'Category Page',
-  es: 'Página de Categoría',
-  pt: 'Página de Categoria',
-  ja: 'カテゴリ',
+  zh: '推荐填色页分类',
+  en: 'Recommended Coloring Page Categories',
+  es: 'Categorías recomendadas de páginas de colorear',
+  pt: 'Categorias recomendadas de páginas de colorir',
+  ja: 'おすすめの着色用ページのカテゴリー',
 }
 
+
 let tagPage = {
-  zh: '标签',
-  en: 'Tag Page',
-  es: 'Página de Etiqueta',
-  pt: 'Página de Etiqueta',
-  ja: 'タグページ',
+  zh: '热门填色页标签',
+  en: 'Popular Coloring Page Tags',
+  es: 'Etiquetas populares de páginas de colorear',
+  pt: 'Tags populares de páginas de colorir',
+  ja: '人気のある着色用ページのタグ',
 }
 
-let selectByTag = {
-  zh: '按标签筛选填色页',
-  en: 'Select coloring pages by tag',
-  es: 'Seleccionar páginas de colorear por etiqueta',
-  pt: 'Selecionar páginas de colorir por tag',
-  ja: 'タグで塗り絵ページを選択する',
+let tagPageHeading = {
+  zh: '热门填色页标签',
+  en: 'Popular Coloring Page Tags',
+  es: 'Etiquetas populares de páginas de colorear',
+  pt: 'Tags populares de páginas de colorir',
+  ja: '人気のある着色用ページのタグ',
+}
+
+let tagPageSubHeading = {
+  zh: '通过数百个流行标签来探索你最喜欢的涂色页',
+  en: 'Explore your favorite coloring pages by hundreds of popular tags',
+  es: 'Explora tus páginas de colorear favoritas a través de cientos de etiquetas populares',
+  pt: 'Explore suas páginas de colorir favoritas por meio de centenas de tags populares',
+  ja: '何百もの人気のタグを使って、あなたのお気に入りの着色ページを探しましょう',
 }
 
 let about = {
@@ -63,27 +88,27 @@ let feedback = {
 }
 
 let designer = {
-  zh: '设计师',
-  en: 'Designer',
-  es: 'Diseñadora',
-  pt: 'Designer',
-  ja: 'デザイナー',
+  zh: '艺术家',
+  en: 'Artist',
+  es: 'Artista',
+  pt: 'Artista',
+  ja: 'アーティスト',
 }
 
 let designerColumn = {
-  zh: '设计师专栏',
-  en: 'Designer Column',
-  es: 'Columna de diseño',
-  pt: 'Coluna do Designer',
-  ja: 'デザイナーコラム',
+  zh: '填色页艺术家',
+  en: 'Coloring Page Artists',
+  es: 'Artistas de páginas de colorear',
+  pt: 'Artistas de páginas de colorir',
+  ja: '着色用ページのアーティスト',
 }
 
 let coloringPageDesigner = {
-  zh: '填色设计师',
+  zh: '艺术填色设计师',
   en: 'Coloring Page Designer',
-  es: 'Diseñador de Páginas de Colorear',
-  pt: 'Designer de Páginas de Colorir',
-  ja: '塗り絵ページデザイナー',
+  es: 'Diseñadora de coloreado artístico',
+  pt: 'Designer (a) de coloração artística',
+  ja: 'アート着色デザイナー',
 }
 
 let publishTime = {
@@ -184,23 +209,15 @@ let daily = {
 }
 
 let album = {
-  zh: '专辑',
-  en: 'Album',
-  es: 'álbum',
-  pt: 'álbum',
-  ja: 'アルバム',
-}
-
-let allAlbums = {
-  zh: '所有专辑',
-  en: 'All Albums',
-  es: 'Todos los álbumes',
-  pt: 'Todos os álbuns',
-  ja: 'すべてのアルバム',
+  zh: '填色页专辑',
+  en: 'Coloring Page Albums',
+  es: 'Álbumes de páginas de colorear',
+  pt: 'Álbuns de páginas de colorir',
+  ja: '着色用ページのアルバム',
 }
 
 let coloringPageAlbum = {
-  zh: '色页专辑',
+  zh: '涂色页专辑',
   en: 'Coloring Page Album',
   es: 'Album de Páginas de Colorear',
   pt: 'Album de Páginas de Colorir',
@@ -232,23 +249,23 @@ let more = {
 }
 
 let latest = {
-  zh: '最新上线',
-  en: 'Latest',
-  es: 'Nuevo',
-  pt: 'Novos',
-  ja: '最新リリース',
+  zh: '最新涂色页',
+  en: 'Latest Coloring Pages',
+  es: 'Las últimas páginas de colorear',
+  pt: 'As últimas páginas de colorir',
+  ja: '最新の着色用ページ',
 }
 
 let hot = {
-  zh: '热门优选',
-  en: 'Popular Selections',
-  es: 'Selecciones Populares',
-  pt: 'Seleções Populares',
-  ja: '人気の選りすぐり',
+  zh: '热门涂色页',
+  en: 'Popular Coloring Pages',
+  es: 'Páginas de colorear populares',
+  pt: 'Páginas de colorir populares',
+  ja: '人気のある着色用ページ',
 }
 
 let special = {
-  zh: '彩绘专区',
+  zh: '彩绘涂色页',
   en: 'Special Coloring Pages',
   es: 'Páginas de Colorear Especiales',
   pt: 'Páginas de Colorir Especiais',
@@ -256,11 +273,11 @@ let special = {
 }
 
 let selectAlbums = {
-  zh: '精选专辑',
-  en: 'Selected Albums',
-  es: 'Álbumes Seleccionados',
-  pt: 'Álbuns Selecionados',
-  ja: '精選アルバム',
+  zh: '涂色页专辑',
+  en: 'Coloring Page Albums',
+  es: 'álbumes de páginas de colorear',
+  pt: 'Álbuns de páginas de colorir',
+  ja: '着色用ページのアルバム',
 }
 
 let total = {
@@ -304,7 +321,7 @@ let wrongPage = {
 }
 
 let appIntroduction = {
-  zh: '🎨 数字填色艺术 - 按数字涂色 🎨 是最棒的数字填色画册之一,拥有各类填色页。填色页每日更新,你总能找到适合自己的图案。它完全免费!我们提供这本免费的色画册,作为一种色彩疗法来帮你释放压力。把你的作品分享给朋友,随时随地尽情色。',
+  zh: '🎨 数字涂色艺术 - 按数字涂色 🎨 是最棒的数字涂色画册之一,拥有各类涂色页。涂色页每日更新,你总能找到适合自己的图案。它完全免费!我们提供这本免费的色画册,作为一种色彩疗法来帮你释放压力。把你的作品分享给朋友,随时随地尽情色。',
   en: '🎨 Art Number Coloring - Color by Number 🎨 is one of the best paint by number coloring book with various categories of coloring pages. Coloring Pages are update everyday, you can always find images suite to you. It is 💯 Free! We offer this free coloring book as a color therapy to release your stress. Share your artworks to your friends and color anytime & anywhere. ',
   es: '🎨 Arte de Coloreado por Número - Colorear por Número 🎨 es uno de los mejores libros de coloreado por número con varias categorías de páginas para colorear. Las páginas para colorear se actualizan todos los días, siempre puedes encontrar imágenes que te gusten. ¡Es 100% gratuito! Ofrecemos este libro de coloreado gratuito como una terapia del color para aliviar tu estrés. Comparte tus obras de arte con tus amigos y colorea en cualquier momento y lugar.',
   pt: '🎨 Arte de Colorir por Número - Colorir por Número 🎨 é um dos melhores livros de colorir por número com várias categorias de páginas para colorir. As páginas para colorir são atualizadas todos os dias, você sempre pode encontrar imagens que sejam perfeitas para você. É 100% gratuito! Oferecemos este livro de colorir gratuito como uma terapia da cor para aliviar o seu stress. Compartilhe suas obras de arte com seus amigos e colora a qualquer momento e lugar.',
@@ -312,7 +329,7 @@ let appIntroduction = {
 }
 
 let goodExperience = {
-  zh: '绝佳的数字色游戏体验',
+  zh: '绝佳的数字色游戏体验',
   en: 'Great coloring by number game experience',
   es: 'Gran experiencia de juego de colorear por números',
   pt: 'Gran experiencia de juego de colorear por números',
@@ -352,7 +369,7 @@ let offlineColoring = {
 }
 
 let companyIntroduction = {
-  zh: 'JCCY 是一家成立于2015年专业从事休闲娱乐游戏开发的公司。我们推出的几款游戏,都深受用户喜爱。其中的《数字填色书》是全球最受欢迎的数字填色应用之一,也是最成功的广告驱动式应用程序,获得广泛认可。',
+  zh: 'JCCY 是一家成立于2015年专业从事休闲娱乐游戏开发的公司。我们推出的几款游戏,都深受用户喜爱。其中的《数字涂色书》是全球最受欢迎的数字涂色应用之一,也是最成功的广告驱动式应用程序,获得广泛认可。',
   en: 'JCCY is a company founded in 2015 that specializes in the development of casual entertainment games. Several of our games have been well received by users. Among them, "Coloring Book by Numbers" is one of the most popular coloring by number apps in the world and the most successful ad-driven app, gaining wide recognition.',
   es: 'JCCY es una empresa fundada en 2015 especializada en el desarrollo de juegos de entretenimiento casual. Varios juegos que lanzamos son muy populares entre los usuarios. Entre ellos, "Coloring Book by Numbers" es una de las aplicaciones para colorear digitales más populares del mundo y también es la aplicación impulsada por publicidad de mayor éxito, obteniendo un amplio reconocimiento.',
   pt: 'A JCCY é uma empresa fundada em 2015 especializada no desenvolvimento de jogos de entretenimento casual. Vários jogos que lançamos são muito populares entre os usuários. Entre eles, o "Coloring Book by Numbers" é um dos aplicativos de colorir digitais mais populares do mundo e também o aplicativo de publicidade de maior sucesso, ganhando amplo reconhecimento.',
@@ -417,10 +434,10 @@ let supportOrFeedback = {
 
 let mayYouLike = {
   zh: '猜您喜欢',
-  en: 'May you like',
-  es: 'Supongo que te gustará',
-  pt: 'Acho que você vai gostar',
-  ja: 'あなたが気に入るかもしれません',
+  en: 'You May Like',
+  es: 'Es probable que te guste',
+  pt: 'Provavelmente você vai gostar',
+  ja: 'あなたは好きかもしれません',
 }
 
 let worksCount = {
@@ -469,9 +486,12 @@ let refuse = {
 let translate = {
   printableColoringPage,
   homePage,
+  introTitle,
+  introText,
   categoryPage,
   tagPage,
-  selectByTag,
+  tagPageHeading,
+  tagPageSubHeading,
   about,
   feedback,
   contactUs,
@@ -491,7 +511,6 @@ let translate = {
   cuteCatDescription,
   daily,
   album,
-  allAlbums,
   coloringPageAlbum,
   cuteKids,
   animalsHappyTime,

+ 36 - 1
dist/stylesheets/styles.css

@@ -94,6 +94,37 @@ body {
   width: 90%;
 }
 
+
+.breadcrumb {
+  list-style: none;
+  background-color: #f8f9fa;
+  border-radius: 4px;
+  padding: 8px;
+  margin: 0;
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+}
+
+.breadcrumb li {
+  margin-right: 8px;
+}
+
+.breadcrumb li:not(:last-child)::after {
+  content: '/';
+  margin-left: 8px;
+}
+
+.breadcrumb a {
+  text-decoration: none;
+  color: #007bff;
+}
+
+.breadcrumb a:hover {
+  text-decoration: underline;
+}
+
+
 /* 响应式设计, 如果是手机屏幕 */
 @media (max-width: 768px) {
   .image-grid {
@@ -113,5 +144,9 @@ body {
     grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
   }
 
+  /* 移动端不显示面包屑导航 */
+  .breadcrumb {
+    display: none;
+  }
 
-}
+}

+ 17 - 18
routes/index.js

@@ -66,7 +66,7 @@ router.get(/^\/(en|zh|es|pt|ja)$/, function (req, res, next) {  // 限制严格
 
     let imageType = req.headers.accept?.includes('image/webp') ? 'webp' : 'jpeg';  // 浏览器支持webp就用webp
 
-    let cacheKey = `${CACHE_PREFIX}_home_${lang}_${imageType}`;
+    let cacheKey = `${CACHE_PREFIX}_${imageType}_${req.originalUrl}`;
     let htmlData = await redis.getAsync(cacheKey);
     if (!htmlData) {
       let host = config.cdnHost ?? config.resHost;
@@ -237,7 +237,7 @@ router.get('/:lang/category/:tag?', function (req, res, next) {
 
     let imageType = req.headers.accept?.includes('image/webp') ? 'webp' : 'jpeg';  // 浏览器支持webp就用webp
 
-    let cacheKey = `${CACHE_PREFIX}_category_${tag}_${lang}_${imageType}`;
+    let cacheKey = `${CACHE_PREFIX}_${imageType}_${req.originalUrl}`;
     let htmlData = await redis.getAsync(cacheKey);
     if (!htmlData) {
 
@@ -310,7 +310,7 @@ router.get('/:lang/tag/:tag?', function (req, res, next) {
 
     let imageType = req.headers.accept?.includes('image/webp') ? 'webp' : 'jpeg';  // 浏览器支持webp就用webp
 
-    let cacheKey = `${CACHE_PREFIX}_tag_${tag}_${lang}_${imageType}`;
+    let cacheKey = `${CACHE_PREFIX}_${imageType}_${req.originalUrl}`;
     let htmlData = await redis.getAsync(cacheKey);
     if (!htmlData) {
       let query = {
@@ -378,12 +378,11 @@ router.get('/:lang/search', function (req, res, next) {
     if (!req.cookies.lang || req.cookies.lang != lang) {
       res.cookie('lang', lang, config.cookie);
     }
+    let search = req.query.search;
 
     let imageType = req.headers.accept?.includes('image/webp') ? 'webp' : 'jpeg';  // 浏览器支持webp就用webp
 
-    let search = req.query.search;
-
-    let cacheKey = `${CACHE_PREFIX}_search_${search}_${lang}_${imageType}`;
+    let cacheKey = `${CACHE_PREFIX}_${imageType}_${req.originalUrl}`;
     let htmlData = await redis.getAsync(cacheKey);
     if (!htmlData) {
       let query = {
@@ -451,7 +450,7 @@ router.get('/:lang/special', function (req, res, next) {
 
     let imageType = req.headers.accept?.includes('image/webp') ? 'webp' : 'jpeg';  // 浏览器支持webp就用webp
 
-    let cacheKey = `${CACHE_PREFIX}_special_${lang}_${imageType}`;
+    let cacheKey = `${CACHE_PREFIX}_${imageType}_${req.originalUrl}`;
     let htmlData = await redis.getAsync(cacheKey);
     if (!htmlData) {
       let query = {
@@ -520,7 +519,7 @@ router.get('/:lang/albums', function (req, res, next) {
 
     let imageType = req.headers.accept?.includes('image/webp') ? 'webp' : 'jpeg';  // 浏览器支持webp就用webp
 
-    let cacheKey = `${CACHE_PREFIX}_albums_${lang}_${imageType}`;
+    let cacheKey = `${CACHE_PREFIX}_${imageType}_${req.originalUrl}`;
     let htmlData = await redis.getAsync(cacheKey);
     if (!htmlData) {
       // 专辑
@@ -593,7 +592,7 @@ router.get('/:lang/album/:id', function (req, res, next) {
 
     let imageType = req.headers.accept?.includes('image/webp') ? 'webp' : 'jpeg';  // 浏览器支持webp就用webp
 
-    let cacheKey = `${CACHE_PREFIX}_album_${id}_${lang}_${imageType}`;
+    let cacheKey = `${CACHE_PREFIX}_${imageType}_${req.originalUrl}`;
     let htmlData = await redis.getAsync(cacheKey);
     if (!htmlData) {
       // 专辑
@@ -619,8 +618,8 @@ router.get('/:lang/album/:id', function (req, res, next) {
 
 
       let data = {
-        title: `${doc.title} | ${translate.coloringPageAlbum[lang]}`,
-        description: `${doc.slogon} | ${translate.coloringPageAlbum[lang]}`,
+        title: `${translate.coloringPageAlbum[lang]}: ${doc.title}`,
+        description: `${doc.slogon}`,
         data: doc,
         translate,
         languages,
@@ -665,7 +664,7 @@ router.get('/:lang/designers', function (req, res, next) {
 
     let imageType = req.headers.accept?.includes('image/webp') ? 'webp' : 'jpeg';  // 浏览器支持webp就用webp
 
-    let cacheKey = `${CACHE_PREFIX}_designers_${lang}_${imageType}`;
+    let cacheKey = `${CACHE_PREFIX}_${imageType}_${req.originalUrl}`;
     let htmlData = await redis.getAsync(cacheKey);
     if (!htmlData) {
       let docs = await models.Art.aggregate([
@@ -756,7 +755,7 @@ router.get('/:lang/designer/:id', function (req, res, next) {
 
     let imageType = req.headers.accept?.includes('image/webp') ? 'webp' : 'jpeg';  // 浏览器支持webp就用webp
 
-    let cacheKey = `${CACHE_PREFIX}_designer_${id}_${lang}_${imageType}`;
+    let cacheKey = `${CACHE_PREFIX}_${imageType}_${req.originalUrl}`;
     let htmlData = await redis.getAsync(cacheKey);
     if (!htmlData) {
       let user = await models.User.findById(id).select('name username');
@@ -851,7 +850,7 @@ router.get('/:lang/coloring-page/:str', function (req, res, next) {
 
     let imageType = req.headers.accept?.includes('image/webp') ? 'webp' : 'jpeg';  // 浏览器支持webp就用webp
 
-    let cacheKey = `${CACHE_PREFIX}_detail_${id}_${lang}_${imageType}`;
+    let cacheKey = `${CACHE_PREFIX}_${imageType}_detail_${id}_${lang}`;
     let htmlData = await redis.getAsync(cacheKey);
     if (!htmlData) {
       let doc = await models.Art
@@ -885,7 +884,7 @@ router.get('/:lang/coloring-page/:str', function (req, res, next) {
 
       let data = {
         // title: `${doc.name.replace(/[_]+/g, '-')}`,
-        title: `${doc.title} ${translate.printableColoringPage[lang]}`,
+        title: `${doc.title} | ${translate.printableColoringPage[lang]}`,
         description: `${doc.desc}`,
         // description: `${meta.detailDescription[lang]}: ${doc.desc}`,
         detail: doc,
@@ -941,7 +940,7 @@ router.get('/:lang/detail/:id', function (req, res, next) {
 
     let imageType = req.headers.accept?.includes('image/webp') ? 'webp' : 'jpeg';  // 浏览器支持webp就用webp
 
-    let cacheKey = `${CACHE_PREFIX}_detail_${id}_${lang}_${imageType}`;
+    let cacheKey = `${CACHE_PREFIX}_${imageType}_detail_${id}_${lang}`;
     let htmlData = await redis.getAsync(cacheKey);
     if (!htmlData) {
       let doc = await models.Art
@@ -974,7 +973,7 @@ router.get('/:lang/detail/:id', function (req, res, next) {
 
       let data = {
         // title: `${doc.name.replace(/[_]+/g, '-')}`,
-        title: `${doc.title} ${translate.printableColoringPage[lang]}`,
+        title: `${doc.title} | ${translate.printableColoringPage[lang]}`,
         description: `${doc.desc}`,
         // description: `${meta.detailDescription[lang]}: ${doc.desc}`,
         data: doc,
@@ -1172,7 +1171,7 @@ const organizeDetail = (doc, lang, imageType) => {
       console.error(e.message);
     }
   }
-  doc.publishTime = format(new Date(doc.publishTime), 'yyyy/MM/dd');
+  doc.publishTime = format(new Date(doc.publishTime), 'yyyy-MM-dd');
 
   doc.tags = doc.tags.filter(str => !/[\u4e00-\u9fa5]/.test(str)); // 过滤掉tags中的中文
 

+ 2 - 2
views/album-section.ejs

@@ -1,8 +1,8 @@
 <div class="content-wrapper">
   <div class="content-title">
-    <div style="font-size: 20px; font-weight: bold;">
+    <h2>
       <%= translate.selectAlbums[lang] %>:
-    </div>
+    </h2>
     <a href="<%= lang %>/albums">
       <%= translate.more[lang] %> >>>
     </a>

+ 40 - 5
views/album.ejs

@@ -6,6 +6,42 @@
     <link rel="stylesheet" href="/stylesheets/styles.css">
     <link rel="stylesheet" href="/stylesheets/header.css">
     <link rel="stylesheet" href="/stylesheets/album.css">
+    <script type="application/ld+json">
+      {
+        "@context": "https://schema.org",
+        "@type": "WebPage",
+        "name": "<%= data.title %>",
+        "description": "<%= data.slogon %>",
+        "url": "https://art.pcoloring.com<%= uri %>",
+        "mainEntityOfPage": "https://art.pcoloring.com<%= uri %>",
+        "publisher": {
+          "@type": "Organization",
+          "name": "JCCY",
+          "logo": {
+            "@type": "ImageObject",
+            "url": "https://art.pcoloring.com/assets/icon/icon.webp"
+          }
+        },
+        "image": "<%= data.cover %>",
+        "thumbnailUrl": "<%= data.icon %>",
+        "keywords": "coloring pages album, <%= data.title %>, printable, free coloring pages, album, art, color",
+        "contentRating": "General Audience",
+        "hasPart": [
+          <% data.contents.forEach(item=> { %>
+            {
+              "@type": "ImageObject",
+              "name": "<%= item.title %>",
+              "url": "https://art.pcoloring.com<%= item.uri %>",
+              "contentUrl": "<%= item.thumb %>",
+              "thumbnailUrl": "<%= item.thumb %>",
+              "height": "480",
+              "width": "480"
+            },
+          <% }); %>
+        ]
+      }
+  </script>
+
 </head>
 <!-- Google tag (gtag.js) -->
 <script async src="https://www.googletagmanager.com/gtag/js?id=G-JBGGVGLHTP"></script>
@@ -24,17 +60,16 @@
       <h1 style="color: purple">
         <%= data.title %>
       </h1>
-      <img src="<%= data.cover %>" alt="<%= data.title %> | <%= translate.coloringPageAlbum[lang] %>">
-      <div style="color: gray; font-size: 18px; padding: 10px">
+      <img src="<%= data.cover %>" alt="<%= data.title %>">
+      <h2 style="color: gray; font-size: 18px; padding: 10px">
         <%= data.slogon %>
-      </div>
+      </h2>
     </div>
 
     <div class="content">
       <div class="image-grid">
         <% data.contents.forEach(item=> { %>
-          <a href="<%= item.uri %>"><img src="<%= item.thumb %>"
-              alt="<%= item.title %> | <%= translate.printableColoringPage[lang]%>"></a>
+          <a href="<%= item.uri %>"><img src="<%= item.thumb %>" alt="<%= item.title %>"></a>
           <% }); %>
       </div>
     </div>

+ 5 - 2
views/albums.ejs

@@ -28,15 +28,18 @@
   <%- include('header') %>
 
     <h1 style="display: flex; justify-content: center; padding: 10px; color: purple">
-      <%= translate.allAlbums[lang] %>
+      <%= title %>
     </h1>
+    <h2 style="display: flex; justify-content: center; padding: 0px 10px 10px 10px; color: #333">
+      <%= description %>
+    </h2>
 
     <div class="content">
       <div class="album-grid">
         <% data.forEach(album=> { %>
           <div class="album-grid-card">
             <a href="/<%= lang %>/album/<%= album._id %>"><img src="<%= album.cover %>" class="album-cover-img"
-                alt="<%= album.title %> | <%= translate.coloringPageAlbum[lang] %>"></a>
+                alt="<%= album.title %>"></a>
             <div style="padding: 0px 0px 4px 4px; font-size: 14px;">
               <%= album.title %>
             </div>

+ 2 - 3
views/banner.ejs

@@ -5,7 +5,7 @@
   <div class="carousel-images">
     <div class="item" style="display: flex; flex-direction: row; justify-content: center; align-items: center;">
       <img width="50%" src="https://pcoloring.com/thumbs/coloring-page/page/480/5d8898684278e31afd9b6968.jpeg"
-        alt="<%= translate.cuteCat[lang] %> <%= translate.printableColoringPage[lang]%>">
+        alt="<%= translate.cuteCat[lang] %>">
       <div style="padding-right: 60px;">
         <h1>
           <%= translate.cuteCat[lang] %>
@@ -31,8 +31,7 @@
           <%= translate.play[lang] %>
         </a>
       </div>
-      <img width="40%" src="<%=daily.artInfo.thumb%>"
-        alt="<%= translate.daily[lang] %> <%= translate.printableColoringPage[lang]%>"">
+      <img width="40%" src="<%=daily.artInfo.thumb%>" alt="<%= translate.daily[lang] %>">
     </div>
 
     <div class=" item" style="position: relative; display: inline-block;">

+ 8 - 0
views/breadcrumb.ejs

@@ -0,0 +1,8 @@
+<nav aria-label="breadcrumb">
+  <ol class="breadcrumb">
+    <li class="breadcrumb-item active" aria-current="page"><a href="#">Home</a></li>
+    <li class="breadcrumb-item"><a href="#">Category</a></li>
+    <li class="breadcrumb-item"><a href="#">Subcategory</a></li>
+    <li class="breadcrumb-item active" aria-current="page">Product</li>
+  </ol>
+</nav>

+ 41 - 2
views/category.ejs

@@ -13,6 +13,43 @@
     <link rel="stylesheet" href="/stylesheets/styles.css">
     <link rel="stylesheet" href="/stylesheets/header.css">
     <link rel="stylesheet" href="/stylesheets/category.css">
+
+    <script type="application/ld+json">
+      {
+        "@context": "https://schema.org",
+        "@type": "WebPage",
+        "name": "<%= title %>",
+        "description": "<%= description %>",
+        "url": "https://art.pcoloring.com<%= uri %>",
+        "mainEntityOfPage": "https://art.pcoloring.com<%= uri %>",
+        "publisher": {
+          "@type": "Organization",
+          "name": "JCCY",
+          "logo": {
+            "@type": "ImageObject",
+            "url": "https://art.pcoloring.com/assets/icon/icon.webp"
+          }
+        },
+        "image": "<%= data[0].thumb %>",
+        "thumbnailUrl": "<%= data[0].thumb %>",
+        "keywords": "coloring pages categories, animal coloring page, plant coloring page, people coloring page, fantasy coloring page, famous coloring page, printable, free coloring pages, art, color by number, paint by number",
+        "contentRating": "General Audience",
+        "hasPart": [
+          <% for(let i = 0; i < 6; i++) { %>
+            {
+              "@type": "ImageObject",
+              "name": "<%= data[i].title %>",
+              "url": "https://art.pcoloring.com<%= data[i].uri %>",
+              "contentUrl": "<%= data[i].thumb %>",
+              "thumbnailUrl": "<%= data[i].thumb %>",
+              "height": "480",
+              "width": "480"
+            },
+          <% }; %>
+        ]
+      }
+  </script>
+
 </head>
 <!-- Google tag (gtag.js) -->
 <script async src="https://www.googletagmanager.com/gtag/js?id=G-JBGGVGLHTP"></script>
@@ -26,6 +63,9 @@
 
 <body>
   <%- include('header') %>
+    <h1 style="display: flex; justify-content: center; padding: 10px; color: purple">
+      <%= title %>
+    </h1>
     <div class="category">
       <% categories.forEach(item=> { %>
         <a href="/<%= lang %>/category/<%= item.id %>" class="<%= tag == item.id ? 'selected' : '' %>">
@@ -40,8 +80,7 @@
     <div class="content">
       <div class="image-grid">
         <% data.forEach(item=> { %>
-          <a href="<%= item.uri %>"><img src="<%= item.thumb %>"
-              alt="<%= item.title %> | <%= translate.printableColoringPage[lang]%>"></a>
+          <a href="<%= item.uri %>"><img src="<%= item.thumb %>" alt="<%= item.title %>"></a>
           <% }); %>
       </div>
     </div>

+ 17 - 7
views/designer-section.ejs

@@ -1,22 +1,32 @@
-
 <link rel="stylesheet" href="/stylesheets/designer.css">
 
 <div class="content-wrapper">
   <div class="content-title">
-    <div style="font-size: 20px; font-weight: bold;"><%= translate.designerColumn[lang] %>:</div>
-    <a href="<%= lang %>/designers"><%= translate.more[lang] %> >>></a>
+    <h2>
+      <%= translate.designerColumn[lang] %>:
+    </h2>
+    <a href="<%= lang %>/designers">
+      <%= translate.more[lang] %> >>>
+    </a>
   </div>
 
   <div class="container">
     <% designers.forEach(item=> { %>
       <div class="card">
-        <a href="/<%= lang %>/designer/<%= item._id %>"><img src="<%= item.avatar %>" loading="lazy" alt="<%= item.username %> | <%= translate.coloringPageDesigner[lang]%>"></a>
+        <a href="/<%= lang %>/designer/<%= item._id %>"><img src="<%= item.avatar %>" loading="lazy"
+            alt="<%= item.username %>"></a>
         <div class="info">
-          <p><strong><%= item.username %></strong></p>
-          <p><%= translate.worksCount[lang] %>: <strong><%= item.count %></strong></p>
+          <p><strong>
+              <%= item.username %>
+            </strong></p>
+          <p>
+            <%= translate.worksCount[lang] %>: <strong>
+                <%= item.count %>
+              </strong>
+          </p>
         </div>
       </div>
       <% }); %>
   </div>
 
-</div>
+</div>

+ 2 - 4
views/designer.ejs

@@ -22,8 +22,7 @@
 
     <div style="display: flex; justify-content: center; align-items: center; margin-top: 20px;">
       <div class="card" style="width: 200px;">
-        <a href="/<%= lang %>/designer/<%= user._id %>"><img src="<%= user.avatar %>"
-            alt="<%= user.username %> | <%= translate.coloringPageDesigner[lang]%>"></a>
+        <a href="/<%= lang %>/designer/<%= user._id %>"><img src="<%= user.avatar %>" alt="<%= user.username %>"></a>
         <div class="info">
           <p><strong>
               <%= user.username %>
@@ -40,8 +39,7 @@
     <div class="content">
       <div class="image-grid">
         <% data.forEach(item=> { %>
-          <a href="<%= item.uri %>"><img src="<%= item.thumb %>"
-              alt="<%= item.title %> | <%= translate.printableColoringPage[lang] %>"></a>
+          <a href="<%= item.uri %>"><img src="<%= item.thumb %>" alt="<%= item.title %>"></a>
           <% }); %>
       </div>
     </div>

+ 23 - 21
views/designers.ejs

@@ -27,28 +27,30 @@
 <body>
   <%- include('header') %>
 
-    <h1 style="display: flex; justify-content: center; padding: 10px; color: purple">
-      <%= translate.designerColumn[lang] %>
-    </h1>
-
-    <div class="container">
-      <% data.forEach(item=> { %>
-        <div class="card">
-          <a href="/<%= lang %>/designer/<%= item._id %>"><img src="<%= item.avatar %>"
-              alt="<%= item.username %> | <%= translate.coloringPageDesigner[lang]%>"></a>
-          <div class="info">
-            <p><strong>
-                <%= item.username %>
-              </strong></p>
-            <p>
-              <%= translate.worksCount[lang] %>: <strong>
-                  <%= item.count %>
-                </strong>
-            </p>
-          </div>
+  <h1 style="display: flex; justify-content: center; padding: 10px; color: purple">
+    <%= title %>
+  </h1>
+  <h2 style="display: flex; justify-content: center; padding: 0px 10px 10px 10px; color: #333">
+    <%= description %>
+  </h2>
+
+  <div class="container">
+    <% data.forEach(item=> { %>
+      <div class="card">
+        <a href="/<%= lang %>/designer/<%= item._id %>"><img src="<%= item.avatar %>" alt="<%= item.username %>"></a>
+        <div class="info">
+          <p><strong>
+              <%= item.username %>
+            </strong></p>
+          <p>
+            <%= translate.worksCount[lang] %>: <strong>
+                <%= item.count %>
+              </strong>
+          </p>
         </div>
-        <% }); %>
-    </div>
+      </div>
+      <% }); %>
+  </div>
 
 </body>
 

+ 52 - 4
views/detail.ejs

@@ -13,6 +13,52 @@
         <link rel="stylesheet" href="/stylesheets/styles.css">
         <link rel="stylesheet" href="/stylesheets/header.css">
         <link rel="stylesheet" href="/stylesheets/detail.css">
+
+        <script type="application/ld+json">
+        {
+            "@context": "https://schema.org",
+            "@type": "CreativeWork",
+            "name": "<%= translate.printableColoringPage[lang] %>: <%= detail.title %>",
+            "description": "<%= detail.desc %>",
+            "url": "https://art.pcoloring.com<%= uri %>",
+            "image": "<%= detail.thumb %>",
+            "category": "<%= detail.tags[0] %>",
+            "keywords": "coloring page, <%= detail.title %>, color by number, paint by number, free, printable,  <%= detail.tags.join() %>",
+            "contentRating": "General Audience",
+            "mainEntityOfPage": "https://art.pcoloring.com<%= uri %>",
+            "publisher": {
+                "@type": "Organization",
+                "name": "JCCY",
+                "logo": {
+                    "@type": "ImageObject",
+                    "url": "https://art.pcoloring.com/assets/icon/icon.webp"
+                }
+            },
+            "offers": {
+                "@type": "Offer",
+                "priceCurrency": "USD",
+                "price": "0.00",
+                "eligibleRegion": {
+                "@type": "Place",
+                "name": "Worldwide"
+                },
+                "url": "https://art.pcoloring.com<%= uri %>"
+            },
+            "author": {
+                "@type": "Person",
+                "name": "<%= detail.user.username %>"
+            },
+            "datePublished": "<%= detail.publishTime %>",
+            "interactionStatistic": {
+                "@type": "InteractionCounter",
+                "interactionType": {
+                "@type": "SocialMediaPosting",
+                "name": "Likes"
+                },
+                "userInteractionCount": 125
+            }
+        }
+    </script>
 </head>
 <!-- Google tag (gtag.js) -->
 <script async src="https://www.googletagmanager.com/gtag/js?id=G-JBGGVGLHTP"></script>
@@ -26,12 +72,15 @@
 
 <body>
     <%- include('header') %>
+        <h2 style="display: flex; justify-content: center; color: purple">
+            <%= translate.printableColoringPage[lang] %>
+        </h2>
         <div class="details">
             <div class="poster"><img src="<%= detail.thumb %>" alt="<%= detail.title %>"></div>
             <div class="description">
-                <div style="font-size: 30px; font-weight: 700;">
+                <h1>
                     <%= detail.title %>
-                </div>
+                </h1>
                 <p>
                     <%= translate.designer[lang] %>: <a href="/<%= lang %>/designer/<%= detail.user._id %>"
                             class="tag-button">
@@ -70,8 +119,7 @@
         <div class="content" style="margin-bottom: 40px;">
             <div class="image-grid">
                 <% relates.forEach(item=> { %>
-                    <a href="<%= item.uri %>"><img src="<%= item.thumb %>"
-                            alt="<%= item.title %> | <%= translate.printableColoringPage[lang]%>"></a>
+                    <a href="<%= item.uri %>"><img src="<%= item.thumb %>" alt="<%= item.title %>"></a>
                     <% }); %>
             </div>
         </div>

+ 3 - 4
views/hot-section.ejs

@@ -1,8 +1,8 @@
 <div class="content-wrapper">
   <div class="content-title">
-    <div style="font-size: 20px; font-weight: bold;">
+    <h2>
       <%= translate.hot[lang] %>:
-    </div>
+    </h2>
     <a href="/<%= lang %>/category/data_good">
       <%= translate.more[lang] %>>>>
     </a>
@@ -11,8 +11,7 @@
   <div class="content">
     <div class="image-grid">
       <% recommend.forEach(item=> { %>
-        <a href="<%= item.uri %>"><img src="<%= item.thumb %>"
-            alt="<%= item.title %> | <%= translate.printableColoringPage[lang]%>"></a>
+        <a href="<%= item.uri %>"><img src="<%= item.thumb %>" alt="<%= item.title %>"></a>
         <% }); %>
     </div>
   </div>

+ 40 - 9
views/index.ejs

@@ -11,6 +11,36 @@
 
     <link rel="stylesheet" href="/stylesheets/styles.css">
     <link rel="stylesheet" href="/stylesheets/header.css">
+
+    <script type="application/ld+json">
+      {
+        "@context": "https://schema.org",
+        "@type": "WebPage",
+        "name": "Art Number Coloring",
+        "description": "<%= description %>",
+        "url": "https://art.pcoloring.com",
+        "mainEntityOfPage": "https://art.pcoloring.com",
+        "publisher": {
+          "@type": "Organization",
+          "name": "JCCY",
+          "logo": {
+            "@type": "ImageObject",
+            "url": "https://art.pcoloring.com/assets/icon/icon.webp"
+          }
+        },
+        "image": "https://d2mb6s2cy1zg97.cloudfront.net/thumbs/coloring-page/page/480/5cc659a98e671e1d51f4e72c.webp",
+        "thumbnailUrl": "https://d2mb6s2cy1zg97.cloudfront.net/thumbs/coloring-page/page/320/5cc659a98e671e1d51f4e72c.webp",
+        "subjectOf": "CreativeWork"
+        "additionalType": "https://schema.org/CreativeWork",
+        "contentRating": "General Audience",
+        "keywords": "Coloring pages, Free Coloring pages, Coloring pages printable, Coloring pages for adults, Coloring pages for kids, Coloring pages for girls, Coloring pages for teens",
+        "potentialAction": {
+          "@type": "SearchAction",
+          "target": "https://art.pcoloring.com/en/search?search={search_term}",
+          "query-input": "required name=search_term"
+        }
+      }
+    </script>
 </head>
 <!-- Google tag (gtag.js) -->
 <script async src="https://www.googletagmanager.com/gtag/js?id=G-JBGGVGLHTP"></script>
@@ -24,15 +54,16 @@
 
 <body>
   <%- include('header') %>
-    <!-- <%- include('banner') %> -->
-    <%- include('latest-section') %>
-      <%- include('album-section') %>
-        <%- include('hot-section') %>
-          <%- include('designer-section') %>
-            <%- include('special-section') %>
-              <%- include('footer') %>
-                <%- include('cookie-banner') %>
-                  <div style="height: 50px;"></div>
+  <%- include('intro-section') %>
+  <%- include('latest-section') %>
+  <%- include('album-section') %>
+  <%- include('hot-section') %>
+  <%- include('designer-section') %>
+  <%- include('special-section') %>
+  <%- include('footer') %>
+  <%- include('cookie-banner') %>
+  <div style="height: 50px;"></div>
 </body>
 
+
 </html>

+ 9 - 0
views/intro-section.ejs

@@ -0,0 +1,9 @@
+<div style="padding: 0px 20px 20px 20px;">
+  <h1>
+    <%= translate.introTitle[lang] %>
+  </h1>
+  <span style="font-size: 24px; font-weight: bold; color: #ff4081">Art Number Coloring</span>
+  <span style="font-size: 18px;">
+    <%= translate.introText[lang] %>
+  </span>
+</div>

+ 3 - 4
views/latest-section.ejs

@@ -1,8 +1,8 @@
 <div class="content-wrapper">
   <div class="content-title">
-    <div style="font-size: 20px; font-weight: bold;">
+    <h2>
       <%= translate.latest[lang] %>:
-    </div>
+    </h2>
     <a href="/<%= lang %>/category/latest">
       <%= translate.more[lang] %>>>>
     </a>
@@ -11,8 +11,7 @@
   <div class="content">
     <div class="image-grid">
       <% latest.forEach(item=> { %>
-        <a href="<%= item.uri %>"><img src="<%= item.thumb %>"
-            alt="<%= item.title %> | <%= translate.printableColoringPage[lang]%>"></a>
+        <a href="<%= item.uri %>"><img src="<%= item.thumb %>" alt="<%= item.title %>"></a>
         <% }); %>
     </div>
   </div>

+ 3 - 4
views/special-section.ejs

@@ -1,8 +1,8 @@
 <div class="content-wrapper">
   <div class="content-title">
-    <div style="font-size: 20px; font-weight: bold;">
+    <h2>
       <%= translate.special[lang] %>:
-    </div>
+    </h2>
     <a href="/<%= lang %>/special">
       <%= translate.more[lang] %>>>>
     </a>
@@ -11,8 +11,7 @@
   <div class="content">
     <div class="image-grid">
       <% special.forEach(item=> { %>
-        <a href="<%= item.uri %>"><img src="<%= item.thumb %>"
-            alt="<%= item.title %> | <%= translate.printableColoringPage[lang]%>"></a>
+        <a href="<%= item.uri %>"><img src="<%= item.thumb %>" alt="<%= item.title %>"></a>
         <% }); %>
     </div>
   </div>

+ 13 - 11
views/special.ejs

@@ -26,19 +26,21 @@
 
 <body>
   <%- include('header') %>
-    <h1 style="display: flex; justify-content: center; padding: 10px; color: purple">
-      <%= translate.special[lang] %>
-    </h1>
-    <div class="content">
-      <div class="image-grid">
-        <% data.forEach(item=> { %>
-          <a href="<%= item.uri %>"><img src="<%= item.thumb %>"
-              alt="<%= item.title %> | <%= translate.printableColoringPage[lang] %>"></a>
-          <% }); %>
-      </div>
+  <h1 style="display: flex; justify-content: center; padding: 10px; color: purple">
+    <%= title %>
+  </h1>
+  <h2 style="display: flex; justify-content: center; padding: 0px 10px 10px 10px; color: #333">
+    <%= description %>
+  </h2>
+  <div class="content">
+    <div class="image-grid">
+      <% data.forEach(item=> { %>
+        <a href="<%= item.uri %>"><img src="<%= item.thumb %>" alt="<%= item.title %>"></a>
+        <% }); %>
     </div>
+  </div>
 
-    <%- include('pagination') %>
+  <%- include('pagination') %>
 
 </body>
 

+ 42 - 3
views/tag.ejs

@@ -13,6 +13,43 @@
     <link rel="stylesheet" href="/stylesheets/styles.css">
     <link rel="stylesheet" href="/stylesheets/header.css">
     <link rel="stylesheet" href="/stylesheets/tag.css">
+
+    <script type="application/ld+json">
+      {
+        "@context": "https://schema.org",
+        "@type": "WebPage",
+        "name": "<%= title %>",
+        "description": "<%= description %>",
+        "url": "https://art.pcoloring.com<%= uri %>",
+        "mainEntityOfPage": "https://art.pcoloring.com<%= uri %>",
+        "publisher": {
+          "@type": "Organization",
+          "name": "JCCY",
+          "logo": {
+            "@type": "ImageObject",
+            "url": "https://art.pcoloring.com/assets/icon/icon.webp"
+          }
+        },
+        "image": "<%= data[0].thumb %>",
+        "thumbnailUrl": "<%= data[0].thumb %>",
+        "keywords": "coloring pages tags, girl coloring page, animal coloring page, flower coloring page, fish coloring page, bird coloring page, printable, free coloring pages, art, color by number, paint by number",
+        "contentRating": "General Audience",
+        "hasPart": [
+          <% for(let i = 0; i < 6; i++) { %>
+            {
+              "@type": "ImageObject",
+              "name": "<%= data[i].title %>",
+              "url": "https://art.pcoloring.com<%= data[i].uri %>",
+              "contentUrl": "<%= data[i].thumb %>",
+              "thumbnailUrl": "<%= data[i].thumb %>",
+              "height": "480",
+              "width": "480"
+            },
+          <% }; %>
+        ]
+      }
+  </script>
+
 </head>
 <!-- Google tag (gtag.js) -->
 <script async src="https://www.googletagmanager.com/gtag/js?id=G-JBGGVGLHTP"></script>
@@ -28,14 +65,16 @@
   <%- include('header') %>
 
     <h1 style="display: flex; justify-content: center; padding: 10px; color: purple">
-      <%= translate.selectByTag[lang] %>
+      <%= title %>
     </h1>
+    <h2 style="display: flex; justify-content: center; padding: 0px 10px 10px 10px; color: #333">
+      <%= description %>
+    </h2>
 
     <div class="content">
       <div class="image-grid">
         <% data.forEach(item=> { %>
-          <a href="<%= item.uri %>"><img src="<%= item.thumb %>"
-              alt="<%= item.title %> | <%= translate.printableColoringPage[lang]%>"></a>
+          <a href="<%= item.uri %>"><img src="<%= item.thumb %>" alt="<%= item.title %>"></a>
           <% }); %>
       </div>
     </div>