Merge branch 'feature/seo2' into 'gray'
Feature/seo2 See merge request !1091
Showing
40 changed files
with
201 additions
and
105 deletions
@@ -5,7 +5,7 @@ | @@ -5,7 +5,7 @@ | ||
5 | {{# list}} | 5 | {{# list}} |
6 | <li class="swiper-slide"> | 6 | <li class="swiper-slide"> |
7 | <a href="{{url}}"> | 7 | <a href="{{url}}"> |
8 | - <img src="{{image2 img q=60}}" alt=""> | 8 | + <img src="{{image2 img q=60}}" alt="{{textCn}}"> |
9 | </a> | 9 | </a> |
10 | <span class="brands-title">{{textCn}}</span> | 10 | <span class="brands-title">{{textCn}}</span> |
11 | </li> | 11 | </li> |
@@ -270,12 +270,21 @@ const index = (req, res, next) => { | @@ -270,12 +270,21 @@ const index = (req, res, next) => { | ||
270 | let shareInfo = _shareInfo(id, detail.getArticle); | 270 | let shareInfo = _shareInfo(id, detail.getArticle); |
271 | 271 | ||
272 | Object.assign(guang, shareInfo); | 272 | Object.assign(guang, shareInfo); |
273 | - data.title = detail.getArticle.article_title + ' | Yoho!Buy有货 | 潮流购物逛不停'; | 273 | + data.title = detail.getArticle.article_title + '-YOHO!BUY 有货网'; |
274 | data.title_more = true; | 274 | data.title_more = true; |
275 | - data.description = detail.getArticle.article_summary; | 275 | + data.description = detail.getArticle.descriptionText; |
276 | data.description_more = true; | 276 | data.description_more = true; |
277 | } | 277 | } |
278 | 278 | ||
279 | + if (detail.getArticle.article_title) { | ||
280 | + parameter.tltle = detail.getArticle.article_title + '-YOHO!BUY 有货网'; | ||
281 | + parameter.keywords = detail.getArticle.article_title; | ||
282 | + } | ||
283 | + | ||
284 | + if (detail.getArticle.descriptionText) { | ||
285 | + parameter.description = detail.getArticle.descriptionText; | ||
286 | + } | ||
287 | + | ||
279 | // 标识有微信分享 | 288 | // 标识有微信分享 |
280 | data.hasWxShare = true; | 289 | data.hasWxShare = true; |
281 | 290 |
@@ -21,6 +21,34 @@ const channels = { | @@ -21,6 +21,34 @@ const channels = { | ||
21 | lifestyle: 4 | 21 | lifestyle: 4 |
22 | }; | 22 | }; |
23 | 23 | ||
24 | +const listTDK = { | ||
25 | + 0: { | ||
26 | + title: '最新潮流文章,逛最新潮流资讯-YOHO!BUY 有货网', | ||
27 | + keywords: '最新潮流文章,潮流资讯,逛潮流', | ||
28 | + description: '有货网每天提供全球最新最潮的潮流文章资讯,宣传潮流商品,潮流文化,潮流品牌等信息,想更多了解潮流最新资讯就来有货网!' | ||
29 | + }, // 最新 | ||
30 | + 1001: { | ||
31 | + title: '高人气潮流文章,逛人气潮流资讯-YOHO!BUY 有货网', | ||
32 | + keywords: '人气潮流文章,潮流人气,逛潮流人气', | ||
33 | + description: '有货网每天提供全球人气最高的潮流文章资讯,宣传潮流商品,潮流文化,潮流品牌等信息,想更多了解高人气潮流资讯就来有货网!' | ||
34 | + }, // 人气 | ||
35 | + 2: { | ||
36 | + title: '各种潮流搭配,逛潮流搭配资讯-YOHO!BUY 有货网', | ||
37 | + keywords: '搭配潮流文章,潮流搭配', | ||
38 | + description: '有货网每天提供全球最新最潮的潮流搭配文章资讯,宣传潮流商品,潮流文化,潮流品牌等信息,想更多了解学习潮流搭配资讯就来有货网!' | ||
39 | + }, // 搭配 | ||
40 | + 4: { | ||
41 | + title: '潮流品牌,逛各种潮流品牌资讯-YOHO!BUY 有货网', | ||
42 | + keywords: '逛潮品,潮流潮品,潮品资讯', | ||
43 | + description: '有货网每天提供全球最新最潮的潮流潮品文章资讯,宣传潮流商品,潮流文化,潮流品牌等信息,想更多了解学习潮流潮品资讯就来有货网!' | ||
44 | + }, // 潮品 | ||
45 | + 22: { | ||
46 | + title: '潮流视频,欣赏最新最好玩的潮流视频-YOHO!BUY 有货网', | ||
47 | + keywords: '潮流视频,看潮流', | ||
48 | + description: '有货网每天提供全球最新最潮最精彩的潮流视频,宣传潮流商品,潮流文化,潮流品牌等信息,想更多欣赏潮流视频就来有货网!' | ||
49 | + } // 视频 | ||
50 | +}; | ||
51 | + | ||
24 | /** | 52 | /** |
25 | * [编辑页面] | 53 | * [编辑页面] |
26 | */ | 54 | */ |
@@ -68,9 +96,9 @@ const editor = (req, res, next) => { | @@ -68,9 +96,9 @@ const editor = (req, res, next) => { | ||
68 | 96 | ||
69 | res.render('index/list', Object.assign({ | 97 | res.render('index/list', Object.assign({ |
70 | page: 'index-editor', | 98 | page: 'index-editor', |
71 | - title: `潮流编辑${name}|YOHO!BUY有货`, | ||
72 | - keywords: `潮流编辑${name}`, | ||
73 | - description: `YOHO!BUY有货潮流编辑${name}!`, | 99 | + title: `【${name}】潮流编辑${name}-YOHO!BUY 有货网`, |
100 | + keywords: `${name},潮流编辑${name},潮流编辑`, | ||
101 | + description: `有货逛潮流,潮流编辑${name}分享大量原创潮流资讯,掌握大量不同类别的潮流文化知识信息,尽在有货逛潮流。`, | ||
74 | guangList: true, | 102 | guangList: true, |
75 | gender: gender, | 103 | gender: gender, |
76 | guang: { | 104 | guang: { |
@@ -196,9 +224,9 @@ const index = (req, res, next) => { | @@ -196,9 +224,9 @@ const index = (req, res, next) => { | ||
196 | let responseData = { | 224 | let responseData = { |
197 | module: 'guang', | 225 | module: 'guang', |
198 | page: 'index', | 226 | page: 'index', |
199 | - title: '逛|逛潮流,逛购物,官方授权正品潮流购物中心|YOHO!BUY有货', | ||
200 | - keywords: '逛,逛潮流,逛购物', | ||
201 | - description: 'YOHO!BUY有货逛频道,来YOHO!玩潮流!潮搭大解析!年轻人潮流购物中心,中国潮流购物风向标,吴亦凡重磅代言!YOHO!BUY有货100%正品保证,支持货到付款。', | 227 | + title: '逛潮流,最新原创潮流资讯 |YOHO!BUY有货', |
228 | + keywords: '潮流资讯,潮流文章,有货潮流分享', | ||
229 | + description: '来有货玩潮流,潮流资讯大分享!年轻人潮流购物中心,了解潮流趋势、掌握潮流文化知识信息,尽在有货逛潮流!', | ||
202 | showFooterTab: footerModel.getUrlData('guang') | 230 | showFooterTab: footerModel.getUrlData('guang') |
203 | }; | 231 | }; |
204 | 232 | ||
@@ -209,6 +237,8 @@ const index = (req, res, next) => { | @@ -209,6 +237,8 @@ const index = (req, res, next) => { | ||
209 | gender: req.query.gender || req.query.channel && typeLib.gender[req.query.channel] || '1,3' | 237 | gender: req.query.gender || req.query.channel && typeLib.gender[req.query.channel] || '1,3' |
210 | }; | 238 | }; |
211 | 239 | ||
240 | + responseData = Object.assign(responseData, listTDK[param.type]); | ||
241 | + | ||
212 | req.ctx(IndexModel).getArticle(param).then(result => { | 242 | req.ctx(IndexModel).getArticle(param).then(result => { |
213 | if (result && result.guang && result.guang.infos) { | 243 | if (result && result.guang && result.guang.infos) { |
214 | if (!result.guang.infos.length) { | 244 | if (!result.guang.infos.length) { |
@@ -243,9 +273,9 @@ const tag = (req, res, next) => { | @@ -243,9 +273,9 @@ const tag = (req, res, next) => { | ||
243 | pageHeader: headerData, | 273 | pageHeader: headerData, |
244 | module: 'guang', | 274 | module: 'guang', |
245 | page: 'index-editor', | 275 | page: 'index-editor', |
246 | - title: tagTitle + ' | Yoho!Buy有货 | 潮流购物逛不停', | ||
247 | - keywords: tagTitle, | ||
248 | - description: 'YOHO!BUY有货潮流' + tagTitle + '!' | 276 | + title: '【' + tagTitle + '】' + tagTitle + '潮流资讯-YOHO!BUY 有货网', |
277 | + keywords: tagTitle + ',' + tagTitle + '潮流资讯,' + tagTitle + '文章', | ||
278 | + description: '来有货逛潮流,' + tagTitle + '潮流资讯大分享!了解' + tagTitle + '潮流趋势,掌握' + tagTitle + '潮流文化知识信息,尽在有货逛潮流。' | ||
249 | }; | 279 | }; |
250 | 280 | ||
251 | let param = { | 281 | let param = { |
@@ -260,7 +260,19 @@ class DetailModel extends global.yoho.BaseModel { | @@ -260,7 +260,19 @@ class DetailModel extends global.yoho.BaseModel { | ||
260 | } | 260 | } |
261 | 261 | ||
262 | if (datas[1]) { | 262 | if (datas[1]) { |
263 | + let textPosition = 1, | ||
264 | + descriptionText; | ||
265 | + | ||
263 | result.getArticleContent = getArticleContent = datas[1].data; | 266 | result.getArticleContent = getArticleContent = datas[1].data; |
267 | + | ||
268 | + for (let i = 0; i < getArticleContent.length; i++) { | ||
269 | + | ||
270 | + if (getArticleContent[i].text && textPosition === 1) { | ||
271 | + descriptionText = getArticleContent[i].text.data.text; | ||
272 | + result.getArticle.descriptionText = descriptionText.replace(/<\/?[^>]*>/g, ''); | ||
273 | + textPosition++; | ||
274 | + } | ||
275 | + } | ||
264 | } | 276 | } |
265 | 277 | ||
266 | if (isApp && datas[4] && datas[4].data) { | 278 | if (isApp && datas[4] && datas[4].data) { |
@@ -330,6 +342,10 @@ class DetailModel extends global.yoho.BaseModel { | @@ -330,6 +342,10 @@ class DetailModel extends global.yoho.BaseModel { | ||
330 | 342 | ||
331 | if (datas[2]) { | 343 | if (datas[2]) { |
332 | result.getBrand = datas[2].data; | 344 | result.getBrand = datas[2].data; |
345 | + | ||
346 | + _.forEach(result.getBrand, function(val) { | ||
347 | + val.url = `//m.yohobuy.com/shop?domain=${val.brandDomain}`; | ||
348 | + }); | ||
333 | } | 349 | } |
334 | 350 | ||
335 | if (isShare && datas[4]) { | 351 | if (isShare && datas[4]) { |
@@ -17,7 +17,7 @@ | @@ -17,7 +17,7 @@ | ||
17 | {{# detail}} | 17 | {{# detail}} |
18 | <div class="detail" data-id="{{id}}"> | 18 | <div class="detail" data-id="{{id}}"> |
19 | <div class="post-title"> | 19 | <div class="post-title"> |
20 | - <p class="title">{{title}}</p> | 20 | + <h1 class="title">{{title}}</h1> |
21 | {{> index/tvls}} | 21 | {{> index/tvls}} |
22 | </div> | 22 | </div> |
23 | <div class="post-content"> | 23 | <div class="post-content"> |
@@ -31,9 +31,9 @@ | @@ -31,9 +31,9 @@ | ||
31 | {{#if bigImage}} | 31 | {{#if bigImage}} |
32 | <div class="post-block big-img-block"> | 32 | <div class="post-block big-img-block"> |
33 | {{#if noLazy}} | 33 | {{#if noLazy}} |
34 | - <img src={{image2 bigImage q=60}}> | 34 | + <img src={{image2 bigImage q=60}} alt="{{@root.guang.detail.title}}"> |
35 | {{else}} | 35 | {{else}} |
36 | - <img class="lazy" data-original={{image2 bigImage q=60}}> | 36 | + <img class="lazy" data-original={{image2 bigImage q=60}} alt="{{@root.guang.detail.title}}"> |
37 | {{/if}} | 37 | {{/if}} |
38 | {{#if tagList}} | 38 | {{#if tagList}} |
39 | <div class="tag-list-box"> | 39 | <div class="tag-list-box"> |
@@ -49,11 +49,11 @@ | @@ -49,11 +49,11 @@ | ||
49 | <div class="post-block small-img-block clearfix"> | 49 | <div class="post-block small-img-block clearfix"> |
50 | {{#if noLazy}} | 50 | {{#if noLazy}} |
51 | {{# smallImage}} | 51 | {{# smallImage}} |
52 | - <img src={{image2 src q=60}}> | 52 | + <img src={{image2 src q=60}} alt="{{@root.guang.detail.title}}"> |
53 | {{/ smallImage}} | 53 | {{/ smallImage}} |
54 | {{else}} | 54 | {{else}} |
55 | {{# smallImage}} | 55 | {{# smallImage}} |
56 | - <img class="lazy" data-original={{image2 src q=60}}> | 56 | + <img class="lazy" data-original={{image2 src q=60}} alt="{{@root.guang.detail.title}}"> |
57 | {{/ smallImage}} | 57 | {{/ smallImage}} |
58 | {{/if}} | 58 | {{/if}} |
59 | 59 | ||
@@ -153,7 +153,7 @@ | @@ -153,7 +153,7 @@ | ||
153 | <li class="brand buriedpoint" data-bp-id="guang_brand_{{name}}_0"> | 153 | <li class="brand buriedpoint" data-bp-id="guang_brand_{{name}}_0"> |
154 | <a href={{url}}> | 154 | <a href={{url}}> |
155 | <div class="brand-logo"> | 155 | <div class="brand-logo"> |
156 | - <img class="lazy" data-original="{{image2 thumb q=60}}"> | 156 | + <img class="lazy" data-original="{{image2 thumb q=60}}" alt="{{name}}"> |
157 | </div> | 157 | </div> |
158 | <p class="brand-name">{{name}}</p> | 158 | <p class="brand-name">{{name}}</p> |
159 | </a> | 159 | </a> |
@@ -57,7 +57,7 @@ exports.detail = (req, res, next) => { | @@ -57,7 +57,7 @@ exports.detail = (req, res, next) => { | ||
57 | localCss: true, | 57 | localCss: true, |
58 | pageFooter: true, | 58 | pageFooter: true, |
59 | page: 'detail', | 59 | page: 'detail', |
60 | - cononical: { | 60 | + canonical: { |
61 | currentHref: `//www.yohobuy.com${req.originalUrl}` | 61 | currentHref: `//www.yohobuy.com${req.originalUrl}` |
62 | } | 62 | } |
63 | }, result)); | 63 | }, result)); |
@@ -83,7 +83,7 @@ const keyId = (req, res, next) => { | @@ -83,7 +83,7 @@ const keyId = (req, res, next) => { | ||
83 | description: `YOHO!BUY有货网yohobuy.com是国内专业的${queryKey}网上潮流购物商城,为您找到${_.get(result, | 83 | description: `YOHO!BUY有货网yohobuy.com是国内专业的${queryKey}网上潮流购物商城,为您找到${_.get(result, |
84 | 'total', 0)}条${queryKey}、产品的详细参数,实时报价,价格行情,图片、评价、品牌等信息。买${queryKey},就上YOHO!BUY有货`, | 84 | 'total', 0)}条${queryKey}、产品的详细参数,实时报价,价格行情,图片、评价、品牌等信息。买${queryKey},就上YOHO!BUY有货`, |
85 | pageFooter: true, | 85 | pageFooter: true, |
86 | - cononical: { | 86 | + canonical: { |
87 | currentHref: `//www.yohobuy.com${req.originalUrl}` | 87 | currentHref: `//www.yohobuy.com${req.originalUrl}` |
88 | } | 88 | } |
89 | }); | 89 | }); |
@@ -313,8 +313,8 @@ exports.index = (req, res, next) => { | @@ -313,8 +313,8 @@ exports.index = (req, res, next) => { | ||
313 | title: result.goodsName, | 313 | title: result.goodsName, |
314 | pageFooter: true, | 314 | pageFooter: true, |
315 | localCss: true, | 315 | localCss: true, |
316 | - cononical: { | ||
317 | - currentHref: result.cononical | 316 | + canonical: { |
317 | + currentHref: result.canonical | ||
318 | } | 318 | } |
319 | }); | 319 | }); |
320 | }).catch(next); | 320 | }).catch(next); |
@@ -2,6 +2,7 @@ | @@ -2,6 +2,7 @@ | ||
2 | 2 | ||
3 | const headerModel = require('../../../doraemon/models/header'); | 3 | const headerModel = require('../../../doraemon/models/header'); |
4 | const model = require('../models/global'); | 4 | const model = require('../models/global'); |
5 | +const _ = require('lodash'); | ||
5 | 6 | ||
6 | const list = (req, res, next) => { | 7 | const list = (req, res, next) => { |
7 | let brand = req.query.brand; | 8 | let brand = req.query.brand; |
@@ -84,6 +85,13 @@ const detail = (req, res, next) => { | @@ -84,6 +85,13 @@ const detail = (req, res, next) => { | ||
84 | let appPath = `yohobuy://yohobuy.com/goapp?openby:yohobuy={"action":"go.globalpurchase","params":${JSON.stringify(appParams)}}`; | 85 | let appPath = `yohobuy://yohobuy.com/goapp?openby:yohobuy={"action":"go.globalpurchase","params":${JSON.stringify(appParams)}}`; |
85 | 86 | ||
86 | res.render('global/detail', { | 87 | res.render('global/detail', { |
88 | + title: (_.get(result, 'brand_info.brand_name', '') ? '【' + result.brand_info.brand_name + '】' : '') + | ||
89 | + _.get(result, 'product_name', '') + '|YOHO!BUY 有货', | ||
90 | + keywords: _.get(result, 'brand_info.brand_name', '') + ',' + _.get(result, 'brand_info.brand_name', '') + | ||
91 | + '价格,' + _.get(result, 'brand_info.brand_name', '') + '图片,', | ||
92 | + description: _.get(result, 'product_name', '') + ' 有货网仅售' + _.get(result, 'sales_price', '') + '元,购买' + | ||
93 | + _.get(result, 'brand_info.brand_name', '') + ',了解' + _.get(result, 'brand_info.brand_name', '') + | ||
94 | + '商品信息就上有货网!', | ||
87 | module: 'product', | 95 | module: 'product', |
88 | page: 'global-detail', | 96 | page: 'global-detail', |
89 | pageHeader: headerModel.setNav({ | 97 | pageHeader: headerModel.setNav({ |
@@ -248,6 +248,9 @@ const category = (req, res, next) => { | @@ -248,6 +248,9 @@ const category = (req, res, next) => { | ||
248 | _noLazy: true, // 首屏不使用lazyload | 248 | _noLazy: true, // 首屏不使用lazyload |
249 | module: 'product', | 249 | module: 'product', |
250 | page: 'search-list', | 250 | page: 'search-list', |
251 | + canonical: { | ||
252 | + currentHref: 'https://www.yohobuy.com/list?' // TODO | ||
253 | + }, | ||
251 | pageHeader: headerModel.setNav({ | 254 | pageHeader: headerModel.setNav({ |
252 | navTitle: req.query.title || req.query.sort_name | 255 | navTitle: req.query.title || req.query.sort_name |
253 | }), | 256 | }), |
@@ -62,13 +62,14 @@ const newDetail = { | @@ -62,13 +62,14 @@ const newDetail = { | ||
62 | pageHeader: headerData, | 62 | pageHeader: headerData, |
63 | result: result, | 63 | result: result, |
64 | page: 'new-detail', | 64 | page: 'new-detail', |
65 | - title: `${result.brandName}|${result.sortName}|${result.goodsName}|YOHO!BUY 有货`, | ||
66 | - keywords: result.brandName + result.sortName + ',' + result.brandName + '官网专卖店,' + | ||
67 | - result.brandName + '官方授权店,' + result.brandName + '正品,' + result.brandName + '打折,' + | ||
68 | - result.brandName + '折扣店,' + | ||
69 | - result.brandName + '真品,' + result.brandName + '代购', | ||
70 | - description: `YOHO!BUY 有货-${result.brandName}官方授权店,${result.goodsName}图片、报价、介绍。` + | ||
71 | - `YOHO!BUY 有货${result.brandName}官网专卖店提供${result.brandName}正品、${result.brandName}真品、 ${result.brandName}打折、${result.brandName}代购等。`, // eslint-disable-line | 65 | + canonical: { |
66 | + currentHref: `//www.yohobuy.com${req.originalUrl}` | ||
67 | + }, | ||
68 | + title: `【${result.brandName}${result.sortName}】${result.goodsName}|YOHO!BUY 有货`, | ||
69 | + keywords: result.brandName + result.sortName + ',' + result.brandName + result.sortName + '价格,' + | ||
70 | + result.brandName + result.sortName + '图片,', | ||
71 | + description: result.goodsName + ' 有货网仅售' + result.goodsPrice.currentPrice + '元,购买' + | ||
72 | + result.brandName + result.sortName + ',了解' + result.brandName + result.sortName + '商品信息就上有货网!', | ||
72 | pageFooter: true, | 73 | pageFooter: true, |
73 | localCss: true, | 74 | localCss: true, |
74 | appPath: appPath, | 75 | appPath: appPath, |
@@ -17,6 +17,18 @@ const stringProcess = require(`${utils}/string-process`); | @@ -17,6 +17,18 @@ const stringProcess = require(`${utils}/string-process`); | ||
17 | const shopPrcs = require(`${utils}/shop-process`); | 17 | const shopPrcs = require(`${utils}/shop-process`); |
18 | const co = require('bluebird').coroutine; | 18 | const co = require('bluebird').coroutine; |
19 | 19 | ||
20 | +/** | ||
21 | + * SEO 优化,页面 TDK | ||
22 | + * @param {*} keyword | ||
23 | + */ | ||
24 | +const _tdkProcess = (keyword) => { | ||
25 | + return { | ||
26 | + title: `${keyword}| ${keyword}品牌旗舰店 |正品保证, YOHO!BUY 有货`, | ||
27 | + keywords: `${keyword},${keyword}品牌旗舰店,${keyword}正品`, | ||
28 | + description: `有货网${keyword}旗舰店销售${keyword}正品商品,100%质量保证,支持货到付款,想了解${keyword}价格、图片、评价等信息,就上YOHO!BUY 有货中国最大的潮流商品购物网站!`, // eslint-disable-line | ||
29 | + }; | ||
30 | +}; | ||
31 | + | ||
20 | const shop = { | 32 | const shop = { |
21 | 33 | ||
22 | /** | 34 | /** |
@@ -199,7 +211,7 @@ const shop = { | @@ -199,7 +211,7 @@ const shop = { | ||
199 | let goodsList = productProcess.processProductList(_.get(goodsListApi, 'data.product_list', [])); | 211 | let goodsList = productProcess.processProductList(_.get(goodsListApi, 'data.product_list', [])); |
200 | 212 | ||
201 | 213 | ||
202 | - res.render('newshop/shop-brand', { | 214 | + res.render('newshop/shop-brand', _.assign({ |
203 | module: 'product', | 215 | module: 'product', |
204 | page: 'shop-brand', | 216 | page: 'shop-brand', |
205 | pageHeader: headerModel.setNav({ | 217 | pageHeader: headerModel.setNav({ |
@@ -207,15 +219,12 @@ const shop = { | @@ -207,15 +219,12 @@ const shop = { | ||
207 | }), | 219 | }), |
208 | showDownloadApp: true, | 220 | showDownloadApp: true, |
209 | pageFooter: true, | 221 | pageFooter: true, |
210 | - title: title + '|' + title + '潮流服装服饰-Yoho!Buy有货', | ||
211 | - keywords: title + ',' + title + '服装服饰,' + title + '潮流服装服饰', | ||
212 | - description: title + '|Yoho!Buy有货' + title + '潮流服饰官方授权店!100%品牌正品保证,支持货到付款。', | ||
213 | brandId: brandId, | 222 | brandId: brandId, |
214 | goodsList: goodsList, | 223 | goodsList: goodsList, |
215 | shopPage: true, | 224 | shopPage: true, |
216 | _noLazy: true, | 225 | _noLazy: true, |
217 | localCss: true | 226 | localCss: true |
218 | - }); | 227 | + }, _tdkProcess(title))); |
219 | })().catch(next); | 228 | })().catch(next); |
220 | }, | 229 | }, |
221 | 230 | ||
@@ -253,10 +262,6 @@ const shop = { | @@ -253,10 +262,6 @@ const shop = { | ||
253 | shopInfo.shop_intro_link = helpers.urlFormat('/product/index/intro', { shop_id: shopId }); | 262 | shopInfo.shop_intro_link = helpers.urlFormat('/product/index/intro', { shop_id: shopId }); |
254 | 263 | ||
255 | let finalResult = { | 264 | let finalResult = { |
256 | - title: shopInfo.shop_name + '|' + shopInfo.shop_name + '潮流服装服饰-Yoho!Buy有货', | ||
257 | - keywords: shopInfo.shop_name + ',' + shopInfo.shop_name + '服装服饰,' + shopInfo.shop_name + '潮流服装服饰', | ||
258 | - description: shopInfo.shop_name + '|Yoho!Buy有货' + shopInfo.shop_name + | ||
259 | - '潮流服饰官方授权店!100%品牌正品保证,支持货到付款。', | ||
260 | pageHeader: _.assign({ | 265 | pageHeader: _.assign({ |
261 | shopPage: { | 266 | shopPage: { |
262 | text: '分类', | 267 | text: '分类', |
@@ -288,7 +293,7 @@ const shop = { | @@ -288,7 +293,7 @@ const shop = { | ||
288 | 293 | ||
289 | if (domain) { | 294 | if (domain) { |
290 | _.assign(finalResult, { | 295 | _.assign(finalResult, { |
291 | - cononical: { | 296 | + canonical: { |
292 | currentHref: `https://${domain}.m.yohobuy.com` | 297 | currentHref: `https://${domain}.m.yohobuy.com` |
293 | } | 298 | } |
294 | }); | 299 | }); |
@@ -299,7 +304,7 @@ const shop = { | @@ -299,7 +304,7 @@ const shop = { | ||
299 | 304 | ||
300 | res.render('newshop/shop-reds', _.assign(finalResult, { | 305 | res.render('newshop/shop-reds', _.assign(finalResult, { |
301 | shppFavHide: shppFavHide | 306 | shppFavHide: shppFavHide |
302 | - })); | 307 | + }, _tdkProcess(shopInfo.shop_name))); |
303 | })().catch(next); | 308 | })().catch(next); |
304 | }, | 309 | }, |
305 | 310 | ||
@@ -339,7 +344,7 @@ const shop = { | @@ -339,7 +344,7 @@ const shop = { | ||
339 | let appPath = 'yohobuy://yohobuy.com/goapp?openby:yohobuy={"action":"go.shop","params":{"shop_template_type":"1","shop_id":"' + | 344 | let appPath = 'yohobuy://yohobuy.com/goapp?openby:yohobuy={"action":"go.shop","params":{"shop_template_type":"1","shop_id":"' + |
340 | shopId + '","shop_name":"' + shopInfo.shop_name + '"}}'; | 345 | shopId + '","shop_name":"' + shopInfo.shop_name + '"}}'; |
341 | 346 | ||
342 | - res.render('newshop/shop-list', { | 347 | + res.render('newshop/shop-list', _.assign({ |
343 | module: 'product', | 348 | module: 'product', |
344 | page: 'shop-list', | 349 | page: 'shop-list', |
345 | pageHeader: headerModel.setNav({ | 350 | pageHeader: headerModel.setNav({ |
@@ -347,9 +352,6 @@ const shop = { | @@ -347,9 +352,6 @@ const shop = { | ||
347 | }), | 352 | }), |
348 | showDownloadApp: true, | 353 | showDownloadApp: true, |
349 | pageFooter: true, | 354 | pageFooter: true, |
350 | - title: title + '|' + title + '潮流服装服饰-Yoho!Buy有货', | ||
351 | - keywords: title + ',' + title + '服装服饰,' + title + '潮流服装服饰', | ||
352 | - description: title + '|Yoho!Buy有货' + title + '潮流服饰官方授权店!100%品牌正品保证,支持货到付款。', | ||
353 | shopId: shopId, | 355 | shopId: shopId, |
354 | shopInfo: shopInfo, | 356 | shopInfo: shopInfo, |
355 | goodsList: goodsList, | 357 | goodsList: goodsList, |
@@ -358,7 +360,7 @@ const shop = { | @@ -358,7 +360,7 @@ const shop = { | ||
358 | _noLazy: true, | 360 | _noLazy: true, |
359 | localCss: true, | 361 | localCss: true, |
360 | couponData | 362 | couponData |
361 | - }); | 363 | + }, _tdkProcess(title))); |
362 | 364 | ||
363 | })().catch(next); | 365 | })().catch(next); |
364 | }, | 366 | }, |
@@ -145,6 +145,9 @@ let breakingYards = (req, res, next) => { | @@ -145,6 +145,9 @@ let breakingYards = (req, res, next) => { | ||
145 | }).then((result) => { | 145 | }).then((result) => { |
146 | 146 | ||
147 | res.render('sale/break-code', Object.assign(params.renderData, result, { | 147 | res.render('sale/break-code', Object.assign(params.renderData, result, { |
148 | + title: '断码商品|断码折扣商品|YOHO!BUY有货', | ||
149 | + keywords: '断码商品、断码专区、断码折扣', | ||
150 | + description: '有货网为您带断码专区精选商品,大量断码商品,价格优惠幅度大,支持货到付款,让您全面了解潮流断码商品价格、品牌、图片、折扣等方面信息,想网购潮流断码区商品就上有货网!', | ||
148 | localCss: true | 151 | localCss: true |
149 | })); | 152 | })); |
150 | }).catch(next); | 153 | }).catch(next); |
@@ -185,6 +188,9 @@ let discountDetail = (req, res, next) => { | @@ -185,6 +188,9 @@ let discountDetail = (req, res, next) => { | ||
185 | res.locals.appPath = result.activity && result.activity.cover_url ? `yohobuy://yohobuy.com/goapp?openby:yohobuy={"action":"go.discountmarketpro","params":{"id":"${id}","cover_url":"${result.activity.cover_url.split('?')[0]}","title":"${result.title}"}}` : ''; | 188 | res.locals.appPath = result.activity && result.activity.cover_url ? `yohobuy://yohobuy.com/goapp?openby:yohobuy={"action":"go.discountmarketpro","params":{"id":"${id}","cover_url":"${result.activity.cover_url.split('?')[0]}","title":"${result.title}"}}` : ''; |
186 | 189 | ||
187 | res.render('sale/discount-detail', Object.assign(params.renderData, result, { | 190 | res.render('sale/discount-detail', Object.assign(params.renderData, result, { |
191 | + title: `【${result.title}】潮流折扣商品|YOHO!BUY 有货`, | ||
192 | + keywords: `${result.title}`, | ||
193 | + description: `有货网为您提供大量${result.title}商品,支持货到付款,质量保证,让您全面了解${result.title}商品价格、品牌、图片、折扣等方面信息,想网购${result.title}商品就上有货网!`, // eslint-disable-line | ||
188 | localCss: true | 194 | localCss: true |
189 | })); | 195 | })); |
190 | }).catch(next); | 196 | }).catch(next); |
@@ -209,6 +215,9 @@ let vip = (req, res, next) => { | @@ -209,6 +215,9 @@ let vip = (req, res, next) => { | ||
209 | 215 | ||
210 | saleModel.getVipData(params.channel).then((result) => { | 216 | saleModel.getVipData(params.channel).then((result) => { |
211 | res.render('sale/vip', Object.assign(params.renderData, { | 217 | res.render('sale/vip', Object.assign(params.renderData, { |
218 | + title: 'VIP会员专享|会员专享|YOHO!BUY有货', | ||
219 | + keywords: '会员专享,VIP专享,专享商品', | ||
220 | + description: '有货网为您带VIP会员专享精选商品,大量潮流品牌商品,VIP价格优惠幅度大,支持货到付款,让您全面了解VIP会员专享商品价格、品牌、图片、折扣等方面信息,想网购VIP会员专享商品就上有货网!', // eslint-disable-line | ||
212 | content: result, | 221 | content: result, |
213 | localCss: true | 222 | localCss: true |
214 | })); | 223 | })); |
@@ -292,7 +292,7 @@ module.exports = class extends global.yoho.BaseModel { | @@ -292,7 +292,7 @@ module.exports = class extends global.yoho.BaseModel { | ||
292 | } | 292 | } |
293 | 293 | ||
294 | /* tar add 161129 SEO 优化使用 */ | 294 | /* tar add 161129 SEO 优化使用 */ |
295 | - finalResult.cononical = result.product_url; | 295 | + finalResult.canonical = result.product_url; |
296 | 296 | ||
297 | return finalResult; | 297 | return finalResult; |
298 | }); | 298 | }); |
@@ -4,6 +4,7 @@ const utils = '../../../utils'; | @@ -4,6 +4,7 @@ const utils = '../../../utils'; | ||
4 | const productProcess = require(`${utils}/product-process`); | 4 | const productProcess = require(`${utils}/product-process`); |
5 | const globalapi = global.yoho.GlobalAPI; | 5 | const globalapi = global.yoho.GlobalAPI; |
6 | const $ = require('cheerio'); | 6 | const $ = require('cheerio'); |
7 | +const _ = require('lodash'); | ||
7 | 8 | ||
8 | exports.list = (param) => { | 9 | exports.list = (param) => { |
9 | return globalapi.get('product/api/v2/detail/getlist', param).then((result) => { | 10 | return globalapi.get('product/api/v2/detail/getlist', param).then((result) => { |
@@ -46,13 +47,15 @@ exports.detail = (param) => { | @@ -46,13 +47,15 @@ exports.detail = (param) => { | ||
46 | 47 | ||
47 | if (goods.length === 1) { | 48 | if (goods.length === 1) { |
48 | result.bannerTop = { | 49 | result.bannerTop = { |
49 | - img: (goods[0].images_list[0] || {}).image_url | 50 | + img: (goods[0].images_list[0] || {}).image_url, |
51 | + imgAlt: _.get(result, 'brand_info.brand_name', '') + '|' + _.get(result, 'product_name', '') | ||
50 | }; | 52 | }; |
51 | } else { | 53 | } else { |
52 | result.bannerTop = { | 54 | result.bannerTop = { |
53 | list: goods.map((g) => { | 55 | list: goods.map((g) => { |
54 | return { | 56 | return { |
55 | - img: (g.images_list[0] || {}).image_url | 57 | + img: (g.images_list[0] || {}).image_url, |
58 | + imgAlt: _.get(result, 'brand_info', 'brand_name', '') + '|' + _.get(result, 'product_name', '') | ||
56 | }; | 59 | }; |
57 | }) | 60 | }) |
58 | }; | 61 | }; |
@@ -31,32 +31,33 @@ | @@ -31,32 +31,33 @@ | ||
31 | {{/ bannerTop}} | 31 | {{/ bannerTop}} |
32 | </div> | 32 | </div> |
33 | 33 | ||
34 | - <h2 class="goods-name"> | 34 | + <div class="goods-name"> |
35 | {{# marketPhrase}} | 35 | {{# marketPhrase}} |
36 | <span class="activity-phrase">{{.}}</span> | 36 | <span class="activity-phrase">{{.}}</span> |
37 | {{/ marketPhrase}} | 37 | {{/ marketPhrase}} |
38 | {{# goodsName}} | 38 | {{# goodsName}} |
39 | - <span class="name">{{.}}</span> | 39 | + <h1 class="name">{{.}}</h1> |
40 | {{/ goodsName}} | 40 | {{/ goodsName}} |
41 | - </h2> | 41 | + </div> |
42 | 42 | ||
43 | {{# goodsSubtitle}} | 43 | {{# goodsSubtitle}} |
44 | - <h1 class="goods-subtitle"><span>{{.}}</span></h1> | 44 | + <h2 class="goods-subtitle"><span>{{.}}</span></h2> |
45 | {{/ goodsSubtitle}} | 45 | {{/ goodsSubtitle}} |
46 | 46 | ||
47 | <div class="price-date"> | 47 | <div class="price-date"> |
48 | <div class="goods-price"> | 48 | <div class="goods-price"> |
49 | - <h1 class="current-price">{{goodsPrice.currentPrice}}</h1> | ||
50 | - <h1 class="previous-price">{{goodsPrice.previousPrice}}</h1> | 49 | + <h2 class="current-price">{{goodsPrice.currentPrice}}</h2> |
50 | + <h2 class="previous-price">{{goodsPrice.previousPrice}}</h2> | ||
51 | </div> | 51 | </div> |
52 | <button class="limit-sale data-can-get-limit-code data-bind" id='limit-sale'>获取限购码</button> | 52 | <button class="limit-sale data-can-get-limit-code data-bind" id='limit-sale'>获取限购码</button> |
53 | <button class="got-limit-sale data-code-empty data-bind">限购码已被抢光</button> | 53 | <button class="got-limit-sale data-code-empty data-bind">限购码已被抢光</button> |
54 | <button class="got-limit-sale data-got-code data-bind">已获取限购码</button> | 54 | <button class="got-limit-sale data-got-code data-bind">已获取限购码</button> |
55 | </div> | 55 | </div> |
56 | + | ||
56 | {{#if periodOfMarket}} | 57 | {{#if periodOfMarket}} |
57 | <div class="period-of-market"> | 58 | <div class="period-of-market"> |
58 | - <h1>上市期:</h1> | ||
59 | - <h1 >{{periodOfMarket}}</h1> | 59 | + <h2>上市期:</h2> |
60 | + <h2>{{periodOfMarket}}</h2> | ||
60 | </div> | 61 | </div> |
61 | {{/if}} | 62 | {{/if}} |
62 | 63 | ||
@@ -85,7 +86,7 @@ | @@ -85,7 +86,7 @@ | ||
85 | {{!--占位: 购物车部分--}} | 86 | {{!--占位: 购物车部分--}} |
86 | <div id="placeholder-infodata"> | 87 | <div id="placeholder-infodata"> |
87 | <div class="cart-bar"> | 88 | <div class="cart-bar"> |
88 | - <a href="javascript:;" class="new-foot-ico"> | 89 | + <a href="javascript:;" class="new-foot-ico" rel="nofollow"> |
89 | <div class="num-incart iconfont"> | 90 | <div class="num-incart iconfont"> |
90 | <span class="num-tag {{#unless @root.cartCount}}hide{{/unless}}">{{@root.cartCount}}</span> | 91 | <span class="num-tag {{#unless @root.cartCount}}hide{{/unless}}">{{@root.cartCount}}</span> |
91 |  | 92 |  |
@@ -20,7 +20,7 @@ | @@ -20,7 +20,7 @@ | ||
20 | {{/ bannerTop}} | 20 | {{/ bannerTop}} |
21 | </div> | 21 | </div> |
22 | 22 | ||
23 | - <div class="goods-name"><span class="name">{{product_name}}</span></div> | 23 | + <div class="goods-name"><h1 class="name">{{product_name}}</h1></div> |
24 | 24 | ||
25 | <div class="price-date"> | 25 | <div class="price-date"> |
26 | <div> | 26 | <div> |
@@ -6,9 +6,9 @@ | @@ -6,9 +6,9 @@ | ||
6 | <li class="swiper-slide"> | 6 | <li class="swiper-slide"> |
7 | <a href="javascript:;"> | 7 | <a href="javascript:;"> |
8 | {{#if @first}} | 8 | {{#if @first}} |
9 | - <img src="{{image2 img w=450 h=600 q=60}}" alt=""> | 9 | + <img src="{{image2 img w=450 h=600 q=60}}" alt="{{imgAlt}}"> |
10 | {{else}} | 10 | {{else}} |
11 | - <img class="swiper-lazy" data-src="{{image2 img w=450 h=600 q=60}}" alt=""> | 11 | + <img class="swiper-lazy" data-src="{{image2 img w=450 h=600 q=60}}" alt="{{imgAlt}}"> |
12 | {{/if}} | 12 | {{/if}} |
13 | </a> | 13 | </a> |
14 | </li> | 14 | </li> |
@@ -27,10 +27,10 @@ | @@ -27,10 +27,10 @@ | ||
27 | <div class="banner-top-single"> | 27 | <div class="banner-top-single"> |
28 | {{#if url}} | 28 | {{#if url}} |
29 | <a href="{{url}}"> | 29 | <a href="{{url}}"> |
30 | - <img class="img" src="{{image2 img w=450 h=600 q=60}}"> | 30 | + <img class="img" src="{{image2 img w=450 h=600 q=60}}" alt="{{imgAlt}}"> |
31 | </a> | 31 | </a> |
32 | {{^}} | 32 | {{^}} |
33 | - <img class="img" src="{{image2 img w=450 h=600 q=60}}"> | 33 | + <img class="img" src="{{image2 img w=450 h=600 q=60}}" alt="{{imgAlt}}"> |
34 | {{/if}} | 34 | {{/if}} |
35 | 35 | ||
36 | </div> | 36 | </div> |
1 | <div class="item"> | 1 | <div class="item"> |
2 | - <a {{#if link}}href="{{link}}"{{/if}}> | 2 | + <a {{#if link}}href="{{link}}"{{/if}}{{#if isGood}} title="{{alt}}"{{/if}}> |
3 | {{#if isGood}} | 3 | {{#if isGood}} |
4 | {{#ifor triple double single}} | 4 | {{#ifor triple double single}} |
5 | {{#within index 3}} | 5 | {{#within index 3}} |
6 | - <img class="item-pic" src="{{image2 src w=235 h=314}}"> | 6 | + <img class="item-pic" src="{{image2 src w=235 h=314}}" alt="{{alt}}"> |
7 | {{^}} | 7 | {{^}} |
8 | - <img class="item-pic lazy" data-original="{{image2 src w=235 h=314}}"> | 8 | + <img class="item-pic lazy" data-original="{{image2 src w=235 h=314}}" alt="{{alt}}"> |
9 | {{/within}} | 9 | {{/within}} |
10 | {{/ifor}} | 10 | {{/ifor}} |
11 | {{^}} | 11 | {{^}} |
12 | {{#within index 3}} | 12 | {{#within index 3}} |
13 | - <img class="item-pic" src="{{image2 src}}" alt=""> | 13 | + <img class="item-pic" src="{{image2 src}}" alt="{{@root.title}}"> |
14 | {{^}} | 14 | {{^}} |
15 | <img class="item-pic lazy" data-original="{{image2 src}}"> | 15 | <img class="item-pic lazy" data-original="{{image2 src}}"> |
16 | {{/within}} | 16 | {{/within}} |
@@ -17,7 +17,7 @@ | @@ -17,7 +17,7 @@ | ||
17 | <li class="swiper-slide"> | 17 | <li class="swiper-slide"> |
18 | <a{{#if link}} href="{{link}}"{{/if}}> | 18 | <a{{#if link}} href="{{link}}"{{/if}}> |
19 | {{#within @../index 3}} | 19 | {{#within @../index 3}} |
20 | - <img src="{{image2 src}}" alt=""> | 20 | + <img src="{{image2 src}}" alt="{{@root.title}}"> |
21 | {{^}} | 21 | {{^}} |
22 | <img class="lazy" data-original="{{image2 src}}" alt=""> | 22 | <img class="lazy" data-original="{{image2 src}}" alt=""> |
23 | {{/within}} | 23 | {{/within}} |
@@ -21,11 +21,11 @@ module.exports = () => { | @@ -21,11 +21,11 @@ module.exports = () => { | ||
21 | } | 21 | } |
22 | } else if (req.subdomains.length) { | 22 | } else if (req.subdomains.length) { |
23 | switch (req.subdomains[0]) { | 23 | switch (req.subdomains[0]) { |
24 | - case 'guang': // 逛 | 24 | + case 'guang': |
25 | case 'cdnsrcguang': // CDN 逛 回源地址 | 25 | case 'cdnsrcguang': // CDN 逛 回源地址 |
26 | req.url = req.url.replace('/guang', ''); | 26 | req.url = req.url.replace('/guang', ''); |
27 | - req.url = `/guang${req.url}`; | ||
28 | - break; | 27 | + req.url = `//m.yohobuy.com/guang${req.url}`; |
28 | + return res.redirect(301, req.url); | ||
29 | case 'list': // list | 29 | case 'list': // list |
30 | case 'cdnsrclist':// CDN list 回源域名 | 30 | case 'cdnsrclist':// CDN list 回源域名 |
31 | if (req.path === '/') { | 31 | if (req.path === '/') { |
1 | /** | 1 | /** |
2 | * URL 重写(主要用于兼容原来PHP的连接) | 2 | * URL 重写(主要用于兼容原来PHP的连接) |
3 | */ | 3 | */ |
4 | +const querystring = require('querystring'); | ||
4 | const helpers = global.yoho.helpers; | 5 | const helpers = global.yoho.helpers; |
5 | 6 | ||
6 | module.exports = () => { | 7 | module.exports = () => { |
@@ -71,6 +72,11 @@ module.exports = () => { | @@ -71,6 +72,11 @@ module.exports = () => { | ||
71 | req.url = `/product/${req.url}`; | 72 | req.url = `/product/${req.url}`; |
72 | } | 73 | } |
73 | 74 | ||
75 | + if (/^\/list/.test(req.url)) { | ||
76 | + // 列表页路由重写 新路由 | ||
77 | + req.url = `/product/index/index?${querystring.stringify(req.query)}`; | ||
78 | + } | ||
79 | + | ||
74 | next(); | 80 | next(); |
75 | }; | 81 | }; |
76 | }; | 82 | }; |
@@ -12,7 +12,7 @@ exports.getUrlData = function(type, gender) { | @@ -12,7 +12,7 @@ exports.getUrlData = function(type, gender) { | ||
12 | const urlData = { | 12 | const urlData = { |
13 | indexUrl: helpers.urlFormat('/?go=1'), // 首页 | 13 | indexUrl: helpers.urlFormat('/?go=1'), // 首页 |
14 | categoryUrl: helpers.urlFormat('/cate'), // 分类 | 14 | categoryUrl: helpers.urlFormat('/cate'), // 分类 |
15 | - guangUrl: helpers.urlFormat('', gender ? {gender: gender} : null, 'guang'), // 逛首页 | 15 | + guangUrl: helpers.urlFormat('/guang', gender ? {gender: gender} : null), // 逛首页 |
16 | shoppingCartUrl: helpers.urlFormat('/cart/index/index'), // 购物车 | 16 | shoppingCartUrl: helpers.urlFormat('/cart/index/index'), // 购物车 |
17 | mineUrl: helpers.urlFormat('/home') // 个人中心 | 17 | mineUrl: helpers.urlFormat('/home') // 个人中心 |
18 | }; | 18 | }; |
@@ -11,10 +11,10 @@ | @@ -11,10 +11,10 @@ | ||
11 | <meta content="telephone=no" name="format-detection" /> | 11 | <meta content="telephone=no" name="format-detection" /> |
12 | <meta content="email=no" name="format-detection" /> | 12 | <meta content="email=no" name="format-detection" /> |
13 | <meta name="referrer" content="always"> | 13 | <meta name="referrer" content="always"> |
14 | - {{# cononical}} | 14 | + {{# canonical}} |
15 | <meta name="applicable-device" content="mobile"> | 15 | <meta name="applicable-device" content="mobile"> |
16 | - <link rel="cononical" href="{{currentHref}}"> | ||
17 | - {{/ cononical}} | 16 | + <link rel="canonical" href="{{currentHref}}"> |
17 | + {{/ canonical}} | ||
18 | {{#if miphtml}} | 18 | {{#if miphtml}} |
19 | <link rel="miphtml" href="{{miphtml}}"> | 19 | <link rel="miphtml" href="{{miphtml}}"> |
20 | {{/if}} | 20 | {{/if}} |
@@ -34,9 +34,9 @@ | @@ -34,9 +34,9 @@ | ||
34 | <div class="good-detail-img"> | 34 | <div class="good-detail-img"> |
35 | <a class="good-thumb" href="{{url}}"> | 35 | <a class="good-thumb" href="{{url}}"> |
36 | {{#if @root._noLazy}} | 36 | {{#if @root._noLazy}} |
37 | - <img src="{{image2 default_images w=235 h=314 q=60}}"/> | 37 | + <img src="{{image2 default_images w=235 h=314 q=60}}" alt="{{imgAlt}}"/> |
38 | {{else}} | 38 | {{else}} |
39 | - <img class="lazy" data-original="{{image2 default_images w=235 h=314 q=60}}"/> | 39 | + <img class="lazy" data-original="{{image2 default_images w=235 h=314 q=60}}" alt="{{imgAlt}}"/> |
40 | {{/if}} | 40 | {{/if}} |
41 | </a> | 41 | </a> |
42 | {{# is_soon_sold_out}} | 42 | {{# is_soon_sold_out}} |
@@ -77,13 +77,13 @@ | @@ -77,13 +77,13 @@ | ||
77 | </a> | 77 | </a> |
78 | </li> | 78 | </li> |
79 | <li> | 79 | <li> |
80 | - <a href="{{ shoppingCartUrl }}"> | 80 | + <a href="{{ shoppingCartUrl }}" rel="nofollow"> |
81 | <i class="iconfont"></i> | 81 | <i class="iconfont"></i> |
82 | <span>购物车</span> | 82 | <span>购物车</span> |
83 | </a> | 83 | </a> |
84 | </li> | 84 | </li> |
85 | <li> | 85 | <li> |
86 | - <a href="{{ mineUrl }}"> | 86 | + <a href="{{ mineUrl }}" rel="nofollow"> |
87 | <i class="iconfont"></i> | 87 | <i class="iconfont"></i> |
88 | <span>我的</span> | 88 | <span>我的</span> |
89 | </a> | 89 | </a> |
@@ -7,9 +7,9 @@ | @@ -7,9 +7,9 @@ | ||
7 | <li> | 7 | <li> |
8 | <a href="/product/sale/discount/detail?id={{id}}&channel={{@root.channel}}"> | 8 | <a href="/product/sale/discount/detail?id={{id}}&channel={{@root.channel}}"> |
9 | {{#within @index 3}} | 9 | {{#within @index 3}} |
10 | - <img src="{{image2 cover_url w=640 h=250 q=60}}"/> | 10 | + <img src="{{image2 cover_url w=640 h=250 q=60}}" alt="{{title}}"/> |
11 | {{^}} | 11 | {{^}} |
12 | - <img class="lazy" data-original="{{image2 cover_url w=640 h=250 q=60}}"/> | 12 | + <img class="lazy" data-original="{{image2 cover_url w=640 h=250 q=60}}" alt="{{title}}"/> |
13 | {{/within}} | 13 | {{/within}} |
14 | <p class="discount-cont"> | 14 | <p class="discount-cont"> |
15 | <span class="discount-title">{{title}}</span> | 15 | <span class="discount-title">{{title}}</span> |
@@ -24,7 +24,7 @@ | @@ -24,7 +24,7 @@ | ||
24 | {{# list}} | 24 | {{# list}} |
25 | <div class="brand-wall-box"> | 25 | <div class="brand-wall-box"> |
26 | <a href="{{url}}"> | 26 | <a href="{{url}}"> |
27 | - <img class="lazy" data-original="{{img}}"></img> | 27 | + <img class="lazy" data-original="{{img}}" alt="{{brandName}}"></img> |
28 | <div class="brand-name">{{brandName}}</div> | 28 | <div class="brand-name">{{brandName}}</div> |
29 | </a> | 29 | </a> |
30 | </div> | 30 | </div> |
@@ -37,7 +37,7 @@ | @@ -37,7 +37,7 @@ | ||
37 | {{# list}} | 37 | {{# list}} |
38 | <div class="brand-wall-box"> | 38 | <div class="brand-wall-box"> |
39 | <a href="{{url}}"> | 39 | <a href="{{url}}"> |
40 | - <img class="lazy" data-original="{{img}}"></img> | 40 | + <img class="lazy" data-original="{{img}}" alt="{{brandName}}"></img> |
41 | <div class="brand-name">{{brandName}}</div> | 41 | <div class="brand-name">{{brandName}}</div> |
42 | </a> | 42 | </a> |
43 | </div> | 43 | </div> |
@@ -57,7 +57,7 @@ | @@ -57,7 +57,7 @@ | ||
57 | </div> | 57 | </div> |
58 | {{/ consults}} | 58 | {{/ consults}} |
59 | </div> | 59 | </div> |
60 | - <a class="consult-content-footer tap-hightlight" href="{{consultsUrl}}"> | 60 | + <a class="consult-content-footer tap-hightlight" href="{{consultsUrl}}" rel="nofollow"> |
61 | 查看更多 | 61 | 查看更多 |
62 | <span class="iconfont"></span> | 62 | <span class="iconfont"></span> |
63 | </a> | 63 | </a> |
@@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
3 | {{#unless @root.wap.common.removeCartCount}} | 3 | {{#unless @root.wap.common.removeCartCount}} |
4 | <input type="hidden" id="remove-cart-count" value="1"> | 4 | <input type="hidden" id="remove-cart-count" value="1"> |
5 | {{/unless}} | 5 | {{/unless}} |
6 | - <a class="new-foot-ico" href="{{cartUrl}}"> | 6 | + <a class="new-foot-ico" href="{{cartUrl}}" rel="nofollow"> |
7 | <div class="num-incart iconfont"> | 7 | <div class="num-incart iconfont"> |
8 | <span class="num-tag {{#unless @root.cartCount}}hide{{/unless}}">{{@root.cartCount}}</span> | 8 | <span class="num-tag {{#unless @root.cartCount}}hide{{/unless}}">{{@root.cartCount}}</span> |
9 |  | 9 |  |
@@ -3,10 +3,10 @@ | @@ -3,10 +3,10 @@ | ||
3 | <div class="goods-discount" id="goodsDiscount"> | 3 | <div class="goods-discount" id="goodsDiscount"> |
4 | {{#each promotion}} | 4 | {{#each promotion}} |
5 | {{#if @first}} | 5 | {{#if @first}} |
6 | - <h1 class="first-item short-text tap-hightlight"><span class="promotion-icon">促</span>{{promotionTitle}}<span class="icon-down iconfont dropdown"></span></h1> | 6 | + <h2 class="first-item short-text tap-hightlight"><span class="promotion-icon">促</span>{{promotionTitle}}<span class="icon-down iconfont dropdown"></span></h2> |
7 | {{else}} | 7 | {{else}} |
8 | <div class="discount-folder"> | 8 | <div class="discount-folder"> |
9 | - <h1 class="folder-item tap-hightlight"><span class="promotion-icon">促</span>{{promotionTitle}}</h1> | 9 | + <h2 class="folder-item tap-hightlight"><span class="promotion-icon">促</span>{{promotionTitle}}</h2> |
10 | </div> | 10 | </div> |
11 | {{/if}} | 11 | {{/if}} |
12 | {{/each}} | 12 | {{/each}} |
@@ -206,9 +206,9 @@ $.extend({ | @@ -206,9 +206,9 @@ $.extend({ | ||
206 | 206 | ||
207 | // 未登录 | 207 | // 未登录 |
208 | $op.prepend( | 208 | $op.prepend( |
209 | - '<a href="/signin.html?refer=' + location.href + '">登录</a>' + | 209 | + '<a href="/signin.html?refer=' + location.href + '" rel="nofollow">登录</a>' + |
210 | '<span class="sep-line">|</span>' + | 210 | '<span class="sep-line">|</span>' + |
211 | - '<a href="/reg.html">注册</a>' | 211 | + '<a href="/reg.html" rel="nofollow">注册</a>' |
212 | ); | 212 | ); |
213 | } else { | 213 | } else { |
214 | 214 |
@@ -29,7 +29,7 @@ const getComments = () => { | @@ -29,7 +29,7 @@ const getComments = () => { | ||
29 | 29 | ||
30 | $.ajax({ | 30 | $.ajax({ |
31 | type: 'get', | 31 | type: 'get', |
32 | - url: '//guang.m.yohobuy.com/guang/info/getComments', | 32 | + url: '//m.yohobuy.com/guang/info/getComments', |
33 | data: { | 33 | data: { |
34 | article_id: article_id, | 34 | article_id: article_id, |
35 | page: page++ | 35 | page: page++ |
@@ -560,7 +560,7 @@ $basicBtnC: #eb0313; | @@ -560,7 +560,7 @@ $basicBtnC: #eb0313; | ||
560 | float: left; | 560 | float: left; |
561 | font-size: 34.59px; | 561 | font-size: 34.59px; |
562 | 562 | ||
563 | - h1 { | 563 | + h2 { |
564 | display: inline-block; | 564 | display: inline-block; |
565 | line-height: 88px; | 565 | line-height: 88px; |
566 | } | 566 | } |
@@ -603,7 +603,7 @@ $basicBtnC: #eb0313; | @@ -603,7 +603,7 @@ $basicBtnC: #eb0313; | ||
603 | font-size: 24px; | 603 | font-size: 24px; |
604 | border-bottom: 1px solid #e0e0e0; | 604 | border-bottom: 1px solid #e0e0e0; |
605 | 605 | ||
606 | - h1 { | 606 | + h2 { |
607 | display: inline-block; | 607 | display: inline-block; |
608 | line-height: 88px; | 608 | line-height: 88px; |
609 | } | 609 | } |
@@ -729,7 +729,7 @@ $basicBtnC: #eb0313; | @@ -729,7 +729,7 @@ $basicBtnC: #eb0313; | ||
729 | color: $mainFontC; | 729 | color: $mainFontC; |
730 | font-size: 28px; | 730 | font-size: 28px; |
731 | 731 | ||
732 | - h1 { | 732 | + h2 { |
733 | position: relative; | 733 | position: relative; |
734 | padding: 30px 60px 30px 30px; | 734 | padding: 30px 60px 30px 30px; |
735 | line-height: 36px; | 735 | line-height: 36px; |
@@ -111,7 +111,10 @@ class DetailProcess { | @@ -111,7 +111,10 @@ class DetailProcess { | ||
111 | value.img = _.replace(value.img, '/quality/80', '/quality/70'); | 111 | value.img = _.replace(value.img, '/quality/80', '/quality/70'); |
112 | 112 | ||
113 | bannerList.push({ | 113 | bannerList.push({ |
114 | - img: value.img | 114 | + img: value.img, |
115 | + imgAlt: _.compact([origin.brand_info.brand_name_en, origin.brand_info.brand_name_cn, | ||
116 | + (_.get(origin, 'gender', '1') === '1' ? '男' : '女'), origin.small_sort_name, | ||
117 | + origin.product_name]).join('|') | ||
115 | }); | 118 | }); |
116 | }); | 119 | }); |
117 | 120 |
@@ -83,7 +83,7 @@ const formatArticle = (articleData, showTag, isApp, showAuthor, uid, top) => { | @@ -83,7 +83,7 @@ const formatArticle = (articleData, showTag, isApp, showAuthor, uid, top) => { | ||
83 | id: articleData.id, | 83 | id: articleData.id, |
84 | showTags: showTag, | 84 | showTags: showTag, |
85 | img: articleData.src ? helpers.image(articleData.src, 640, 640) : '', | 85 | img: articleData.src ? helpers.image(articleData.src, 640, 640) : '', |
86 | - url: isApp ? `${helpers.https(articleData.url)}&openby:yohobuy={"action":"go.h5","params":{"param":{"id":"${articleData.id}"},"shareparam":{"id":"${articleData.id}"},"share":"/guang/api/v1/share/guang","id":${articleData.id},"type":1,"url":"http:${helpers.urlFormat('/info/index', null, 'guang')}","islogin":"N"}}` : articleData.url, //eslint-disable-line | 86 | + url: isApp ? `//m.yohobuy.com/guang/info/${articleData.id}.html?openby:yohobuy={"action":"go.h5","params":{"param":{"id":"${articleData.id}"},"shareparam":{"id":"${articleData.id}"},"share":"/guang/api/v1/share/guang","id":${articleData.id},"type":1,"url":"http://m.yohobuy.com/guang/info/${articleData.id}.html","islogin":"N"}}` : `//m.yohobuy.com/guang/info/${articleData.id}.html`, //eslint-disable-line |
87 | title: articleData.title, | 87 | title: articleData.title, |
88 | text: articleData.intro, | 88 | text: articleData.intro, |
89 | publishTime: articleData.publish_time, | 89 | publishTime: articleData.publish_time, |
@@ -237,6 +237,8 @@ exports.processProductList = (list, options) => { | @@ -237,6 +237,8 @@ exports.processProductList = (list, options) => { | ||
237 | 237 | ||
238 | product.seoTitle = `${product.brand_name}|${seoGender}${product.small_sort_name}|${product.product_name}|YOHO!BUY有货`; // eslint-disable-line | 238 | product.seoTitle = `${product.brand_name}|${seoGender}${product.small_sort_name}|${product.product_name}|YOHO!BUY有货`; // eslint-disable-line |
239 | 239 | ||
240 | + product.imgAlt = _.compact([product.brand_name, (product.gender ? GENDER[product.gender] : false), product.small_sort_name, product.product_name]).join('|'); | ||
241 | + | ||
240 | pruductList.push(product); | 242 | pruductList.push(product); |
241 | }); | 243 | }); |
242 | 244 |
@@ -4,12 +4,6 @@ | @@ -4,12 +4,6 @@ | ||
4 | * @date: 2016/7/29 | 4 | * @date: 2016/7/29 |
5 | */ | 5 | */ |
6 | 6 | ||
7 | -const _getGender = { | ||
8 | - '1,3': '男生', | ||
9 | - '2,3': '女生', | ||
10 | - '1,2,3': '', | ||
11 | -}; | ||
12 | - | ||
13 | /** | 7 | /** |
14 | * 根据频道判断出性别 | 8 | * 根据频道判断出性别 |
15 | */ | 9 | */ |
@@ -86,9 +80,9 @@ const getListSeoData = (gender, sort_name) => { | @@ -86,9 +80,9 @@ const getListSeoData = (gender, sort_name) => { | ||
86 | 80 | ||
87 | if (gender && sort_name) { | 81 | if (gender && sort_name) { |
88 | seoData = { | 82 | seoData = { |
89 | - title: `${sort_name}|新款${sort_name}${_getGender[gender]}|品牌正品|YOHO!BUY有货`, | ||
90 | - keywords: `新款${sort_name},${_getGender[gender]}${sort_name},品牌正品`, | ||
91 | - description: `正品网购!YOHO!BUY有货提供新款${sort_name}${_getGender[gender]}${sort_name}100%品牌正品保证,支持货到付款。` | 83 | + title: `${sort_name}|新款${sort_name},${sort_name}品牌正品|YOHO!BUY有货`, |
84 | + keywords: `${sort_name},新款${sort_name},${sort_name}品牌正品`, | ||
85 | + description: `有货网${sort_name}专卖店销售正品新款${sort_name},支持货到付款。了解新款${sort_name}、${sort_name}品牌价格、评价、图片等信息,网购超低折扣新款${sort_name}就上有货网。` // eslint-disable-line | ||
92 | }; | 86 | }; |
93 | } | 87 | } |
94 | return seoData; | 88 | return seoData; |
@@ -2,7 +2,6 @@ | @@ -2,7 +2,6 @@ | ||
2 | * @Author: Targaryen | 2 | * @Author: Targaryen |
3 | * @Date: 2017-03-23 11:02:31 | 3 | * @Date: 2017-03-23 11:02:31 |
4 | * @Last Modified by: Targaryen | 4 | * @Last Modified by: Targaryen |
5 | - * @Last Modified time: 2017-08-11 11:40:02 | ||
6 | */ | 5 | */ |
7 | /* 红人店铺数据处理 */ | 6 | /* 红人店铺数据处理 */ |
8 | 7 | ||
@@ -11,6 +10,11 @@ | @@ -11,6 +10,11 @@ | ||
11 | const _ = require('lodash'); | 10 | const _ = require('lodash'); |
12 | const helpers = global.yoho.helpers; | 11 | const helpers = global.yoho.helpers; |
13 | const productPrcs = require('./product-process'); | 12 | const productPrcs = require('./product-process'); |
13 | +const GENDER = { | ||
14 | + 1: '男', | ||
15 | + 2: '女', | ||
16 | + 3: '男|女' | ||
17 | +}; | ||
14 | 18 | ||
15 | let countCarouselImage = 0; // 轮播图模块统计 | 19 | let countCarouselImage = 0; // 轮播图模块统计 |
16 | 20 | ||
@@ -343,10 +347,15 @@ const pushGoodsInfo = (decorators, goodsList) => { | @@ -343,10 +347,15 @@ const pushGoodsInfo = (decorators, goodsList) => { | ||
343 | if (salesPrice === 0) { | 347 | if (salesPrice === 0) { |
344 | decorators[key].noShowProductInfo = true; | 348 | decorators[key].noShowProductInfo = true; |
345 | } | 349 | } |
350 | + | ||
346 | decorators[key].pics[subKey].name = _.get(goodsObj, `${subValue.skn}.product_name`, ''); | 351 | decorators[key].pics[subKey].name = _.get(goodsObj, `${subValue.skn}.product_name`, ''); |
347 | decorators[key].pics[subKey].salesPrice = salesPrice ? '¥' + salesPrice : ''; | 352 | decorators[key].pics[subKey].salesPrice = salesPrice ? '¥' + salesPrice : ''; |
348 | decorators[key].pics[subKey].marketPrice = marketPrice ? '¥' + marketPrice : ''; | 353 | decorators[key].pics[subKey].marketPrice = marketPrice ? '¥' + marketPrice : ''; |
349 | decorators[key].pics[subKey].isGood = true; | 354 | decorators[key].pics[subKey].isGood = true; |
355 | + decorators[key].pics[subKey].alt = _.get(goodsObj, `${subValue.skn}.brand_name`, '') + | ||
356 | + '|' + GENDER[_.get(goodsObj, `${subValue.skn}.gender`, '3')] + | ||
357 | + '|' + _.get(goodsObj, `${subValue.skn}.small_sort_name`, '') + | ||
358 | + '|' + _.get(goodsObj, `${subValue.skn}.product_name`, ''); | ||
350 | 359 | ||
351 | if (value.module_type === 'TripleImage' || | 360 | if (value.module_type === 'TripleImage' || |
352 | value.module_type === 'DoubleImage' || | 361 | value.module_type === 'DoubleImage' || |
-
Please register or login to post a comment